lc4-disassembler / obj_files_for_testing / os.asm
os.asm
Raw


    .OS
    .CODE
    .ADDR x8000
    JMP TRAP_GETC
    JMP TRAP_PUTC
    JMP TRAP_GETS
    JMP TRAP_PUTS
    JMP TRAP_GETC_TIMER
    JMP TRAP_DRAW_RECT

    .ADDR x8200


.CODE
OS_START
    CONST R7, #0
    RTI

.CODE
TRAP_GETC
    CONST R0, #0
    HICONST R0, #254
    LDR R0, R0, #0
    BRzp TRAP_GETC
    CONST R0, #2
    HICONST R0, #254
    LDR R0, R0, #0
    RTI

.CODE
TRAP_PUTC
    CONST R1, #4
    HICONST R1, #254
    LDR R1, R1, #0
    BRzp TRAP_PUTC
    CONST R1, #6
    HICONST R1, #254
    STR R0, R1, #0
    RTI

.CODE
TRAP_GETS
    CONST R1, #0
    CONST R4, #0
    HICONST R4, #32
    CMP R0, R4
    BRn DONE_GETS_NO_WRITE
    CONST R4, #255
    HICONST R4, #127
    CMP R0, R4
    BRp DONE_GETS_NO_WRITE
    CONST R4, #0
    CONST R4, #0

.CODE
READ
    CONST R2, #0
    HICONST R2, #254
    LDR R2, R2, #0
    BRzp READ
    CONST R3, #2
    HICONST R3, #254
    LDR R5, R3, #0
    CONST R6, #0
    HICONST R6, #13
    CMP R5, R6
    BRz DONE_GETS
    CONST R6, #10
    CMP R5, R6
    BRz DONE_GETS
    CONST R6, #0
    CMP R5, R6
    BRz DONE_GETS
    ADD R4, R0, R1
    STR R5, R4, #0
    ADD R1, R1, #1
    BRnzp READ

.CODE
DONE_GETS
    CONST R6, #0
    HICONST R6, #0
    ADD R4, R0, R1
    ADD R4, R4, #1
    STR R6, R4, #0

.CODE
DONE_GETS_NO_WRITE
    RTI

.CODE
TRAP_PUTS
    CONST R4, #0
    HICONST R4, #32
    CMP R0, R4
    BRn DONE_PUTS
    CONST R4, #255
    HICONST R4, #127
    CMP R0, R4
    BRp DONE_PUTS
    CONST R4, #0

.CODE
LOAD
    ADD R2, R4, R0
    LDR R1, R2, #0
    CMPI R1, #0
    BRz DONE_PUTS
    CONST R2, #4
    HICONST R2, #254
    LDR R2, R2, #0
    BRzp LOAD
    CONST R3, #6
    HICONST R3, #254
    STR R1, R3, #0
    ADD R4, R4, #1
    BRnzp LOAD

.CODE
DONE_PUTS
    RTI

.CODE
TRAP_GETC_TIMER
    CONST R1, #10
    HICONST R1, #254
    CONST R3, #8
    HICONST R3, #254
    CONST R2, #208
    HICONST R2, #7
    STR R2, R1, #0

.CODE
AWAIT_LOOP
    LDR R4, R3, #0
    BRn DONE_WAITING
    CONST R0, #0
    HICONST R0, #254
    LDR R0, R0, #0
    BRn READY_TO_READ
    BRz AWAIT_LOOP

.CODE
READY_TO_READ
    CONST R0, #2
    HICONST R0, #254
    LDR R0, R0, #0

.CODE
DONE_WAITING
    RTI

.CODE
TRAP_DRAW_RECT
    STR R7, R6, #-2
    STR R5, R6, #-3
    ADD R6, R6, #-3
    ADD R5, R6, #0
    ADD R6, R6, #-5
    STR R0, R5, #-1
    STR R1, R5, #-2
    STR R2, R5, #-3
    STR R3, R5, #-4
    STR R4, R5, #-5
    CMPI R2, #0
    BRnz DONE_DRAWING
    CMPI R3, #0
    BRnz DONE_DRAWING
    CMPI R1, #0
    BRnz DONE_DRAWING
    CONST R7, #124
    CMP R3, R7
    BRp DONE_DRAWING
    CONST R7, #128
    CMP R2, R7
    BRp DONE_DRAWING
    CMPI R0, #0
    BRn DONE_DRAWING
    CMPI R1, #0
    BRn DONE_DRAWING
    ADD R3, R3, R1
    ADD R2, R2, R0

.CODE
VALIDATE_SIZE_AND_POSITION_Y
    CONST R7, #124
    CMP R3, R7
    BRp FIX_Y

.CODE
VALIDATE_SIZE_AND_POSITION_X
    CONST R7, #128
    CMP R2, R7
    BRp FIX_X
    BRnz SET_UP_NEW_ROW

.CODE
FIX_Y
    SUB R7, R3, R7
    SUB R0, R0, R7
    SUB R3, R3, R7
    BRnzp VALIDATE_SIZE_AND_POSITION_X

.CODE
FIX_X
    SUB R7, R2, R7
    SUB R0, R0, R7
    SUB R2, R2, R7

.CODE
SET_UP_NEW_ROW
    CONST R7, #128
    MUL R7, R1, R7
    CONST R4, #0
    HICONST R4, #192
    ADD R7, R7, R0
    ADD R7, R7, R4
    ADD R4, R0, #0
    BRnzp UPDATE_ROW_IF_DONE

.CODE
DRAW_COLUMN
    STR R2, R5, #-3
    LDR R2, R5, #-5
    STR R2, R7, #0
    LDR R2, R5, #-3
    ADD R4, R4, #1
    ADD R7, R7, #1

.CODE
UPDATE_ROW_IF_DONE
    CMP R4, R2
    BRn DRAW_COLUMN
    ADD R1, R1, #1
    CMP R1, R3
    BRn SET_UP_NEW_ROW

.CODE
DONE_DRAWING
    ADD R6, R5, #0
    ADD R6, R6, #3
    LDR R5, R6, #-3
    LDR R7, R6, #-2
    RTI

    .DATA
    .ADDR xA000
OS_GLOBALS_MEM
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP

    .ADDR xC000

OS_VIDEO_MEM
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP