OpenCores
URL https://opencores.org/ocsvn/raptor64/raptor64/trunk

Subversion Repositories raptor64

[/] [raptor64/] [trunk/] [software/] [sample code/] [bootrom.lst] - Diff between revs 43 and 46

Show entire file | Details | Blame | View Log

Rev 43 Rev 46
Line 1... Line 1...
                                                ; ============================================================================
                                                ; ============================================================================
                                                 ; (C) 2012,2013 Robert Finch, Stratford
                                                 ;        __
                                                 ; All Rights Reserved.
                                                 ;   \\__/ o\    (C) 2012-2013  Robert Finch, Stratford
                                                 ; robfinch@opencores.org
                                                 ;    \  __ /    All rights reserved.
 
                                                 ;     \/_//     robfinch@opencores.org
 
                                                 ;       ||
 
                                                 ;
                                                 ;
                                                 ;
                                                 ; This source file is free software: you can redistribute it and/or modify
                                                 ; This source file is free software: you can redistribute it and/or modify
                                                 ; it under the terms of the GNU Lesser General Public License as published
                                                 ; it under the terms of the GNU Lesser General Public License as published
                                                 ; by the Free Software Foundation, either version 3 of the License, or
                                                 ; by the Free Software Foundation, either version 3 of the License, or
                                                 ; (at your option) any later version.
                                                 ; (at your option) any later version.
Line 21... Line 24...
                                                 CR     EQU     0x0D            ;ASCII equates
                                                 CR     EQU     0x0D            ;ASCII equates
                                                 LF     EQU     0x0A
                                                 LF     EQU     0x0A
                                                 TAB    EQU     0x09
                                                 TAB    EQU     0x09
                                                 CTRLC  EQU     0x03
                                                 CTRLC  EQU     0x03
                                                 CTRLH  EQU     0x08
                                                 CTRLH  EQU     0x08
 
                                                 CTRLI  EQU     0x09
 
                                                 CTRLJ  EQU     0x0A
 
                                                 CTRLK  EQU     0x0B
 
                                                 CTRLM   EQU 0x0D
                                                 CTRLS  EQU     0x13
                                                 CTRLS  EQU     0x13
                                                 CTRLX  EQU     0x18
                                                 CTRLX  EQU     0x18
                                                 XON            EQU     0x11
                                                 XON            EQU     0x11
                                                 XOFF   EQU     0x13
                                                 XOFF   EQU     0x13
 
 
 
                                                 EX_IRQ EQU     449
 
 
                                                 DATA_PRESENT   EQU     0x01            ; there is data preset at the serial port bc_uart3
                                                 DATA_PRESENT   EQU     0x01            ; there is data preset at the serial port bc_uart3
                                                 XMIT_NOT_FULL  EQU     0x20
                                                 XMIT_NOT_FULL  EQU     0x20
 
 
                                                 BUFLEN EQU     80      ;       length of keyboard input buffer
                                                 BUFLEN EQU     80      ;       length of keyboard input buffer
 
 
Line 88... Line 97...
                                                 TCBr28         EQU             0xD8
                                                 TCBr28         EQU             0xD8
                                                 TCBr29         EQU             0xE0
                                                 TCBr29         EQU             0xE0
                                                 TCBr30         EQU             0xE8
                                                 TCBr30         EQU             0xE8
                                                 TCBr31         EQU             0xF0
                                                 TCBr31         EQU             0xF0
 
 
 
                                                 SCREENGATE     EQU             0x00
 
                                                 KEYBDGATE      EQU             0x01
 
                                                 VIDEOGATE      EQU             0x02
 
                                                 CARDGATE       EQU             0x03
                                                 warmStart   EQU     0x1020
                                                 warmStart   EQU     0x1020
                                                 usrJmp      EQU     0x1028
                                                 usrJmp      EQU     0x1028
                                                 TickIRQAddr            EQU             0x1030
                                                 TickIRQAddr            EQU             0x1030
                                                 TaskBlock              EQU             0x1038
                                                 TaskBlock              EQU             0x1038
                                                 tencount               EQU             0x13F8
 
                                                 Milliseconds   EQU             0x1400
                                                 Milliseconds   EQU             0x1400
                                                 Lastloc                        EQU             0x1408
                                                 Lastloc                        EQU             0x1408
 
                                                 CharColor      EQU             0x1410
                                                 ScreenColor    EQU             0x1414
                                                 ScreenColor    EQU             0x1414
                                                 CursorRow      EQU             0x1416
                                                 CursorRow      EQU             0x1417
                                                 CursorCol      EQU             0x1418
                                                 CursorCol      EQU             0x1418
                                                 CursorFlash    EQU             0x141A
                                                 CursorFlash    EQU             0x141A
                                                 KeybdEcho      EQU             0x141C
                                                 KeybdEcho      EQU             0x141C
                                                 KeybdBuffer    EQU             0x1440
                                                 KeybdBuffer    EQU             0x1440
                                                 KeybdHead      EQU             0x1450
                                                 KeybdHead      EQU             0x1450
                                                 KeybdTail      EQU             0x1451
                                                 KeybdTail      EQU             0x1451
 
                                                 sp_save                EQU             0x1460
 
                                                 lr_save                EQU             0x1468
 
                                                 r1_save                EQU             0x1470
 
                                                 r2_save                EQU             0x1478
 
                                                 r26_save       EQU             0x1480
                                                 Score          EQU             0x1500
                                                 Score          EQU             0x1500
                                                 Manpos         EQU             0x1508
                                                 Manpos         EQU             0x1508
                                                 MissileActive  EQU             0x1510
                                                 MissileActive  EQU             0x1510
                                                 MissileX       EQU             0x1512
                                                 MissileX       EQU             0x1512
                                                 MissileY       EQU             0x1514
                                                 MissileY       EQU             0x1514
Line 146... Line 164...
                                                 NextToRunTCB   EQU             0x20A8
                                                 NextToRunTCB   EQU             0x20A8
                                                 r1save                 EQU             0x20B0
                                                 r1save                 EQU             0x20B0
                                                 r2save                 EQU             0x20B8
                                                 r2save                 EQU             0x20B8
                                                 AXCstart               EQU             0x20C0
                                                 AXCstart               EQU             0x20C0
 
 
 
                                                 ; Context startup address table
 
                                                 ;
 
                                                 ctx0start              EQU             0x20D0
 
                                                 ctx1start              EQU             0x20D8
 
                                                 ctx2start              EQU             0x20E0
 
                                                 ctx3start              EQU             0x20E8
 
                                                 ctx4start              EQU             0x20F0
 
                                                 ctx5start              EQU             0x20F8
 
                                                 ctx6start              EQU             0x2100
 
                                                 ctx7start              EQU             0x2108
 
                                                 ctx8start              EQU             0x2110
 
                                                 ctx9start              EQU             0x2118
 
                                                 ctx10start             EQU             0x2120
 
                                                 ctx11start             EQU             0x2128
 
                                                 ctx12start             EQU             0x2130
 
                                                 ctx13start             EQU             0x2138
 
                                                 ctx14start             EQU             0x2140
 
                                                 ctx15start             EQU             0x2148
 
                                                 sp_saves               EQU             0x2200
 
                                                 sp_saves_end   EQU             0x2280
                                                 p100IRQvec             EQU             0x3000
                                                 p100IRQvec             EQU             0x3000
                                                 keybdIRQvec            EQU             0x3008
                                                 keybdIRQvec            EQU             0x3008
                                                 serialIRQvec   EQU             0x3010
                                                 serialIRQvec   EQU             0x3010
                                                 rasterIRQvec   EQU             0x3018
                                                 rasterIRQvec   EQU             0x3018
 
 
 
                                                 startSector    EQU             0x30F8
 
                                                 BPB                    EQU             0x3100
 
 
                                                 TEXTSCR                EQU             0xD0_0000
                                                 TEXTSCR                EQU             0xD0_0000
                                                 COLORSCR       EQU             0xD1_0000
                                                 COLORSCR       EQU             0xD1_0000
                                                 TEXTREG                EQU             0xDA_0000
                                                 TEXTREG                EQU             0xDA_0000
                                                 TEXT_COLS      EQU             0x0
                                                 TEXT_COLS      EQU             0x0
                                                 TEXT_ROWS      EQU             0x2
                                                 TEXT_ROWS      EQU             0x2
Line 167... Line 208...
                                                 UART_MS                EQU             0xDC_0A02
                                                 UART_MS                EQU             0xDC_0A02
                                                 UART_IS                EQU             0xDC_0A03
                                                 UART_IS                EQU             0xDC_0A03
                                                 UART_IE                EQU             0xDC_0A04
                                                 UART_IE                EQU             0xDC_0A04
                                                 UART_MC                EQU             0xDC_0A06
                                                 UART_MC                EQU             0xDC_0A06
                                                 DATETIME       EQU             0xDC_0400
                                                 DATETIME       EQU             0xDC_0400
 
 
 
                                                 SPIMASTER      EQU             0xDC_0500
 
                                                 SPI_MASTER_VERSION_REG EQU     0x00
 
                                                 SPI_MASTER_CONTROL_REG EQU     0x01
 
                                                 SPI_TRANS_TYPE_REG     EQU             0x02
 
                                                 SPI_TRANS_CTRL_REG     EQU             0x03
 
                                                 SPI_TRANS_STATUS_REG   EQU     0x04
 
                                                 SPI_TRANS_ERROR_REG            EQU     0x05
 
                                                 SPI_DIRECT_ACCESS_DATA_REG             EQU     0x06
 
                                                 SPI_SD_ADDR_7_0_REG            EQU     0x07
 
                                                 SPI_SD_ADDR_15_8_REG   EQU     0x08
 
                                                 SPI_SD_ADDR_23_16_REG  EQU     0x09
 
                                                 SPI_SD_ADDR_31_24_REG  EQU     0x0a
 
                                                 SPI_RX_FIFO_DATA_REG   EQU     0x10
 
                                                 SPI_RX_FIFO_DATA_COUNT_MSB     EQU     0x12
 
                                                 SPI_RX_FIFO_DATA_COUNT_LSB  EQU 0x13
 
                                                 SPI_RX_FIFO_CTRL_REG           EQU     0x14
 
                                                 SPI_TX_FIFO_DATA_REG   EQU     0x20
 
                                                 SPI_TX_FIFO_CTRL_REG   EQU     0x24
 
                                                 SPI_INIT_SD                    EQU             0x01
 
                                                 SPI_TRANS_START                EQU             0x01
 
                                                 SPI_TRANS_BUSY         EQU             0x01
 
                                                 SPI_INIT_NO_ERROR      EQU             0x00
 
                                                 SPI_READ_NO_ERROR      EQU             0x00
 
                                                 RW_READ_SD_BLOCK       EQU             0x02
 
                                                 RW_WRITE_SD_BLOCK      EQU             0x03
 
 
 
 
                                                 PIC                    EQU             0xDC_0FF0
                                                 PIC                    EQU             0xDC_0FF0
                                                 PIC_IE         EQU             0xDC_0FF2
                                                 PIC_IE         EQU             0xDC_0FF2
 
 
                                                 PSG                    EQU             0xD5_0000
                                                 PSG                    EQU             0xD5_0000
                                                 PSGFREQ0       EQU             0xD5_0000
                                                 PSGFREQ0       EQU             0xD5_0000
Line 178... Line 247...
                                                 PSGCTRL0       EQU             0xD5_0004
                                                 PSGCTRL0       EQU             0xD5_0004
                                                 PSGADSR0       EQU             0xD5_0006
                                                 PSGADSR0       EQU             0xD5_0006
 
 
                                                 SPRRAM         EQU             0xD8_0000
                                                 SPRRAM         EQU             0xD8_0000
                                                 AC97           EQU             0xDC_1000
                                                 AC97           EQU             0xDC_1000
 
                                                 TMP                    EQU             0xDC_0300
                                                 LED                    EQU             0xDC_0600
                                                 LED                    EQU             0xDC_0600
 
                                                 ETHMAC         EQU             0xDC_2000
 
                                                 CONFIGREC      EQU             0xDC_FFFF
 
                                                 MIIMODER       EQU             0x28
 
                                                 MIIADDRESS     EQU             0x30
                                                 GACCEL         EQU             0xDA_E000
                                                 GACCEL         EQU             0xDA_E000
                                                 RASTERIRQ      EQU             0xDA_0100
                                                 RASTERIRQ      EQU             0xDA_0100
                                                 BOOT_STACK     EQU             0xFFFF_FFFF_FFFE_FFF8
                                                 BOOT_STACK     EQU             0xFFFF_FFFF_FFFE_FFF8
                                                 SPRITEREGS     EQU             0xDA_D000
                                                 SPRITEREGS     EQU             0xDA_D000
                                                 BITMAPSCR      EQU             0x00000001_00200000
                                                 BITMAPSCR      EQU             0x00000001_00200000
 
 
 
                                                 BOOTJMP                EQU             0x100800204
 
 
                                                 txempty        EQU             0x40
                                                 txempty        EQU             0x40
                                                 rxfull EQU             0x01
                                                 rxfull EQU             0x01
 
 
                                                 ;
                                                 ;
                                                 ; Internal variables follow:
                                                 ; Internal variables follow:
                                                 ;
                                                 ;
0000000100600000                                                bss
0000000100600000                                                bss
0000000000001038                                                org             0x1038
0000000000001048                                                org             0x1048
0000000000000000                                 pos            dh              0                ; text screen position
0000000000000000                                 pos            dh              0                ; text screen position
0000000000001040                                                org             0x1040
 
 
 
1040 0000000000000000    lineLinkTbl            fill.b  25,0    ; screen line link table
1050 0000000000000000    lineLinkTbl            fill.b  47,0    ; screen line link table
1048 0000000000000000
 
1050 0000000000000000
 
1058 0000000000000000
1058 0000000000000000
0000000000001068                                                align 8
1060 0000000000000000
 
1068 0000000000000000
0000000000001080                                                org             0x1080
1070 0000000000000000
 
1078 0000000000000000
0000000000001088                                         align   8
0000000000001088                                         align   8
0000000000001088 0000000000000001        OSSP   dw      1       ; OS value of sp
0000000000001088 0000000000000001        OSSP   dw      1       ; OS value of sp
0000000000001090 0000000000000001        CURRNT dw      1       ;       Current line pointer
0000000000001090 0000000000000001        CURRNT dw      1       ;       Current line pointer
0000000000001098 0000000000000001        STKGOS dw      1       ;       Saves stack pointer in 'GOSUB'
0000000000001098 0000000000000001        STKGOS dw      1       ;       Saves stack pointer in 'GOSUB'
00000000000010A0 0000000000000001        STKINP dw      1       ;       Saves stack pointer during 'INPUT'
00000000000010A0 0000000000000001        STKINP dw      1       ;       Saves stack pointer during 'INPUT'
Line 252... Line 326...
0000000000000000                                        code
0000000000000000                                        code
FFFFFFFFFFFFB000                                        org 0xFFFF_FFFF_FFFF_B000
FFFFFFFFFFFFB000                                        org 0xFFFF_FFFF_FFFF_B000
 
 
                                                 ; jump table
                                                 ; jump table
                                                 ;
                                                 ;
FFFFFFFFFFFFB000        33FFED54                        jmp             SerialGetChar
FFFFFFFFFFFFB000        33FFEDA4                        jmp             SerialGetChar
FFFFFFFFFFFFB004        33FFED0C                        jmp             SerialPutChar
FFFFFFFFFFFFB004        33FFED5C                        jmp             SerialPutChar
FFFFFFFFFFFFB008        33FFEE06                        jmp             SetKeyboardEcho
FFFFFFFFFFFFB008        33FFEF05                        jmp             SetKeyboardEcho
FFFFFFFFFFFFB00C        33FFEE1D                        jmp             KeybdCheckForKey
FFFFFFFFFFFFB00C        33FFEF1C                        jmp             KeybdCheckForKey
FFFFFFFFFFFFB010        33FFEE08                        jmp             KeybdGetChar
FFFFFFFFFFFFB010        33FFEF07                        jmp             KeybdGetChar
FFFFFFFFFFFFB014        33FFEF47                        jmp             DisplayChar
FFFFFFFFFFFFB014        33FFF07F                        jmp             DisplayChar
FFFFFFFFFFFFB018        33FFEFE7                        jmp             DisplayString
FFFFFFFFFFFFB018        33FFF122                        jmp             DisplayString
 
FFFFFFFFFFFFB01C        33FFF13F                        jmp             DisplayNum
 
FFFFFFFFFFFFB020        33FFF06F                        jmp             CalcScreenLoc
 
FFFFFFFFFFFFB024        33FFF011                        jmp             ClearScreen
 
FFFFFFFFFFFFB028        33FFF169                        jmp             DisplayWord
 
 
FFFFFFFFFFFFB01C                                 start:
FFFFFFFFFFFFB02C                                 start:
                                                 ;      lea             MSGRAM,a1
                                                 ;      lea             MSGRAM,a1
                                                 ;      jsr             DisplayString
                                                 ;      jsr             DisplayString
 
 
FFFFFFFFFFFFB01C                                 ColdStart:
FFFFFFFFFFFFB02C                                 ColdStart:
FFFFFFFFFFFFB01C        0000000A                        icache_on                               ; turn on the ICache
FFFFFFFFFFFFB02C        0000000B                        icache_off                              ; turn on the ICache
FFFFFFFFFFFFB020        0000000D                        dcache_off                              ; turn on the DCache
FFFFFFFFFFFFB030        0000000D                        dcache_off                              ; turn on the DCache
 
 
 
                                                 ; Make sure semaphores are available by closing the gates.
 
                                                 ; We don't know what power up state is.
 
 
 
FFFFFFFFFFFFB034        02000075                        cmgi    #KEYBDGATE
 
FFFFFFFFFFFFB038        020000B5                        cmgi    #VIDEOGATE
 
 
 
                                                 ; Initialize the context startup address table with NULL
 
 
 
FFFFFFFFFFFFB03C        0410840A                        xor             r1,r1,r1
 
FFFFFFFFFFFFB040        6600A0D0                        sw              r1,ctx0start
 
FFFFFFFFFFFFB044        6600A0D8                        sw              r1,ctx1start
 
FFFFFFFFFFFFB048        6600A0E0                        sw              r1,ctx2start
 
FFFFFFFFFFFFB04C        6600A0E8                        sw              r1,ctx3start
 
FFFFFFFFFFFFB050        6600A0F0                        sw              r1,ctx4start
 
FFFFFFFFFFFFB054        6600A0F8                        sw              r1,ctx5start
 
FFFFFFFFFFFFB058        6600A100                        sw              r1,ctx6start
 
FFFFFFFFFFFFB05C        6600A108                        sw              r1,ctx7start
 
FFFFFFFFFFFFB060        6600A110                        sw              r1,ctx8start
 
FFFFFFFFFFFFB064        6600A118                        sw              r1,ctx9start
 
FFFFFFFFFFFFB068        6600A120                        sw              r1,ctx10start
 
FFFFFFFFFFFFB06C        6600A128                        sw              r1,ctx11start
 
FFFFFFFFFFFFB070        6600A130                        sw              r1,ctx12start
 
FFFFFFFFFFFFB074        6600A138                        sw              r1,ctx13start
 
FFFFFFFFFFFFB078        6600A140                        sw              r1,ctx14start
 
FFFFFFFFFFFFB07C        6600A148                        sw              r1,ctx15start
 
 
                                                 ; Initialize the context schedule with all contexts treated equally
                                                 ; Initialize the context schedule with all contexts treated equally
                                                 ; There are only 16 contexts, but 256 schedule slots. Each context is
                                                 ; There are only 16 contexts, but 256 schedule slots. Each context is
                                                 ; given 16 slots distributed evenly throughout the execution pattern
                                                 ; given 16 slots distributed evenly throughout the execution pattern
                                                 ; table.
                                                 ; table.
                                                 ;
                                                 ;
FFFFFFFFFFFFB024        0410840A                        xor             r1,r1,r1        ; r1 = 0
FFFFFFFFFFFFB080        0410840A                        xor             r1,r1,r1        ; r1 = 0
FFFFFFFFFFFFB028                                 ict1:
FFFFFFFFFFFFB084                                 ict1:
FFFFFFFFFFFFB028        0410803A                        mtep    r1,r1           ; only the low order four bits of r1 will move to the pattern table
FFFFFFFFFFFFB084        0410803A                        mtep    r1,r1           ; only the low order four bits of r1 will move to the pattern table
FFFFFFFFFFFFB02C        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFB088        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFB030        101100FF                        cmpi    r2,r1,#255
FFFFFFFFFFFFB08C        101100FF                        cmpi    r2,r1,#255
FFFFFFFFFFFFB034        BE207FA9                        bne             r2,r0,ict1
FFFFFFFFFFFFB090        BE207FA9                        bne             r2,r0,ict1
 
 
                                                 ; Point the interrupt return address register of the context to the
                                                 ; Point the interrupt return address register of the context to the
                                                 ; context startup code. The context will start up when an interrupt return
                                                 ; context startup code. The context will start up when an interrupt return
                                                 ; occurs.
                                                 ; occurs.
                                                 ;
                                                 ;
                                                 ; We cannot use a loop for this. Fortunately there's only 16 contexts.
                                                 ; We cannot use a loop for this. Fortunately there's only 16 contexts.
                                                 ;
                                                 ;
FFFFFFFFFFFFB038        E6BFB214                ; SETLO
FFFFFFFFFFFFB094        E6BFB228                ; SETLO
FFFFFFFFFFFFB03C        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB098        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB040        E6BEFFF8                ; SETLO
FFFFFFFFFFFFB09C        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB044        6A0D782D                        lea             r30,STACKTOP0
FFFFFFFFFFFFB0A0        E6BEFFF8                ; SETLO
FFFFFFFFFFFFB048        0000000F                        iepp
FFFFFFFFFFFFB0A4        6A0D782D                        lea             r30,STACKTOP0
FFFFFFFFFFFFB04C        DE000000                        nop
FFFFFFFFFFFFB0A8        0000000F                        iepp
FFFFFFFFFFFFB050        DE000000                        nop
FFFFFFFFFFFFB0AC        E6BFB228                ; SETLO
FFFFFFFFFFFFB054        E6BFB214                ; SETLO
FFFFFFFFFFFFB0B0        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB058        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB0B4        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB05C        E6BEFBF8                ; SETLO
FFFFFFFFFFFFB0B8        E6BEFBF8                ; SETLO
FFFFFFFFFFFFB060        6A0D782D                        lea             r30,STACKTOP1
FFFFFFFFFFFFB0BC        6A0D782D                        lea             r30,STACKTOP1
FFFFFFFFFFFFB064        0000000F                        iepp
FFFFFFFFFFFFB0C0        0000000F                        iepp
FFFFFFFFFFFFB068        DE000000                        nop
FFFFFFFFFFFFB0C4        E6BFB228                ; SETLO
FFFFFFFFFFFFB06C        DE000000                        nop
 
FFFFFFFFFFFFB070        E6BFB214                ; SETLO
 
FFFFFFFFFFFFB074        6A0D642D                        lea             r25,ctxstart
 
FFFFFFFFFFFFB078        E6BEF7F8                ; SETLO
 
FFFFFFFFFFFFB07C        6A0D782D                        lea             r30,STACKTOP2
 
FFFFFFFFFFFFB080        0000000F                        iepp
 
FFFFFFFFFFFFB084        DE000000                        nop
 
FFFFFFFFFFFFB088        DE000000                        nop
 
FFFFFFFFFFFFB08C        E6BFB214                ; SETLO
 
FFFFFFFFFFFFB090        6A0D642D                        lea             r25,ctxstart
 
FFFFFFFFFFFFB094        E6BEF3F8                ; SETLO
 
FFFFFFFFFFFFB098        6A0D782D                        lea             r30,STACKTOP3
 
FFFFFFFFFFFFB09C        0000000F                        iepp
 
FFFFFFFFFFFFB0A0        DE000000                        nop
 
FFFFFFFFFFFFB0A4        DE000000                        nop
 
 
 
FFFFFFFFFFFFB0A8        E6BFB214                ; SETLO
 
FFFFFFFFFFFFB0AC        6A0D642D                        lea             r25,ctxstart
 
FFFFFFFFFFFFB0B0        E6BEEFF8                ; SETLO
 
FFFFFFFFFFFFB0B4        6A0D782D                        lea             r30,STACKTOP4
 
FFFFFFFFFFFFB0B8        0000000F                        iepp
 
FFFFFFFFFFFFB0BC        DE000000                        nop
 
FFFFFFFFFFFFB0C0        DE000000                        nop
 
FFFFFFFFFFFFB0C4        E6BFB214                ; SETLO
 
FFFFFFFFFFFFB0C8        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB0C8        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB0CC        E6BEEBF8                ; SETLO
FFFFFFFFFFFFB0CC        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB0D0        6A0D782D                        lea             r30,STACKTOP5
FFFFFFFFFFFFB0D0        E6BEF7F8                ; SETLO
FFFFFFFFFFFFB0D4        0000000F                        iepp
FFFFFFFFFFFFB0D4        6A0D782D                        lea             r30,STACKTOP2
FFFFFFFFFFFFB0D8        DE000000                        nop
FFFFFFFFFFFFB0D8        0000000F                        iepp
FFFFFFFFFFFFB0DC        DE000000                        nop
FFFFFFFFFFFFB0DC        E6BFB228                ; SETLO
FFFFFFFFFFFFB0E0        E6BFB214                ; SETLO
FFFFFFFFFFFFB0E0        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB0E4        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB0E4        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB0E8        E6BEE7F8                ; SETLO
FFFFFFFFFFFFB0E8        E6BEF3F8                ; SETLO
FFFFFFFFFFFFB0EC        6A0D782D                        lea             r30,STACKTOP6
FFFFFFFFFFFFB0EC        6A0D782D                        lea             r30,STACKTOP3
FFFFFFFFFFFFB0F0        0000000F                        iepp
FFFFFFFFFFFFB0F0        0000000F                        iepp
FFFFFFFFFFFFB0F4        DE000000                        nop
 
FFFFFFFFFFFFB0F8        DE000000                        nop
FFFFFFFFFFFFB0F4        E6BFB228                ; SETLO
FFFFFFFFFFFFB0FC        E6BFB214                ; SETLO
FFFFFFFFFFFFB0F8        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB100        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB0FC        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB104        E6BEE3F8                ; SETLO
FFFFFFFFFFFFB100        E6BEEFF8                ; SETLO
FFFFFFFFFFFFB108        6A0D782D                        lea             r30,STACKTOP7
FFFFFFFFFFFFB104        6A0D782D                        lea             r30,STACKTOP4
FFFFFFFFFFFFB10C        0000000F                        iepp
FFFFFFFFFFFFB108        0000000F                        iepp
FFFFFFFFFFFFB110        DE000000                        nop
FFFFFFFFFFFFB10C        E6BFB228                ; SETLO
FFFFFFFFFFFFB114        DE000000                        nop
FFFFFFFFFFFFB110        6A0D642D                        lea             r25,ctxstart
 
FFFFFFFFFFFFB114        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB118        E6BFB214                ; SETLO
FFFFFFFFFFFFB118        E6BEEBF8                ; SETLO
FFFFFFFFFFFFB11C        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB11C        6A0D782D                        lea             r30,STACKTOP5
FFFFFFFFFFFFB120        E6BEDFF8                ; SETLO
FFFFFFFFFFFFB120        0000000F                        iepp
FFFFFFFFFFFFB124        6A0D782D                        lea             r30,STACKTOP8
FFFFFFFFFFFFB124        E6BFB228                ; SETLO
FFFFFFFFFFFFB128        0000000F                        iepp
FFFFFFFFFFFFB128        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB12C        DE000000                        nop
FFFFFFFFFFFFB12C        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB130        DE000000                        nop
FFFFFFFFFFFFB130        E6BEE7F8                ; SETLO
FFFFFFFFFFFFB134        E6BFB214                ; SETLO
FFFFFFFFFFFFB134        6A0D782D                        lea             r30,STACKTOP6
FFFFFFFFFFFFB138        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB138        0000000F                        iepp
FFFFFFFFFFFFB13C        E6BEDBF8                ; SETLO
FFFFFFFFFFFFB13C        E6BFB228                ; SETLO
FFFFFFFFFFFFB140        6A0D782D                        lea             r30,STACKTOP9
FFFFFFFFFFFFB140        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB144        0000000F                        iepp
FFFFFFFFFFFFB144        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB148        DE000000                        nop
FFFFFFFFFFFFB148        E6BEE3F8                ; SETLO
FFFFFFFFFFFFB14C        DE000000                        nop
FFFFFFFFFFFFB14C        6A0D782D                        lea             r30,STACKTOP7
FFFFFFFFFFFFB150        E6BFB214                ; SETLO
FFFFFFFFFFFFB150        0000000F                        iepp
FFFFFFFFFFFFB154        6A0D642D                        lea             r25,ctxstart
 
FFFFFFFFFFFFB158        E6BED7F8                ; SETLO
FFFFFFFFFFFFB154        E6BFB228                ; SETLO
FFFFFFFFFFFFB15C        6A0D782D                        lea             r30,STACKTOP10
FFFFFFFFFFFFB158        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB160        0000000F                        iepp
FFFFFFFFFFFFB15C        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB164        DE000000                        nop
FFFFFFFFFFFFB160        E6BEDFF8                ; SETLO
FFFFFFFFFFFFB168        DE000000                        nop
FFFFFFFFFFFFB164        6A0D782D                        lea             r30,STACKTOP8
FFFFFFFFFFFFB16C        E6BFB214                ; SETLO
FFFFFFFFFFFFB168        0000000F                        iepp
 
FFFFFFFFFFFFB16C        E6BFB228                ; SETLO
FFFFFFFFFFFFB170        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB170        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB174        E6BED3F8                ; SETLO
FFFFFFFFFFFFB174        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB178        6A0D782D                        lea             r30,STACKTOP11
FFFFFFFFFFFFB178        E6BEDBF8                ; SETLO
FFFFFFFFFFFFB17C        0000000F                        iepp
FFFFFFFFFFFFB17C        6A0D782D                        lea             r30,STACKTOP9
FFFFFFFFFFFFB180        DE000000                        nop
FFFFFFFFFFFFB180        0000000F                        iepp
FFFFFFFFFFFFB184        DE000000                        nop
FFFFFFFFFFFFB184        E6BFB228                ; SETLO
 
FFFFFFFFFFFFB188        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB188        E6BFB214                ; SETLO
FFFFFFFFFFFFB18C        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB18C        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB190        E6BED7F8                ; SETLO
FFFFFFFFFFFFB190        E6BECFF8                ; SETLO
FFFFFFFFFFFFB194        6A0D782D                        lea             r30,STACKTOP10
FFFFFFFFFFFFB194        6A0D782D                        lea             r30,STACKTOP12
 
FFFFFFFFFFFFB198        0000000F                        iepp
FFFFFFFFFFFFB198        0000000F                        iepp
FFFFFFFFFFFFB19C        DE000000                        nop
FFFFFFFFFFFFB19C        E6BFB228                ; SETLO
FFFFFFFFFFFFB1A0        DE000000                        nop
FFFFFFFFFFFFB1A0        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB1A4        E6BFB214                ; SETLO
FFFFFFFFFFFFB1A4        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB1A8        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB1A8        E6BED3F8                ; SETLO
FFFFFFFFFFFFB1AC        E6BECBF8                ; SETLO
FFFFFFFFFFFFB1AC        6A0D782D                        lea             r30,STACKTOP11
FFFFFFFFFFFFB1B0        6A0D782D                        lea             r30,STACKTOP13
FFFFFFFFFFFFB1B0        0000000F                        iepp
FFFFFFFFFFFFB1B4        0000000F                        iepp
 
FFFFFFFFFFFFB1B8        DE000000                        nop
FFFFFFFFFFFFB1B4        E6BFB228                ; SETLO
FFFFFFFFFFFFB1BC        DE000000                        nop
FFFFFFFFFFFFB1B8        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB1C0        E6BFB214                ; SETLO
FFFFFFFFFFFFB1BC        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB1C4        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB1C0        E6BECFF8                ; SETLO
FFFFFFFFFFFFB1C8        E6BEC7F8                ; SETLO
FFFFFFFFFFFFB1C4        6A0D782D                        lea             r30,STACKTOP12
FFFFFFFFFFFFB1CC        6A0D782D                        lea             r30,STACKTOP14
FFFFFFFFFFFFB1C8        0000000F                        iepp
FFFFFFFFFFFFB1D0        0000000F                        iepp
FFFFFFFFFFFFB1CC        E6BFB228                ; SETLO
FFFFFFFFFFFFB1D4        DE000000                        nop
FFFFFFFFFFFFB1D0        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB1D8        DE000000                        nop
FFFFFFFFFFFFB1D4        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB1DC        E6BFB214                ; SETLO
FFFFFFFFFFFFB1D8        E6BECBF8                ; SETLO
FFFFFFFFFFFFB1E0        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB1DC        6A0D782D                        lea             r30,STACKTOP13
FFFFFFFFFFFFB1E4        E6BEC3F8                ; SETLO
FFFFFFFFFFFFB1E0        0000000F                        iepp
FFFFFFFFFFFFB1E8        6A0D782D                        lea             r30,STACKTOP15
FFFFFFFFFFFFB1E4        E6BFB228                ; SETLO
FFFFFFFFFFFFB1EC        0000000F                        iepp
FFFFFFFFFFFFB1E8        6A0D642D                        lea             r25,ctxstart
FFFFFFFFFFFFB1F0        DE000000                        nop
FFFFFFFFFFFFB1EC        03900869                        mtspr   IPC,r25
FFFFFFFFFFFFB1F4        DE000000                        nop
FFFFFFFFFFFFB1F0        E6BEC7F8                ; SETLO
 
FFFFFFFFFFFFB1F4        6A0D782D                        lea             r30,STACKTOP14
 
FFFFFFFFFFFFB1F8        0000000F                        iepp
 
FFFFFFFFFFFFB1FC        E6BFB228                ; SETLO
 
FFFFFFFFFFFFB200        6A0D642D                        lea             r25,ctxstart
 
FFFFFFFFFFFFB204        03900869                        mtspr   IPC,r25
 
FFFFFFFFFFFFB208        E6BEC3F8                ; SETLO
 
FFFFFFFFFFFFB20C        6A0D782D                        lea             r30,STACKTOP15
 
FFFFFFFFFFFFB210        0000000F                        iepp
 
 
                                                 ; Ensure that context zero is the active context
                                                 ; Ensure that context zero is the active context
                                                 ;
                                                 ;
FFFFFFFFFFFFB1F8                                 ctxstart3:
FFFFFFFFFFFFB214                                 ctxstart3:
FFFFFFFFFFFFB1F8        02008568                        mfspr   r1,AXC
FFFFFFFFFFFFB214        02008568                        mfspr   r1,AXC
FFFFFFFFFFFFB1FC        BE1000A8                        beq             r1,r0,ctxstart2
FFFFFFFFFFFFB218        BE100068                        beq             r1,r0,ctxstart2
FFFFFFFFFFFFB200        0000000F                        iepp
FFFFFFFFFFFFB21C        0000000F                        iepp
FFFFFFFFFFFFB204        DE000000                        nop
FFFFFFFFFFFFB220        BE007FAA                        bra             ctxstart3
FFFFFFFFFFFFB208        DE000000                        nop
FFFFFFFFFFFFB224                                 ctxstart2:
FFFFFFFFFFFFB20C        BE007F6A                        bra             ctxstart3
FFFFFFFFFFFFB224        6000A0C0                        sb              r1,AXCstart             ; save off the startup context which should be context zero
FFFFFFFFFFFFB210                                 ctxstart2:
 
FFFFFFFFFFFFB210        6000A0C0                        sb              r1,AXCstart             ; save off the startup context which should be context zero
 
 
 
                                                 ; Entry point for context startup
                                                 ; Entry point for context startup
                                                 ;
                                                 ;
                                                 ; Avoid repeating all the system initialization when a context starts up by testing whether
                                                 ; Avoid repeating all the system initialization when a context starts up by testing whether
                                                 ; or not the context is the starting context.
                                                 ; or not the context is the starting context.
                                                 ;
                                                 ;
FFFFFFFFFFFFB214                                 ctxstart:
FFFFFFFFFFFFB228                                 ctxstart:
FFFFFFFFFFFFB214        02008568                        mfspr   r1,AXC
FFFFFFFFFFFFB228        02008568                        mfspr   r1,AXC
FFFFFFFFFFFFB218        4A0120C0                        lbu             r2,AXCstart
FFFFFFFFFFFFB22C        4A0120C0                        lbu             r2,AXCstart
FFFFFFFFFFFFB21C        BE1107E9                        bne             r1,r2,ctxstart1
FFFFFFFFFFFFB230        BE110E69                        bne             r1,r2,ctxstart1
 
 
                                                 ;
                                                 ;
                                                 ; set system vectors
                                                 ; set system vectors
                                                 ; TBA defaults to zero on reset
                                                 ; TBA defaults to zero on reset
                                                 ;
                                                 ;
FFFFFFFFFFFFB220        E0C00000                        setlo   r3,#0
FFFFFFFFFFFFB234        E0C00000                        setlo   r3,#0
FFFFFFFFFFFFB224        E08001FF                        setlo   r2,#511
FFFFFFFFFFFFB238        E08001FF                        setlo   r2,#511
FFFFFFFFFFFFB228        9A00EA20                        lea             r1,nmirout
FFFFFFFFFFFFB23C        9A00FB38                        lea             r1,nmirout
FFFFFFFFFFFFB22C                                 csj5:
FFFFFFFFFFFFB240                                 csj5:
FFFFFFFFFFFFB22C        66308000                        sw              r1,[r3]
FFFFFFFFFFFFB240        66308000                        sw              r1,[r3]
FFFFFFFFFFFFB230        0A318008                        addui   r3,r3,#8
FFFFFFFFFFFFB244        0A318008                        addui   r3,r3,#8
FFFFFFFFFFFFB234        BE017FCF                        loop    r2,csj5
FFFFFFFFFFFFB248        BE017FCF                        loop    r2,csj5
FFFFFFFFFFFFB238        E6BFB768                ; SETLO
FFFFFFFFFFFFB24C        E6BFB8A8                ; SETLO
FFFFFFFFFFFFB23C        6A0D042D                        lea             r1,KeybdSC              ; keyboard BIOS vector
FFFFFFFFFFFFB250        6A0D042D                        lea             r1,VideoSC              ; Video BIOS vector
FFFFFFFFFFFFB240        66008D08                        sw              r1,0xD08
FFFFFFFFFFFFB254        66008CD0                        sw              r1,0xCD0
FFFFFFFFFFFFB244        9A00E950                        lea             r1,irqrout
FFFFFFFFFFFFB258        9A008000                        lea             r1,SCCARDSC             ; SD Card BIOS vector
FFFFFFFFFFFFB248        66008E08                        sw              r1,0xE08                ; set IRQ vector
FFFFFFFFFFFFB25C        66008CE8                        sw              r1,0xCE8
FFFFFFFFFFFFB24C        9A00E8BC                        lea             r1,dberr_rout
FFFFFFFFFFFFB260        E6BFBAA8                ; SETLO
FFFFFFFFFFFFB250        66008FE0                        sw              r1,0xFE0                ; set Bus error vector
FFFFFFFFFFFFB264        6A0D042D                        lea             r1,RTCSC                ; Real time clock vector
FFFFFFFFFFFFB254        9A00E8A4                        lea             r1,iberr_rout
FFFFFFFFFFFFB268        66008D00                        sw              r1,0xD00
FFFFFFFFFFFFB258        66008FE8                        sw              r1,0xFE8                ; set Bus error vector
FFFFFFFFFFFFB26C        E6BFBB14                ; SETLO
FFFFFFFFFFFFB25C        9A00EA20                        lea             r1,nmirout
FFFFFFFFFFFFB270        6A0D042D                        lea             r1,KeybdSC              ; keyboard BIOS vector
FFFFFFFFFFFFB260        66008FF0                        sw              r1,0xFF0                ; set NMI vector
FFFFFFFFFFFFB274        66008D08                        sw              r1,0xD08
 
FFFFFFFFFFFFB278        9A00FA5C                        lea             r1,irqrout
FFFFFFFFFFFFB264        E6BFB7C4                ; SETLO
FFFFFFFFFFFFB27C        66008E08                        sw              r1,0xE08                ; set IRQ vector
FFFFFFFFFFFFB268        6A0D042D                        lea             r1,KeybdIRQ
FFFFFFFFFFFFB280        9A00FB94                        lea             r1,ui_irout
FFFFFFFFFFFFB26C        6600B008                        sw              r1,keybdIRQvec
FFFFFFFFFFFFB284        66008F78                        sw              r1,0xF78                ; set unimplemented instruction vector
FFFFFFFFFFFFB270        E6BFB8EC                ; SETLO
FFFFFFFFFFFFB288        9A00F9BC                        lea             r1,dberr_rout
FFFFFFFFFFFFB274        6A0D042D                        lea             r1,Pulse100
FFFFFFFFFFFFB28C        66008FE0                        sw              r1,0xFE0                ; set Bus error vector
FFFFFFFFFFFFB278        6600B000                        sw              r1,p100IRQvec
FFFFFFFFFFFFB290        9A00F9A4                        lea             r1,iberr_rout
FFFFFFFFFFFFB27C        E6BFB628                ; SETLO
FFFFFFFFFFFFB294        66008FE8                        sw              r1,0xFE8                ; set Bus error vector
FFFFFFFFFFFFB280        6A0D042D                        lea             r1,SerialIRQ
FFFFFFFFFFFFB298        9A00FB38                        lea             r1,nmirout
FFFFFFFFFFFFB284        6600B010                        sw              r1,serialIRQvec
FFFFFFFFFFFFB29C        66008FF0                        sw              r1,0xFF0                ; set NMI vector
FFFFFFFFFFFFB288        9A00CAC4                        lea             r1,RasterIRQfn
 
FFFFFFFFFFFFB28C        6600B018                        sw              r1,rasterIRQvec
                                                 ; set system interrupt hook vectors
 
 
 
FFFFFFFFFFFFB2A0        E6BFBBC0                ; SETLO
 
FFFFFFFFFFFFB2A4        6A0D042D                        lea             r1,KeybdIRQ
 
FFFFFFFFFFFFB2A8        6600B008                        sw              r1,keybdIRQvec
 
FFFFFFFFFFFFB2AC        E6BFBDCC                ; SETLO
 
FFFFFFFFFFFFB2B0        6A0D042D                        lea             r1,Pulse100
 
FFFFFFFFFFFFB2B4        6600B000                        sw              r1,p100IRQvec
 
FFFFFFFFFFFFB2B8        E6BFB768                ; SETLO
 
FFFFFFFFFFFFB2BC        6A0D042D                        lea             r1,SerialIRQ
 
FFFFFFFFFFFFB2C0        6600B010                        sw              r1,serialIRQvec
 
FFFFFFFFFFFFB2C4        9A00D1AC                        lea             r1,RasterIRQfn
 
FFFFFFFFFFFFB2C8        6600B018                        sw              r1,rasterIRQvec
 
 
                                                        ;-------------------------------
                                                        ;-------------------------------
                                                        ; Initialize I/O devices
                                                        ; Initialize I/O devices
                                                        ;-------------------------------
                                                        ;-------------------------------
FFFFFFFFFFFFB290        31FFECEC                        call    SerialInit
FFFFFFFFFFFFB2CC        E69CFFFF                ; SETLO
FFFFFFFFFFFFB294        31FFEDEC                        call    KeybdInit
FFFFFFFFFFFFB2D0        EE800003                ; SETMID
FFFFFFFFFFFFB298        31FFECE4                        call    PICInit
FFFFFFFFFFFFB2D4        6A0D0424                        inbu    r1,CONFIGREC
FFFFFFFFFFFFB29C        31FFF299                        call    SetupRasterIRQ
FFFFFFFFFFFFB2D8        2A108824                        bfext   r1,r1,#4,#4
FFFFFFFFFFFFB2A0        00000040                        cli                                             ; enable interrupts
FFFFFFFFFFFFB2DC        BE100048                        beq             r1,r0,skip5
 
FFFFFFFFFFFFB2E0        31FFEF3A                        call    tmp_init
 
FFFFFFFFFFFFB2E4                                 skip5:
 
FFFFFFFFFFFFB2E4        E69CFFFF                ; SETLO
 
FFFFFFFFFFFFB2E8        EE800003                ; SETMID
 
FFFFFFFFFFFFB2EC        6A0D0424                        inbu    r1,CONFIGREC
 
FFFFFFFFFFFFB2F0        2A108A2C                        bfext   r1,r1,#5,#5
 
FFFFFFFFFFFFB2F4        BE100048                        beq             r1,r0,skip4
 
FFFFFFFFFFFFB2F8        31FFED3C                        call    SerialInit
 
FFFFFFFFFFFFB2FC                                 skip4:
 
FFFFFFFFFFFFB2FC        31FFEEEB                        call    KeybdInit
 
FFFFFFFFFFFFB300        31FFED34                        call    PICInit
 
FFFFFFFFFFFFB304        31FFF453                        call    SetupRasterIRQ
 
FFFFFFFFFFFFB308        00000040                        cli                                             ; enable interrupts
                                                 ;      call    HelloWorld
                                                 ;      call    HelloWorld
FFFFFFFFFFFFB2A4        E0C000CE                        setlo   r3,#0xCE                ; blue on blue
FFFFFFFFFFFFB30C        E0C000CE                        setlo   r3,#0xCE                ; blue on blue
FFFFFFFFFFFFB2A8        62019414                        sc              r3,ScreenColor
FFFFFFFFFFFFB310        62019414                        sc              r3,ScreenColor
FFFFFFFFFFFFB2AC        42019414                        lc              r3,0x1414
FFFFFFFFFFFFB314        62019410                        sc              r3,CharColor
FFFFFFFFFFFFB2B0        E0C00020                        setlo   r3,#32
FFFFFFFFFFFFB318        42019414                        lc              r3,0x1414
FFFFFFFFFFFFB2B4        62019416                        sc              r3,0x1416               ; we do a store, then a load through the dcache
FFFFFFFFFFFFB31C        E0C00020                        setlo   r3,#32
FFFFFFFFFFFFB2B8        42011416                        lc              r2,0x1416               ;
FFFFFFFFFFFFB320        62019416                        sc              r3,0x1416               ; we do a store, then a load through the dcache
FFFFFFFFFFFFB2BC        BE218048                        beq             r2,r3,dcokay
FFFFFFFFFFFFB324        42011416                        lc              r2,0x1416               ;
FFFFFFFFFFFFB2C0        0000000D                        dcache_off                              ; data cache failed
FFFFFFFFFFFFB328        BE218048                        beq             r2,r3,dcokay
FFFFFFFFFFFFB2C4                                 dcokay:
FFFFFFFFFFFFB32C        0000000D                        dcache_off                              ; data cache failed
FFFFFFFFFFFFB2C4        620020A8                        sc              r0,NextToRunTCB
FFFFFFFFFFFFB330                                 dcokay:
FFFFFFFFFFFFB2C8        620020A6                        sc              r0,RunningTCB
FFFFFFFFFFFFB330        620020A8                        sc              r0,NextToRunTCB
FFFFFFFFFFFFB2CC        31FFEED9                        call    ClearScreen
FFFFFFFFFFFFB334        620020A6                        sc              r0,RunningTCB
FFFFFFFFFFFFB2D0        31FFEEC4                        call    ClearBmpScreen
FFFFFFFFFFFFB338        16008002                        lw              r1,#2                   ; get rid of startup keyboard glitchs by trying to get a character
FFFFFFFFFFFFB2D4        31FFF1ED                        call    RandomizeSprram
FFFFFFFFFFFFB33C        0181D097                        syscall #417
FFFFFFFFFFFFB2D8        62001416                        sc              r0,CursorRow
FFFFFFFFFFFFB340        16008002                        lw              r1,#2                   ; get rid of startup keyboard glitchs by trying to get a character
FFFFFFFFFFFFB2DC        62001418                        sc              r0,CursorCol
FFFFFFFFFFFFB344        0181D097                        syscall #417
FFFFFFFFFFFFB2E0        E0400001                        setlo   r1,#1
 
FFFFFFFFFFFFB2E4        6000941A                        sb              r1,CursorFlash
                                                        ; wait for screen to be available
FFFFFFFFFFFFB2E8        E6BFB36D                ; SETLO
FFFFFFFFFFFFB348        31FFF011                        call    ClearScreen
FFFFFFFFFFFFB2EC        6A0D042D                        lea             r1,MSGSTART
FFFFFFFFFFFFB34C        31FFEFFC                        call    ClearBmpScreen
FFFFFFFFFFFFB2F0        31FFEFF5                        call    DisplayStringCRLF
 
FFFFFFFFFFFFB2F4        33FFF096                        jmp             Monitor
                                                 ; Test whether or not the sprite controller is present. Skip
FFFFFFFFFFFFB2F8        31FFF1F7                        call    SetupAC97               ; and Beep
                                                 ; Initialization if it isn't.
FFFFFFFFFFFFB2FC        E0C00004                        setlo   r3,#4
 
FFFFFFFFFFFFB300        E69C0600                ; SETLO
FFFFFFFFFFFFB350        E69CFFFF                ; SETLO
FFFFFFFFFFFFB304        EE800003                ; SETMID
FFFFFFFFFFFFB354        EE800003                ; SETMID
FFFFFFFFFFFFB308        6A0D0C28                        outb    r3,LED
FFFFFFFFFFFFB358        6A0D0420                        inb             r1,CONFIGREC
FFFFFFFFFFFFB30C        31FFF221                        call    Beep
FFFFFFFFFFFFB35C        2A108004                        bfext   r1,r1,#0,#0
 
FFFFFFFFFFFFB360        BE100048                        beq             r1,r0,skip1
FFFFFFFFFFFFB310                                 j4:
FFFFFFFFFFFFB364        31FFF3A7                        call    RandomizeSprram
FFFFFFFFFFFFB310        33FFF096                        jmp             Monitor
FFFFFFFFFFFFB368                                 skip1:
FFFFFFFFFFFFB314        BE007FEA                        bra             j4
 
 
FFFFFFFFFFFFB368        60001417                        sb              r0,CursorRow
                                                 ; for now hang the contexts
FFFFFFFFFFFFB36C        60001418                        sb              r0,CursorCol
                                                 ;
FFFFFFFFFFFFB370        16008001                        lw              r1,#1
FFFFFFFFFFFFB318                                 ctxstart1:
FFFFFFFFFFFFB374        6000941A                        sb              r1,CursorFlash
FFFFFFFFFFFFB318        BE00000A                        bra             ctxstart1
FFFFFFFFFFFFB378        E6BFB4AD                ; SETLO
 
FFFFFFFFFFFFB37C        6A0D042D                        lea             r1,MSGSTART
 
FFFFFFFFFFFFB380        31FFF130                        call    DisplayStringCRLF
 
 
 
                                                 ; Test whether or not sound generator is present
 
                                                 ; skip initialization and beep if not present
 
 
 
FFFFFFFFFFFFB384        E69CFFFF                ; SETLO
 
FFFFFFFFFFFFB388        EE800003                ; SETMID
 
FFFFFFFFFFFFB38C        6A0D0420                        inb             r1,CONFIGREC
 
FFFFFFFFFFFFB390        2A108414                        bfext   r1,r1,#2,#2
 
FFFFFFFFFFFFB394        BE1000E8                        beq             r1,r0,skip2
 
FFFFFFFFFFFFB398        31FFF3B1                        call    SetupAC97               ; and Beep
 
FFFFFFFFFFFFB39C        16008004                        lw              r1,#4
 
FFFFFFFFFFFFB3A0        E69C0600                ; SETLO
 
FFFFFFFFFFFFB3A4        EE800003                ; SETMID
 
FFFFFFFFFFFFB3A8        6A0D0428                        outb    r1,LED
 
FFFFFFFFFFFFB3AC        31FFF3DB                        call    Beep
 
FFFFFFFFFFFFB3B0                                 skip2:
 
 
 
FFFFFFFFFFFFB3B0        E6BFB428                ; SETLO
 
FFFFFFFFFFFFB3B4        6A0D042D                        lea             r1,context1disp ; start a display
 
FFFFFFFFFFFFB3B8        6600A0D8                        sw              r1,ctx1start
 
 
 
                                                 ; Startup Ethernet access ?
 
                                                 ;
 
FFFFFFFFFFFFB3BC        E69CFFFF                ; SETLO
 
FFFFFFFFFFFFB3C0        EE800003                ; SETMID
 
FFFFFFFFFFFFB3C4        6A0D0420                        inb             r1,CONFIGREC
 
FFFFFFFFFFFFB3C8        2A10820C                        bfext   r1,r1,#1,#1
 
FFFFFFFFFFFFB3CC        BE100068                        beq             r1,r0,skip3
 
FFFFFFFFFFFFB3D0        9A00DD3C                        lea             r1,eth_main
 
FFFFFFFFFFFFB3D4        6600A0E0                        sw              r1,ctx2start
 
FFFFFFFFFFFFB3D8                                 skip3:
 
 
 
FFFFFFFFFFFFB3D8        9A00CDD0                        lea             r1,RandomLines
 
FFFFFFFFFFFFB3DC        6600A0E8                        sw              r1,ctx3start
 
FFFFFFFFFFFFB3E0        31FFF54E                        call    spi_init
 
FFFFFFFFFFFFB3E4        BE100069                        bne             r1,r0,skip_spi_read
 
FFFFFFFFFFFFB3E8        31FFF59D                        call    spi_read_boot
 
FFFFFFFFFFFFB3EC        31FFF605                        call    loadBootFile
 
FFFFFFFFFFFFB3F0                                 skip_spi_read:
 
FFFFFFFFFFFFB3F0        33FFF20A                        jmp             Monitor
 
 
 
FFFFFFFFFFFFB3F4                                 j4:
 
FFFFFFFFFFFFB3F4        33FFF20A                        jmp             Monitor
 
FFFFFFFFFFFFB3F8        BE007FEA                        bra             j4
 
 
 
                                                 ; The contexts wait for a context startup address to be placed in the
 
                                                 ; startup table. Once an address is in the table, a call to the context
 
                                                 ; code will be made. The default is a NULL pointer, which
 
                                                 ; causes the context to loop around back to here while waiting for a
 
                                                 ; code to run.
 
                                                 ;
 
FFFFFFFFFFFFB3FC                                 ctxstart1:
 
FFFFFFFFFFFFB3FC        9A00A0D0                        lea             r1,ctx0start    ; r1 = context start table base
 
FFFFFFFFFFFFB400        02010568                        mfspr   r2,AXC                  ; r2 = index into start table
 
FFFFFFFFFFFFB404        6A110703                        lw              r1,[r1+r2*8]    ; r1 = context start address
 
FFFFFFFFFFFFB408        BE100048                        beq             r1,r0,ctx12
 
FFFFFFFFFFFFB40C        341F8000                        jal             lr,[r1]                 ; perform a call to the context code
 
 
 
                                                 ; We might as well move to the next context, since there's nothing
 
                                                 ; to do. This can be accomplished by tirggering a IRQ interrupt.
 
                                                 ; We can't just increment the excution pattern pointer, because that
 
                                                 ; would only switch the register set and not the program counter.
 
                                                 ; An interrupt saves the program counter, and restores it from the
 
                                                 ; IPC context register.
 
                                                 ;
 
FFFFFFFFFFFFB410                                 ctx12:
 
FFFFFFFFFFFFB410        00000040                        sei                                     ; causes a priv violation. don't allow interrupts during syscall
 
FFFFFFFFFFFFB414        DE000000                        nop                                     ; wait for sei to take effect
 
FFFFFFFFFFFFB418        DE000000                        nop
 
FFFFFFFFFFFFB41C        DE000000                        nop
 
FFFFFFFFFFFFB420        0181E097                        syscall #EX_IRQ
 
FFFFFFFFFFFFB424        BE007ECA                        bra             ctxstart1
 
 
                                                 ;      call    ramtest
                                                 ;      call    ramtest
 
 
 
FFFFFFFFFFFFB428                                 context1disp:
 
 
 
                                                 ; once we've started, clear the start vector so that the context
 
                                                 ; isn't continuously restarted.
 
                                                 ;
 
FFFFFFFFFFFFB428        660020D8                        sw              r0,ctx1start
 
FFFFFFFFFFFFB42C        E6900000                ; SETLO
 
FFFFFFFFFFFFB430        EE800003                ; SETMID
 
FFFFFFFFFFFFB434        6A0D0C2D                        lea             r3,TEXTSCR
 
FFFFFFFFFFFFB438        16008056                        lw              r1,#'V'
 
FFFFFFFFFFFFB43C        1601014A                        lw              r2,#330
 
FFFFFFFFFFFFB440        1602002F                        lw              r4,#47
 
FFFFFFFFFFFFB444        31FFF063                        call    AsciiToScreen
 
FFFFFFFFFFFFB448                                 ctx11:
 
FFFFFFFFFFFFB448        6A310421                        inch    r1,[r3+r2]
 
FFFFFFFFFFFFB44C        0A108001                        addui   r1,r1,#1
 
FFFFFFFFFFFFB450        6A310429                        outc    r1,[r3+r2]
 
FFFFFFFFFFFFB454        0A2100A8                        addui   r2,r2,#168
 
FFFFFFFFFFFFB458        BE027F8F                        loop    r4,ctx11
 
FFFFFFFFFFFFB45C        BE007E6A                        bra             context1disp
 
 
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
                                                 ; Hello World!
                                                 ; Hello World!
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
FFFFFFFFFFFFB31C                                 HelloWorld:
FFFFFFFFFFFFB460                                 HelloWorld:
FFFFFFFFFFFFB31C        0FEF0018                        subui   r30,r30,#24
FFFFFFFFFFFFB460        0FEF0018                        subui   r30,r30,#24
FFFFFFFFFFFFB320        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFB464        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFB324        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFB468        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFB328        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFB46C        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFB32C        E6BFB360                ; SETLO
FFFFFFFFFFFFB470        E6BFB4A0                ; SETLO
FFFFFFFFFFFFB330        6A0D082D                        lea             r2,MSG
FFFFFFFFFFFFB474        6A0D082D                        lea             r2,MSG
FFFFFFFFFFFFB334                                 j3:
FFFFFFFFFFFFB478                                 j3:
FFFFFFFFFFFFB334        40208000                        lb              r1,[r2]
FFFFFFFFFFFFB478        40208000                        lb              r1,[r2]
FFFFFFFFFFFFB338        BE100088                        beq             r1,r0,j2
FFFFFFFFFFFFB47C        BE100088                        beq             r1,r0,j2
FFFFFFFFFFFFB33C        31FFED0C                        call    SerialPutChar
FFFFFFFFFFFFB480        31FFED5C                        call    SerialPutChar
FFFFFFFFFFFFB340        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFB484        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFB344        BE007F8A                        bra             j3
FFFFFFFFFFFFB488        BE007F8A                        bra             j3
FFFFFFFFFFFFB348                                 j2:
FFFFFFFFFFFFB48C                                 j2:
FFFFFFFFFFFFB348        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFB48C        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFB34C        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFB490        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFB350        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFB494        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFB354        37EF8018                        ret             #24
FFFFFFFFFFFFB498        37EF8018                        ret             #24
 
 
 
 
FFFFFFFFFFFFB358 0000000000000000               align   16
FFFFFFFFFFFFB498 0000000037EF8018               align   16
FFFFFFFFFFFFB360                                        align   16
FFFFFFFFFFFFB4A0                                        align   16
FFFFFFFFFFFFB360                                 MSG:
FFFFFFFFFFFFB4A0                                 MSG:
FFFFFFFFFFFFB360 6F57206F6C6C6548               db      "Hello World!",0
FFFFFFFFFFFFB4A0 6F57206F6C6C6548               db      "Hello World!",0
FFFFFFFFFFFFB36D                                 MSGSTART:
FFFFFFFFFFFFB4AD                                 MSGSTART:
FFFFFFFFFFFFB368 7061520021646C72               db      "Raptor64 system starting....",0
FFFFFFFFFFFFB4A8 7061520021646C72               db      "Raptor64 system starting....",0
FFFFFFFFFFFFB370 7973203436726F74
FFFFFFFFFFFFB4B0 7973203436726F74
FFFFFFFFFFFFB378 617473206D657473
FFFFFFFFFFFFB4B8 617473206D657473
FFFFFFFFFFFFB380 2E2E2E676E697472
FFFFFFFFFFFFB4C0 2E2E2E676E697472
 
 
FFFFFFFFFFFFB388 000000000000002E               align 16
FFFFFFFFFFFFB4C8 000000000000002E               align 16
FFFFFFFFFFFFB390                                        align 16
FFFFFFFFFFFFB4D0                                        align 16
 
 
                                                 ;----------------------------------------------------------
                                                 ;----------------------------------------------------------
                                                 ; Initialize programmable interrupt controller (PIC)
                                                 ; Initialize programmable interrupt controller (PIC)
                                                 ;  0 = nmi
                                                 ;  0 = nmi (parity error)
                                                 ;  1 = keyboard reset
                                                 ;  1 = keyboard reset
                                                 ;  2 = 1000Hz pulse (context switcher)
                                                 ;  2 = 1000Hz pulse (context switcher)
                                                 ;  3 = 100Hz pulse (cursor flash)
                                                 ;  3 = 100Hz pulse (cursor flash)
 
                                                 ;  4 = ethmac
                                                 ;  8 = uart
                                                 ;  8 = uart
                                                 ; 13 = raster interrupt
                                                 ; 13 = raster interrupt
                                                 ; 15 = keyboard char
                                                 ; 15 = keyboard char
                                                 ;----------------------------------------------------------
                                                 ;----------------------------------------------------------
FFFFFFFFFFFFB390                                 PICInit:
FFFFFFFFFFFFB4D0                                 PICInit:
FFFFFFFFFFFFB390        E6BFB3AC                ; SETLO
FFFFFFFFFFFFB4D0        E6BFB4EC                ; SETLO
FFFFFFFFFFFFB394        6A0D042D                        lea             r1,PICret
FFFFFFFFFFFFB4D4        6A0D042D                        lea             r1,PICret
FFFFFFFFFFFFB398        66009030                        sw              r1,TickIRQAddr
FFFFFFFFFFFFB4D8        66009030                        sw              r1,TickIRQAddr
                                                        ; enable: raster irq,
                                                        ; enable: raster irq,
FFFFFFFFFFFFB39C        E07FA00F                        setlo   r1,#0xA00F      ; enable nmi,kbd_rst,and kbd_irq
FFFFFFFFFFFFB4DC        E07F800F                        setlo   r1,#0x800F      ; enable nmi,kbd_rst,and kbd_irq
                                                        ; A10F enable serial IRQ
                                                        ; A10F enable serial IRQ
FFFFFFFFFFFFB3A0        E69C0FF2                ; SETLO
FFFFFFFFFFFFB4E0        E69C0FF2                ; SETLO
FFFFFFFFFFFFB3A4        EE800003                ; SETMID
FFFFFFFFFFFFB4E4        EE800003                ; SETMID
FFFFFFFFFFFFB3A8        6A0D0429                        outc    r1,PIC_IE
FFFFFFFFFFFFB4E8        6A0D0429                        outc    r1,PIC_IE
FFFFFFFFFFFFB3AC                                 PICret:
FFFFFFFFFFFFB4EC                                 PICret:
FFFFFFFFFFFFB3AC        37EF8000                        ret
FFFFFFFFFFFFB4EC        37EF8000                        ret
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ; Serial port
                                                 ; Serial port
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
                                                 ; Initialize the serial port
                                                 ; Initialize the serial port
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB3B0                                 SerialInit:
FFFFFFFFFFFFB4F0                                 SerialInit:
FFFFFFFFFFFFB3B0        62001800                        sc              r0,Uart_rxhead          ; reset buffer indexes
FFFFFFFFFFFFB4F0        62001800                        sc              r0,Uart_rxhead          ; reset buffer indexes
FFFFFFFFFFFFB3B4        62001802                        sc              r0,Uart_rxtail
FFFFFFFFFFFFB4F4        62001802                        sc              r0,Uart_rxtail
FFFFFFFFFFFFB3B8        E04001F0                        setlo   r1,#0x1f0
FFFFFFFFFFFFB4F8        E04001F0                        setlo   r1,#0x1f0
FFFFFFFFFFFFB3BC        62009810                        sc              r1,Uart_foff            ; set threshold for XOFF
FFFFFFFFFFFFB4FC        62009810                        sc              r1,Uart_foff            ; set threshold for XOFF
FFFFFFFFFFFFB3C0        E0400010                        setlo   r1,#0x010
FFFFFFFFFFFFB500        E0400010                        setlo   r1,#0x010
FFFFFFFFFFFFB3C4        6200980E                        sc              r1,Uart_fon                     ; set threshold for XON
FFFFFFFFFFFFB504        6200980E                        sc              r1,Uart_fon                     ; set threshold for XON
FFFFFFFFFFFFB3C8        E0400001                        setlo   r1,#1
FFFFFFFFFFFFB508        E0400001                        setlo   r1,#1
FFFFFFFFFFFFB3CC        E69C0A04                ; SETLO
FFFFFFFFFFFFB50C        E69C0A04                ; SETLO
FFFFFFFFFFFFB3D0        EE800003                ; SETMID
FFFFFFFFFFFFB510        EE800003                ; SETMID
FFFFFFFFFFFFB3D4        6A0D0428                        outb    r1,UART_IE                      ; enable receive interrupt only
FFFFFFFFFFFFB514        6A0D0428                        outb    r1,UART_IE                      ; enable receive interrupt only
FFFFFFFFFFFFB3D8        60001809                        sb              r0,Uart_rxrts           ; no RTS/CTS signals available
FFFFFFFFFFFFB518        60001809                        sb              r0,Uart_rxrts           ; no RTS/CTS signals available
FFFFFFFFFFFFB3DC        60001812                        sb              r0,Uart_txrts           ; no RTS/CTS signals available
FFFFFFFFFFFFB51C        60001812                        sb              r0,Uart_txrts           ; no RTS/CTS signals available
FFFFFFFFFFFFB3E0        60001813                        sb              r0,Uart_txdtr           ; no DTR signals available
FFFFFFFFFFFFB520        60001813                        sb              r0,Uart_txdtr           ; no DTR signals available
FFFFFFFFFFFFB3E4        6000180A                        sb              r0,Uart_rxdtr           ; no DTR signals available
FFFFFFFFFFFFB524        6000180A                        sb              r0,Uart_rxdtr           ; no DTR signals available
FFFFFFFFFFFFB3E8        E0400001                        setlo   r1,#1
FFFFFFFFFFFFB528        E0400001                        setlo   r1,#1
FFFFFFFFFFFFB3EC        60009814                        sb              r1,Uart_txxon           ; for now
FFFFFFFFFFFFB52C        60009814                        sb              r1,Uart_txxon           ; for now
FFFFFFFFFFFFB3F0        37EF8000                        ret
FFFFFFFFFFFFB530        37EF8000                        ret
 
 
                                                 ;---------------------------------------------------------------------------------
                                                 ;---------------------------------------------------------------------------------
                                                 ; Get character directly from serial port. Blocks until a character is available.
                                                 ; Get character directly from serial port. Blocks until a character is available.
                                                 ;---------------------------------------------------------------------------------
                                                 ;---------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB3F4                                 SerialGetCharDirect:
FFFFFFFFFFFFB534                                 SerialGetCharDirect:
FFFFFFFFFFFFB3F4                                 sgc1:
FFFFFFFFFFFFB534                                 sgc1:
FFFFFFFFFFFFB3F4        E69C0A01                ; SETLO
FFFFFFFFFFFFB534        E69C0A01                ; SETLO
FFFFFFFFFFFFB3F8        EE800003                ; SETMID
FFFFFFFFFFFFB538        EE800003                ; SETMID
FFFFFFFFFFFFB3FC        6A0D0420                        inb             r1,UART_LS              ; uart status
FFFFFFFFFFFFB53C        6A0D0420                        inb             r1,UART_LS              ; uart status
FFFFFFFFFFFFB400        14108001                        andi    r1,r1,#rxfull   ; is there a char available ?
FFFFFFFFFFFFB540        14108001                        andi    r1,r1,#rxfull   ; is there a char available ?
FFFFFFFFFFFFB404        BE107F88                        beq             r1,r0,sgc1
FFFFFFFFFFFFB544        BE107F88                        beq             r1,r0,sgc1
FFFFFFFFFFFFB408        E69C0A00                ; SETLO
FFFFFFFFFFFFB548        E69C0A00                ; SETLO
FFFFFFFFFFFFB40C        EE800003                ; SETMID
FFFFFFFFFFFFB54C        EE800003                ; SETMID
FFFFFFFFFFFFB410        6A0D0420                        inb             r1,UART
FFFFFFFFFFFFB550        6A0D0420                        inb             r1,UART
FFFFFFFFFFFFB414        37EF8000                        ret
FFFFFFFFFFFFB554        37EF8000                        ret
 
 
                                                 ;------------------------------------------------
                                                 ;------------------------------------------------
                                                 ; Check for a character at the serial port
                                                 ; Check for a character at the serial port
                                                 ; returns r1 = 1 if char available, 0 otherwise
                                                 ; returns r1 = 1 if char available, 0 otherwise
                                                 ;------------------------------------------------
                                                 ;------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB418                                 SerialCheckForCharDirect:
FFFFFFFFFFFFB558                                 SerialCheckForCharDirect:
FFFFFFFFFFFFB418        E69C0A01                ; SETLO
FFFFFFFFFFFFB558        E69C0A01                ; SETLO
FFFFFFFFFFFFB41C        EE800003                ; SETMID
FFFFFFFFFFFFB55C        EE800003                ; SETMID
FFFFFFFFFFFFB420        6A0D0420                        inb             r1,UART_LS              ; uart status
FFFFFFFFFFFFB560        6A0D0420                        inb             r1,UART_LS              ; uart status
FFFFFFFFFFFFB424        14108001                        andi    r1,r1,#rxfull   ; is there a char available ?
FFFFFFFFFFFFB564        14108001                        andi    r1,r1,#rxfull   ; is there a char available ?
FFFFFFFFFFFFB428        04100439                        sne             r1,r1,r0
FFFFFFFFFFFFB568        04100439                        sne             r1,r1,r0
FFFFFFFFFFFFB42C        37EF8000                        ret
FFFFFFFFFFFFB56C        37EF8000                        ret
 
 
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
                                                 ; Put character to serial port
                                                 ; Put character to serial port
                                                 ; r1 = char to put
                                                 ; r1 = char to put
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB430                                 SerialPutChar:
FFFFFFFFFFFFB570                                 SerialPutChar:
FFFFFFFFFFFFB430        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFB570        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFB434        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFB574        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFB438        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFB578        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFB43C        67E20010                        sw              r4,16[sp]
FFFFFFFFFFFFB57C        67E20010                        sw              r4,16[sp]
FFFFFFFFFFFFB440        67E28018                        sw              r5,24[sp]
FFFFFFFFFFFFB580        67E28018                        sw              r5,24[sp]
FFFFFFFFFFFFB444        E69C0A06                ; SETLO
FFFFFFFFFFFFB584        E69C0A06                ; SETLO
FFFFFFFFFFFFB448        EE800003                ; SETMID
FFFFFFFFFFFFB588        EE800003                ; SETMID
FFFFFFFFFFFFB44C        6A0D0820                        inb             r2,UART_MC
FFFFFFFFFFFFB58C        6A0D0820                        inb             r2,UART_MC
FFFFFFFFFFFFB450        16210003                        ori             r2,r2,#3                ; assert DTR / RTS
FFFFFFFFFFFFB590        16210003                        ori             r2,r2,#3                ; assert DTR / RTS
FFFFFFFFFFFFB454        E69C0A06                ; SETLO
FFFFFFFFFFFFB594        E69C0A06                ; SETLO
FFFFFFFFFFFFB458        EE800003                ; SETMID
FFFFFFFFFFFFB598        EE800003                ; SETMID
FFFFFFFFFFFFB45C        6A0D0828                        outb    r2,UART_MC
FFFFFFFFFFFFB59C        6A0D0828                        outb    r2,UART_MC
FFFFFFFFFFFFB460        40011812                        lb              r2,Uart_txrts
FFFFFFFFFFFFB5A0        40011812                        lb              r2,Uart_txrts
FFFFFFFFFFFFB464        BE200168                        beq             r2,r0,spcb1
FFFFFFFFFFFFB5A4        BE200168                        beq             r2,r0,spcb1
FFFFFFFFFFFFB468        46021400                        lw              r4,Milliseconds
FFFFFFFFFFFFB5A8        46021400                        lw              r4,Milliseconds
FFFFFFFFFFFFB46C        E0C00064                        setlo   r3,#100                 ; delay count (1 s)
FFFFFFFFFFFFB5AC        E0C00064                        setlo   r3,#100                 ; delay count (1 s)
FFFFFFFFFFFFB470                                 spcb3:
FFFFFFFFFFFFB5B0                                 spcb3:
FFFFFFFFFFFFB470        80011808                        inb             r2,UART_MS
FFFFFFFFFFFFB5B0        80011808                        inb             r2,UART_MS
FFFFFFFFFFFFB474        1421000A                        andi    r2,r2,#10               ; is CTS asserted ?
FFFFFFFFFFFFB5B4        1421000A                        andi    r2,r2,#10               ; is CTS asserted ?
FFFFFFFFFFFFB478        BE2000C9                        bne             r2,r0,spcb1
FFFFFFFFFFFFB5B8        BE2000C9                        bne             r2,r0,spcb1
FFFFFFFFFFFFB47C        46029400                        lw              r5,Milliseconds
FFFFFFFFFFFFB5BC        46029400                        lw              r5,Milliseconds
FFFFFFFFFFFFB480        BE42FF88                        beq             r4,r5,spcb3
FFFFFFFFFFFFB5C0        BE42FF88                        beq             r4,r5,spcb3
FFFFFFFFFFFFB484        02520009                        mov             r4,r5
FFFFFFFFFFFFB5C4        02520009                        mov             r4,r5
FFFFFFFFFFFFB488        BE01FF4F                        loop    r3,spcb3
FFFFFFFFFFFFB5C8        BE01FF4F                        loop    r3,spcb3
FFFFFFFFFFFFB48C        BE00046A                        bra             spcabort
FFFFFFFFFFFFB5CC        BE00046A                        bra             spcabort
FFFFFFFFFFFFB490                                 spcb1:
FFFFFFFFFFFFB5D0                                 spcb1:
FFFFFFFFFFFFB490        40011813                        lb              r2,Uart_txdtr
FFFFFFFFFFFFB5D0        40011813                        lb              r2,Uart_txdtr
FFFFFFFFFFFFB494        BE200168                        beq             r2,r0,spcb2
FFFFFFFFFFFFB5D4        BE200168                        beq             r2,r0,spcb2
FFFFFFFFFFFFB498        46021400                        lw              r4,Milliseconds
FFFFFFFFFFFFB5D8        46021400                        lw              r4,Milliseconds
FFFFFFFFFFFFB49C        E0C00064                        setlo   r3,#100                 ; delay count
FFFFFFFFFFFFB5DC        E0C00064                        setlo   r3,#100                 ; delay count
FFFFFFFFFFFFB4A0                                 spcb4:
FFFFFFFFFFFFB5E0                                 spcb4:
FFFFFFFFFFFFB4A0        80011808                        inb             r2,UART_MS
FFFFFFFFFFFFB5E0        80011808                        inb             r2,UART_MS
FFFFFFFFFFFFB4A4        14210014                        andi    r2,r2,#20               ; is DSR asserted ?
FFFFFFFFFFFFB5E4        14210014                        andi    r2,r2,#20               ; is DSR asserted ?
FFFFFFFFFFFFB4A8        BE2000C9                        bne             r2,r0,spcb2
FFFFFFFFFFFFB5E8        BE2000C9                        bne             r2,r0,spcb2
FFFFFFFFFFFFB4AC        46029400                        lw              r5,Milliseconds
FFFFFFFFFFFFB5EC        46029400                        lw              r5,Milliseconds
FFFFFFFFFFFFB4B0        BE42FF88                        beq             r4,r5,spcb4
FFFFFFFFFFFFB5F0        BE42FF88                        beq             r4,r5,spcb4
FFFFFFFFFFFFB4B4        02520009                        mov             r4,r5
FFFFFFFFFFFFB5F4        02520009                        mov             r4,r5
FFFFFFFFFFFFB4B8        BE01FF4F                        loop    r3,spcb4
FFFFFFFFFFFFB5F8        BE01FF4F                        loop    r3,spcb4
FFFFFFFFFFFFB4BC        BE0002EA                        bra             spcabort
FFFFFFFFFFFFB5FC        BE0002EA                        bra             spcabort
FFFFFFFFFFFFB4C0                                 spcb2:
FFFFFFFFFFFFB600                                 spcb2:
FFFFFFFFFFFFB4C0        40011814                        lb              r2,Uart_txxon
FFFFFFFFFFFFB600        40011814                        lb              r2,Uart_txxon
FFFFFFFFFFFFB4C4        BE2000C8                        beq             r2,r0,spcb5
FFFFFFFFFFFFB604        BE2000C8                        beq             r2,r0,spcb5
FFFFFFFFFFFFB4C8                                 spcb6:
FFFFFFFFFFFFB608                                 spcb6:
FFFFFFFFFFFFB4C8        40011815                        lb              r2,Uart_txxonoff
FFFFFFFFFFFFB608        40011815                        lb              r2,Uart_txxonoff
FFFFFFFFFFFFB4CC        BE200088                        beq             r2,r0,spcb5
FFFFFFFFFFFFB60C        BE200088                        beq             r2,r0,spcb5
FFFFFFFFFFFFB4D0        80021808                        inb             r4,UART_MS
FFFFFFFFFFFFB610        80021808                        inb             r4,UART_MS
FFFFFFFFFFFFB4D4        14420080                        andi    r4,r4,#0x80                     ; DCD ?
FFFFFFFFFFFFB614        14420080                        andi    r4,r4,#0x80                     ; DCD ?
FFFFFFFFFFFFB4D8        BE407F89                        bne             r4,r0,spcb6
FFFFFFFFFFFFB618        BE407F89                        bne             r4,r0,spcb6
FFFFFFFFFFFFB4DC                                 spcb5:
FFFFFFFFFFFFB61C                                 spcb5:
FFFFFFFFFFFFB4DC        46021400                        lw              r4,Milliseconds
FFFFFFFFFFFFB61C        46021400                        lw              r4,Milliseconds
FFFFFFFFFFFFB4E0        E0C00064                        setlo   r3,#100                         ; wait up to 1s
FFFFFFFFFFFFB620        E0C00064                        setlo   r3,#100                         ; wait up to 1s
FFFFFFFFFFFFB4E4                                 spcb8:
FFFFFFFFFFFFB624                                 spcb8:
FFFFFFFFFFFFB4E4        E69C0A01                ; SETLO
FFFFFFFFFFFFB624        E69C0A01                ; SETLO
FFFFFFFFFFFFB4E8        EE800003                ; SETMID
FFFFFFFFFFFFB628        EE800003                ; SETMID
FFFFFFFFFFFFB4EC        6A0D0820                        inb             r2,UART_LS
FFFFFFFFFFFFB62C        6A0D0820                        inb             r2,UART_LS
FFFFFFFFFFFFB4F0        14210020                        andi    r2,r2,#0x20                     ; tx not full ?
FFFFFFFFFFFFB630        14210020                        andi    r2,r2,#0x20                     ; tx not full ?
FFFFFFFFFFFFB4F4        BE2000C9                        bne             r2,r0,spcb7
FFFFFFFFFFFFB634        BE2000C9                        bne             r2,r0,spcb7
FFFFFFFFFFFFB4F8        46029400                        lw              r5,Milliseconds
FFFFFFFFFFFFB638        46029400                        lw              r5,Milliseconds
FFFFFFFFFFFFB4FC        BE42FF48                        beq             r4,r5,spcb8
FFFFFFFFFFFFB63C        BE42FF48                        beq             r4,r5,spcb8
FFFFFFFFFFFFB500        02520009                        mov             r4,r5
FFFFFFFFFFFFB640        02520009                        mov             r4,r5
FFFFFFFFFFFFB504        BE01FF0F                        loop    r3,spcb8
FFFFFFFFFFFFB644        BE01FF0F                        loop    r3,spcb8
FFFFFFFFFFFFB508        BE00008A                        bra             spcabort
FFFFFFFFFFFFB648        BE00008A                        bra             spcabort
FFFFFFFFFFFFB50C                                 spcb7:
FFFFFFFFFFFFB64C                                 spcb7:
FFFFFFFFFFFFB50C        E69C0A00                ; SETLO
FFFFFFFFFFFFB64C        E69C0A00                ; SETLO
FFFFFFFFFFFFB510        EE800003                ; SETMID
FFFFFFFFFFFFB650        EE800003                ; SETMID
FFFFFFFFFFFFB514        6A0D0428                        outb    r1,UART
FFFFFFFFFFFFB654        6A0D0428                        outb    r1,UART
FFFFFFFFFFFFB518                                 spcabort:
FFFFFFFFFFFFB658                                 spcabort:
FFFFFFFFFFFFB518        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB658        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB51C        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFB65C        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFB520        47E20010                        lw              r4,16[sp]
FFFFFFFFFFFFB660        47E20010                        lw              r4,16[sp]
FFFFFFFFFFFFB524        47E28018                        lw              r5,24[sp]
FFFFFFFFFFFFB664        47E28018                        lw              r5,24[sp]
FFFFFFFFFFFFB528        37EF8020                        ret             #32
FFFFFFFFFFFFB668        37EF8020                        ret             #32
 
 
                                                 ;-------------------------------------------------
                                                 ;-------------------------------------------------
                                                 ; Compute number of characters in recieve buffer.
                                                 ; Compute number of characters in recieve buffer.
                                                 ; r4 = number of chars
                                                 ; r4 = number of chars
                                                 ;-------------------------------------------------
                                                 ;-------------------------------------------------
FFFFFFFFFFFFB52C                                 CharsInRxBuf:
FFFFFFFFFFFFB66C                                 CharsInRxBuf:
FFFFFFFFFFFFB52C        42021800                        lc              r4,Uart_rxhead
FFFFFFFFFFFFB66C        42021800                        lc              r4,Uart_rxhead
FFFFFFFFFFFFB530        42011802                        lc              r2,Uart_rxtail
FFFFFFFFFFFFB670        42011802                        lc              r2,Uart_rxtail
FFFFFFFFFFFFB534        04411005                        subu    r4,r4,r2
FFFFFFFFFFFFB674        04411005                        subu    r4,r4,r2
FFFFFFFFFFFFB538        BE4000A3                        bgt             r4,r0,cirxb1
FFFFFFFFFFFFB678        BE4000A3                        bgt             r4,r0,cirxb1
FFFFFFFFFFFFB53C        E1000200                        setlo   r4,#0x200
FFFFFFFFFFFFB67C        E1000200                        setlo   r4,#0x200
FFFFFFFFFFFFB540        04411003                        addu    r4,r4,r2
FFFFFFFFFFFFB680        04411003                        addu    r4,r4,r2
FFFFFFFFFFFFB544        42011800                        lc              r2,Uart_rxhead
FFFFFFFFFFFFB684        42011800                        lc              r2,Uart_rxhead
FFFFFFFFFFFFB548        04411005                        subu    r4,r4,r2
FFFFFFFFFFFFB688        04411005                        subu    r4,r4,r2
FFFFFFFFFFFFB54C                                 cirxb1:
FFFFFFFFFFFFB68C                                 cirxb1:
FFFFFFFFFFFFB54C        37EF8000                        ret
FFFFFFFFFFFFB68C        37EF8000                        ret
 
 
                                                 ;----------------------------------------------
                                                 ;----------------------------------------------
                                                 ; Get character from rx fifo
                                                 ; Get character from rx fifo
                                                 ; If the fifo is empty enough then send an XON
                                                 ; If the fifo is empty enough then send an XON
                                                 ;----------------------------------------------
                                                 ;----------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB550                                 SerialGetChar:
FFFFFFFFFFFFB690                                 SerialGetChar:
FFFFFFFFFFFFB550        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFB690        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFB554        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFB694        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFB558        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFB698        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFB55C        67E20010                        sw              r4,16[sp]
FFFFFFFFFFFFB69C        67E20010                        sw              r4,16[sp]
FFFFFFFFFFFFB560        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFB6A0        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFB564        42019800                        lc              r3,Uart_rxhead
FFFFFFFFFFFFB6A4        42019800                        lc              r3,Uart_rxhead
FFFFFFFFFFFFB568        42011802                        lc              r2,Uart_rxtail
FFFFFFFFFFFFB6A8        42011802                        lc              r2,Uart_rxtail
FFFFFFFFFFFFB56C        BE218528                        beq             r2,r3,sgcfifo1  ; is there a char available ?
FFFFFFFFFFFFB6AC        BE218528                        beq             r2,r3,sgcfifo1  ; is there a char available ?
FFFFFFFFFFFFB570        9A019600                        lea             r3,Uart_rxfifo
FFFFFFFFFFFFB6B0        9A019600                        lea             r3,Uart_rxfifo
FFFFFFFFFFFFB574        6A218400                        lb              r1,[r2+r3]              ; get the char from the fifo into r1
FFFFFFFFFFFFB6B4        6A218400                        lb              r1,[r2+r3]              ; get the char from the fifo into r1
FFFFFFFFFFFFB578        0A210001                        addui   r2,r2,#1                ; increment the fifo pointer
FFFFFFFFFFFFB6B8        0A210001                        addui   r2,r2,#1                ; increment the fifo pointer
FFFFFFFFFFFFB57C        142101FF                        andi    r2,r2,#0x1ff
FFFFFFFFFFFFB6BC        142101FF                        andi    r2,r2,#0x1ff
FFFFFFFFFFFFB580        62011802                        sc              r2,Uart_rxtail
FFFFFFFFFFFFB6C0        62011802                        sc              r2,Uart_rxtail
FFFFFFFFFFFFB584        4001180C                        lb              r2,Uart_rxflow  ; using flow control ?
FFFFFFFFFFFFB6C4        4001180C                        lb              r2,Uart_rxflow  ; using flow control ?
FFFFFFFFFFFFB588        BE2003A8                        beq             r2,r0,sgcfifo2
FFFFFFFFFFFFB6C8        BE2003A8                        beq             r2,r0,sgcfifo2
FFFFFFFFFFFFB58C        4201980E                        lc              r3,Uart_fon             ; enough space in Rx buffer ?
FFFFFFFFFFFFB6CC        4201980E                        lc              r3,Uart_fon             ; enough space in Rx buffer ?
FFFFFFFFFFFFB590        31FFED4B                        call    CharsInRxBuf
FFFFFFFFFFFFB6D0        31FFED9B                        call    CharsInRxBuf
FFFFFFFFFFFFB594        BE418343                        bgt             r4,r3,sgcfifo2
FFFFFFFFFFFFB6D4        BE418343                        bgt             r4,r3,sgcfifo2
FFFFFFFFFFFFB598        6000180C                        sb              r0,Uart_rxflow  ; flow off
FFFFFFFFFFFFB6D8        6000180C                        sb              r0,Uart_rxflow  ; flow off
FFFFFFFFFFFFB59C        40021809                        lb              r4,Uart_rxrts
FFFFFFFFFFFFB6DC        40021809                        lb              r4,Uart_rxrts
FFFFFFFFFFFFB5A0        BE400108                        beq             r4,r0,sgcfifo3
FFFFFFFFFFFFB6E0        BE400108                        beq             r4,r0,sgcfifo3
FFFFFFFFFFFFB5A4        E69C0A06                ; SETLO
FFFFFFFFFFFFB6E4        E69C0A06                ; SETLO
FFFFFFFFFFFFB5A8        EE800003                ; SETMID
FFFFFFFFFFFFB6E8        EE800003                ; SETMID
FFFFFFFFFFFFB5AC        6A0D1020                        inb             r4,UART_MC              ; set rts bit in MC
FFFFFFFFFFFFB6EC        6A0D1020                        inb             r4,UART_MC              ; set rts bit in MC
FFFFFFFFFFFFB5B0        16420002                        ori             r4,r4,#2
FFFFFFFFFFFFB6F0        16420002                        ori             r4,r4,#2
FFFFFFFFFFFFB5B4        E69C0A06                ; SETLO
FFFFFFFFFFFFB6F4        E69C0A06                ; SETLO
FFFFFFFFFFFFB5B8        EE800003                ; SETMID
FFFFFFFFFFFFB6F8        EE800003                ; SETMID
FFFFFFFFFFFFB5BC        6A0D1028                        outb    r4,UART_MC
FFFFFFFFFFFFB6FC        6A0D1028                        outb    r4,UART_MC
FFFFFFFFFFFFB5C0                                 sgcfifo3:
FFFFFFFFFFFFB700                                 sgcfifo3:
FFFFFFFFFFFFB5C0        4002180A                        lb              r4,Uart_rxdtr
FFFFFFFFFFFFB700        4002180A                        lb              r4,Uart_rxdtr
FFFFFFFFFFFFB5C4        BE400108                        beq             r4,r0,sgcfifo4
FFFFFFFFFFFFB704        BE400108                        beq             r4,r0,sgcfifo4
FFFFFFFFFFFFB5C8        E69C0A06                ; SETLO
FFFFFFFFFFFFB708        E69C0A06                ; SETLO
FFFFFFFFFFFFB5CC        EE800003                ; SETMID
FFFFFFFFFFFFB70C        EE800003                ; SETMID
FFFFFFFFFFFFB5D0        6A0D1020                        inb             r4,UART_MC              ; set DTR
FFFFFFFFFFFFB710        6A0D1020                        inb             r4,UART_MC              ; set DTR
FFFFFFFFFFFFB5D4        16420001                        ori             r4,r4,#1
FFFFFFFFFFFFB714        16420001                        ori             r4,r4,#1
FFFFFFFFFFFFB5D8        E69C0A06                ; SETLO
FFFFFFFFFFFFB718        E69C0A06                ; SETLO
FFFFFFFFFFFFB5DC        EE800003                ; SETMID
FFFFFFFFFFFFB71C        EE800003                ; SETMID
FFFFFFFFFFFFB5E0        6A0D1028                        outb    r4,UART_MC
FFFFFFFFFFFFB720        6A0D1028                        outb    r4,UART_MC
FFFFFFFFFFFFB5E4                                 sgcfifo4:
FFFFFFFFFFFFB724                                 sgcfifo4:
FFFFFFFFFFFFB5E4        4002180B                        lb              r4,Uart_rxxon
FFFFFFFFFFFFB724        4002180B                        lb              r4,Uart_rxxon
FFFFFFFFFFFFB5E8        BE4000A8                        beq             r4,r0,sgcfifo5
FFFFFFFFFFFFB728        BE4000A8                        beq             r4,r0,sgcfifo5
FFFFFFFFFFFFB5EC        E1000011                        setlo   r4,#XON
FFFFFFFFFFFFB72C        E1000011                        setlo   r4,#XON
FFFFFFFFFFFFB5F0        E69C0A00                ; SETLO
FFFFFFFFFFFFB730        E69C0A00                ; SETLO
FFFFFFFFFFFFB5F4        EE800003                ; SETMID
FFFFFFFFFFFFB734        EE800003                ; SETMID
FFFFFFFFFFFFB5F8        6A0D1028                        outb    r4,UART
FFFFFFFFFFFFB738        6A0D1028                        outb    r4,UART
FFFFFFFFFFFFB5FC                                 sgcfifo5:
FFFFFFFFFFFFB73C                                 sgcfifo5:
FFFFFFFFFFFFB5FC                                 sgcfifo2:                                      ; return with char in r1
FFFFFFFFFFFFB73C                                 sgcfifo2:                                      ; return with char in r1
FFFFFFFFFFFFB5FC        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB73C        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB600        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFB740        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFB604        47E20010                        lw              r4,16[sp]
FFFFFFFFFFFFB744        47E20010                        lw              r4,16[sp]
FFFFFFFFFFFFB608        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFB748        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFB60C        37EF8020                        ret             #32
FFFFFFFFFFFFB74C        37EF8020                        ret             #32
FFFFFFFFFFFFB610                                 sgcfifo1:
FFFFFFFFFFFFB750                                 sgcfifo1:
FFFFFFFFFFFFB610        E07FFFFF                        setlo   r1,#-1                  ; no char available
FFFFFFFFFFFFB750        E07FFFFF                        setlo   r1,#-1                  ; no char available
FFFFFFFFFFFFB614        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB754        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB618        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFB758        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFB61C        47E20010                        lw              r4,16[sp]
FFFFFFFFFFFFB75C        47E20010                        lw              r4,16[sp]
FFFFFFFFFFFFB620        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFB760        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFB624        37EF8020                        ret             #32
FFFFFFFFFFFFB764        37EF8020                        ret             #32
 
 
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
                                                 ; Serial port IRQ
                                                 ; Serial port IRQ
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB628                                 SerialIRQ:
FFFFFFFFFFFFB768                                 SerialIRQ:
FFFFFFFFFFFFB628        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFB768        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFB62C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFB76C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFB630        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFB770        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFB634        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFB774        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFB638        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFB778        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFB63C        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFB77C        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFB640        E69C0A03                ; SETLO
FFFFFFFFFFFFB780        E69C0A03                ; SETLO
FFFFFFFFFFFFB644        EE800003                ; SETMID
FFFFFFFFFFFFB784        EE800003                ; SETMID
FFFFFFFFFFFFB648        6A0D0420                        inb             r1,UART_IS              ; get interrupt status
FFFFFFFFFFFFB788        6A0D0420                        inb             r1,UART_IS              ; get interrupt status
FFFFFFFFFFFFB64C        BE1000A1                        bge             r1,r0,sirq1
FFFFFFFFFFFFB78C        BE1000A1                        bge             r1,r0,sirq1
FFFFFFFFFFFFB650        1410807F                        andi    r1,r1,#0x7f             ; switch on interrupt type
FFFFFFFFFFFFB790        1410807F                        andi    r1,r1,#0x7f             ; switch on interrupt type
FFFFFFFFFFFFB654        B0100D04                        beqi    r1,#4,srxirq
FFFFFFFFFFFFB794        B0100D04                        beqi    r1,#4,srxirq
FFFFFFFFFFFFB658        B0100B0C                        beqi    r1,#0xC,stxirq
FFFFFFFFFFFFB798        B0100B0C                        beqi    r1,#0xC,stxirq
FFFFFFFFFFFFB65C        B0100710                        beqi    r1,#0x10,smsirq
FFFFFFFFFFFFB79C        B0100710                        beqi    r1,#0x10,smsirq
FFFFFFFFFFFFB660                                 sirq1:
FFFFFFFFFFFFB7A0                                 sirq1:
FFFFFFFFFFFFB660        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFB7A0        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFB664        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFB7A4        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFB668        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFB7A8        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFB66C        47E20018                        lw              r4,24[sp]
FFFFFFFFFFFFB7AC        47E20018                        lw              r4,24[sp]
FFFFFFFFFFFFB670        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFB7B0        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFB674        37EF8028                        ret             #40
FFFFFFFFFFFFB7B4        37EF8028                        ret             #40
 
 
                                                 ; Get the modem status and record it
                                                 ; Get the modem status and record it
FFFFFFFFFFFFB678                                 smsirq:
FFFFFFFFFFFFB7B8                                 smsirq:
FFFFFFFFFFFFB678        80009808                        inb             r1,UART_MS
FFFFFFFFFFFFB7B8        80009808                        inb             r1,UART_MS
FFFFFFFFFFFFB67C        60009808                        sb              r1,Uart_ms
FFFFFFFFFFFFB7BC        60009808                        sb              r1,Uart_ms
FFFFFFFFFFFFB680        BE007F0A                        bra             sirq1
FFFFFFFFFFFFB7C0        BE007F0A                        bra             sirq1
 
 
FFFFFFFFFFFFB684                                 stxirq:
FFFFFFFFFFFFB7C4                                 stxirq:
FFFFFFFFFFFFB684        BE007EEA                        bra             sirq1
FFFFFFFFFFFFB7C4        BE007EEA                        bra             sirq1
 
 
                                                 ; Get a character from the uart and store it in the rx fifo
                                                 ; Get a character from the uart and store it in the rx fifo
FFFFFFFFFFFFB688                                 srxirq:
FFFFFFFFFFFFB7C8                                 srxirq:
FFFFFFFFFFFFB688                                 srxirq1:
FFFFFFFFFFFFB7C8                                 srxirq1:
FFFFFFFFFFFFB688        E69C0A00                ; SETLO
FFFFFFFFFFFFB7C8        E69C0A00                ; SETLO
FFFFFFFFFFFFB68C        EE800003                ; SETMID
FFFFFFFFFFFFB7CC        EE800003                ; SETMID
FFFFFFFFFFFFB690        6A0D0420                        inb             r1,UART                         ; get the char (clears interrupt)
FFFFFFFFFFFFB7D0        6A0D0420                        inb             r1,UART                         ; get the char (clears interrupt)
FFFFFFFFFFFFB694        40011814                        lb              r2,Uart_txxon
FFFFFFFFFFFFB7D4        40011814                        lb              r2,Uart_txxon
FFFFFFFFFFFFB698        BE200108                        beq             r2,r0,srxirq3
FFFFFFFFFFFFB7D8        BE200108                        beq             r2,r0,srxirq3
FFFFFFFFFFFFB69C        B2100413                        bnei    r1,#XOFF,srxirq2
FFFFFFFFFFFFB7DC        B2100413                        bnei    r1,#XOFF,srxirq2
FFFFFFFFFFFFB6A0        E0400001                        setlo   r1,#1
FFFFFFFFFFFFB7E0        E0400001                        setlo   r1,#1
FFFFFFFFFFFFB6A4        60009815                        sb              r1,Uart_txxonoff
FFFFFFFFFFFFB7E4        60009815                        sb              r1,Uart_txxonoff
FFFFFFFFFFFFB6A8        BE00016A                        bra             srxirq5
FFFFFFFFFFFFB7E8        BE00016A                        bra             srxirq5
FFFFFFFFFFFFB6AC                                 srxirq2:
FFFFFFFFFFFFB7EC                                 srxirq2:
FFFFFFFFFFFFB6AC        B2100311                        bnei    r1,#XON,srxirq3
FFFFFFFFFFFFB7EC        B2100311                        bnei    r1,#XON,srxirq3
FFFFFFFFFFFFB6B0        60001815                        sb              r0,Uart_txxonoff
FFFFFFFFFFFFB7F0        60001815                        sb              r0,Uart_txxonoff
FFFFFFFFFFFFB6B4        BE00010A                        bra             srxirq5
FFFFFFFFFFFFB7F4        BE00010A                        bra             srxirq5
FFFFFFFFFFFFB6B8                                 srxirq3:
FFFFFFFFFFFFB7F8                                 srxirq3:
FFFFFFFFFFFFB6B8        60001815                        sb              r0,Uart_txxonoff
FFFFFFFFFFFFB7F8        60001815                        sb              r0,Uart_txxonoff
FFFFFFFFFFFFB6BC        42011800                        lc              r2,Uart_rxhead
FFFFFFFFFFFFB7FC        42011800                        lc              r2,Uart_rxhead
FFFFFFFFFFFFB6C0        9A019600                        lea             r3,Uart_rxfifo
FFFFFFFFFFFFB800        9A019600                        lea             r3,Uart_rxfifo
FFFFFFFFFFFFB6C4        6A310410                        sb              r1,[r3+r2]                      ; store in buffer
FFFFFFFFFFFFB804        6A310410                        sb              r1,[r3+r2]                      ; store in buffer
FFFFFFFFFFFFB6C8        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFB808        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFB6CC        142101FF                        andi    r2,r2,#0x1ff
FFFFFFFFFFFFB80C        142101FF                        andi    r2,r2,#0x1ff
FFFFFFFFFFFFB6D0        62011800                        sc              r2,Uart_rxhead
FFFFFFFFFFFFB810        62011800                        sc              r2,Uart_rxhead
FFFFFFFFFFFFB6D4                                 srxirq5:
FFFFFFFFFFFFB814                                 srxirq5:
FFFFFFFFFFFFB6D4        E69C0A01                ; SETLO
FFFFFFFFFFFFB814        E69C0A01                ; SETLO
FFFFFFFFFFFFB6D8        EE800003                ; SETMID
FFFFFFFFFFFFB818        EE800003                ; SETMID
FFFFFFFFFFFFB6DC        6A0D0420                        inb             r1,UART_LS                      ; check for another ready character
FFFFFFFFFFFFB81C        6A0D0420                        inb             r1,UART_LS                      ; check for another ready character
FFFFFFFFFFFFB6E0        14108001                        andi    r1,r1,#rxfull
FFFFFFFFFFFFB820        14108001                        andi    r1,r1,#rxfull
FFFFFFFFFFFFB6E4        BE107D29                        bne             r1,r0,srxirq1
FFFFFFFFFFFFB824        BE107D29                        bne             r1,r0,srxirq1
FFFFFFFFFFFFB6E8        4000980C                        lb              r1,Uart_rxflow          ; are we using flow controls?
FFFFFFFFFFFFB828        4000980C                        lb              r1,Uart_rxflow          ; are we using flow controls?
FFFFFFFFFFFFB6EC        BE1003C9                        bne             r1,r0,srxirq8
FFFFFFFFFFFFB82C        BE1003C9                        bne             r1,r0,srxirq8
FFFFFFFFFFFFB6F0        31FFED4B                        call    CharsInRxBuf
FFFFFFFFFFFFB830        31FFED9B                        call    CharsInRxBuf
FFFFFFFFFFFFB6F4        42009810                        lc              r1,Uart_foff
FFFFFFFFFFFFB834        42009810                        lc              r1,Uart_foff
FFFFFFFFFFFFB6F8        BE408360                        blt             r4,r1,srxirq8
FFFFFFFFFFFFB838        BE408360                        blt             r4,r1,srxirq8
FFFFFFFFFFFFB6FC        E0400001                        setlo   r1,#1
FFFFFFFFFFFFB83C        E0400001                        setlo   r1,#1
FFFFFFFFFFFFB700        6000980C                        sb              r1,Uart_rxflow
FFFFFFFFFFFFB840        6000980C                        sb              r1,Uart_rxflow
FFFFFFFFFFFFB704        40009809                        lb              r1,Uart_rxrts
FFFFFFFFFFFFB844        40009809                        lb              r1,Uart_rxrts
FFFFFFFFFFFFB708        BE100108                        beq             r1,r0,srxirq6
FFFFFFFFFFFFB848        BE100108                        beq             r1,r0,srxirq6
FFFFFFFFFFFFB70C        E69C0A06                ; SETLO
FFFFFFFFFFFFB84C        E69C0A06                ; SETLO
FFFFFFFFFFFFB710        EE800003                ; SETMID
FFFFFFFFFFFFB850        EE800003                ; SETMID
FFFFFFFFFFFFB714        6A0D0420                        inb             r1,UART_MC
FFFFFFFFFFFFB854        6A0D0420                        inb             r1,UART_MC
FFFFFFFFFFFFB718        141080FD                        andi    r1,r1,#0xFD             ; turn off RTS
FFFFFFFFFFFFB858        141080FD                        andi    r1,r1,#0xFD             ; turn off RTS
FFFFFFFFFFFFB71C        E69C0A06                ; SETLO
FFFFFFFFFFFFB85C        E69C0A06                ; SETLO
FFFFFFFFFFFFB720        EE800003                ; SETMID
FFFFFFFFFFFFB860        EE800003                ; SETMID
FFFFFFFFFFFFB724        6A0D0428                        outb    r1,UART_MC
FFFFFFFFFFFFB864        6A0D0428                        outb    r1,UART_MC
FFFFFFFFFFFFB728                                 srxirq6:
FFFFFFFFFFFFB868                                 srxirq6:
FFFFFFFFFFFFB728        4000980A                        lb              r1,Uart_rxdtr
FFFFFFFFFFFFB868        4000980A                        lb              r1,Uart_rxdtr
FFFFFFFFFFFFB72C        BE100108                        beq             r1,r0,srxirq7
FFFFFFFFFFFFB86C        BE100108                        beq             r1,r0,srxirq7
FFFFFFFFFFFFB730        E69C0A06                ; SETLO
FFFFFFFFFFFFB870        E69C0A06                ; SETLO
FFFFFFFFFFFFB734        EE800003                ; SETMID
FFFFFFFFFFFFB874        EE800003                ; SETMID
FFFFFFFFFFFFB738        6A0D0420                        inb             r1,UART_MC
FFFFFFFFFFFFB878        6A0D0420                        inb             r1,UART_MC
FFFFFFFFFFFFB73C        141080FE                        andi    r1,r1,#0xFE             ; turn off DTR
FFFFFFFFFFFFB87C        141080FE                        andi    r1,r1,#0xFE             ; turn off DTR
FFFFFFFFFFFFB740        E69C0A06                ; SETLO
FFFFFFFFFFFFB880        E69C0A06                ; SETLO
FFFFFFFFFFFFB744        EE800003                ; SETMID
FFFFFFFFFFFFB884        EE800003                ; SETMID
FFFFFFFFFFFFB748        6A0D0428                        outb    r1,UART_MC
FFFFFFFFFFFFB888        6A0D0428                        outb    r1,UART_MC
FFFFFFFFFFFFB74C                                 srxirq7:
FFFFFFFFFFFFB88C                                 srxirq7:
FFFFFFFFFFFFB74C        4000980B                        lb              r1,Uart_rxxon
FFFFFFFFFFFFB88C        4000980B                        lb              r1,Uart_rxxon
FFFFFFFFFFFFB750        BE1000A8                        beq             r1,r0,srxirq8
FFFFFFFFFFFFB890        BE1000A8                        beq             r1,r0,srxirq8
FFFFFFFFFFFFB754        E0400013                        setlo   r1,#XOFF
FFFFFFFFFFFFB894        E0400013                        setlo   r1,#XOFF
FFFFFFFFFFFFB758        E69C0A00                ; SETLO
FFFFFFFFFFFFB898        E69C0A00                ; SETLO
FFFFFFFFFFFFB75C        EE800003                ; SETMID
FFFFFFFFFFFFB89C        EE800003                ; SETMID
FFFFFFFFFFFFB760        6A0D0428                        outb    r1,UART
FFFFFFFFFFFFB8A0        6A0D0428                        outb    r1,UART
FFFFFFFFFFFFB764                                 srxirq8:
FFFFFFFFFFFFB8A4                                 srxirq8:
FFFFFFFFFFFFB764        BE0077EA                        bra             sirq1
FFFFFFFFFFFFB8A4        BE0077EA                        bra             sirq1
 
 
 
                                                 ;==============================================================================
 
                                                 ; Video BIOS
 
                                                 ; Video interrupt #410
 
                                                 ;
 
                                                 ; Function in R1
 
                                                 ; 0x02 = Set Cursor Position   r2 = row, r3 = col
 
                                                 ; 0x03 = Get Cursor position   returns r1 = row, r2 = col
 
                                                 ; 0x06 = Scroll screen up
 
                                                 ; 0x09 = Display character+attribute, r2=char, r3=attrib, r4=#times
 
                                                 ; 0x0A = Display character, r2 = char, r3 = # times
 
                                                 ; 0x0C = Display Pixel r2 = x, r3 = y, r4 = color
 
                                                 ; 0x0D = Get pixel  r2 = x, r3 = y
 
                                                 ; 0x14 = Display String        r2 = pointer to string
 
                                                 ; 0x15 = Display number r2 = number, r3 = # digits
 
                                                 ; 0x16 = Display String + CRLF   r2 = pointer to string
 
                                                 ; 0x17 = Display Word r2 as hex = word
 
                                                 ; 0x18 = Display Half word as hex r2 = half word
 
                                                 ; 0x19 = Display Charr char in hex r2 = char
 
                                                 ; 0x1A = Display Byte in hex r2 = byte
 
                                                 ;==============================================================================
 
                                                 ;
 
FFFFFFFFFFFFB8A8                                 VideoSC:
 
FFFFFFFFFFFFB8A8        020D0568                        mfspr   r26,AXC                         ; get context
 
FFFFFFFFFFFFB8AC        07AD0606                        shlui   r26,r26,#3                      ; *8
 
FFFFFFFFFFFFB8B0        67AF2200                        sw              sp,sp_saves[r26]        ; save sp in save area
 
FFFFFFFFFFFFB8B4        07AD1006                        shlui   r26,r26,#8                      ; 2k for stack
 
FFFFFFFFFFFFB8B8        03AF0009                        mov             sp,r26
 
FFFFFFFFFFFFB8BC        E6808000                ; SETLO
 
FFFFFFFFFFFFB8C0        EE800400                ; SETMID
 
FFFFFFFFFFFFB8C4        05ED7803                        addui   sp,sp,#0x100008000      ; base stacks address
 
FFFFFFFFFFFFB8C8        0FEF0008                        subui   sp,sp,#8
 
FFFFFFFFFFFFB8CC        67EF8000                        sw              lr,[sp]
 
FFFFFFFFFFFFB8D0                                 Video1:
 
FFFFFFFFFFFFB8D0        020F80B4                        omgi    lr,#VIDEOGATE
 
FFFFFFFFFFFFB8D4        BFF07FE9                        bne             lr,r0,Video1
 
FFFFFFFFFFFFB8D8        B0100D02                        beqi    r1,#0x02,Video_x02
 
FFFFFFFFFFFFB8DC        B0101003                        beqi    r1,#0x03,Video_x03
 
FFFFFFFFFFFFB8E0        B0101206                        beqi    r1,#0x06,Video_x06
 
FFFFFFFFFFFFB8E4        B0101309                        beqi    r1,#0x09,Video_x09
 
FFFFFFFFFFFFB8E8        B010170A                        beqi    r1,#0x0A,Video_x0A
 
FFFFFFFFFFFFB8EC        B0101A0C                        beqi    r1,#0x0C,Video_x0C
 
FFFFFFFFFFFFB8F0        B010270C                        beqi    r1,#0x0C,Video_x0D
 
FFFFFFFFFFFFB8F4        B0103B14                        beqi    r1,#0x14,Video_x14
 
FFFFFFFFFFFFB8F8        B0103D15                        beqi    r1,#0x15,Video_x15
 
FFFFFFFFFFFFB8FC        B0104016                        beqi    r1,#0x16,Video_x16
 
FFFFFFFFFFFFB900        B0104217                        beqi    r1,#0x17,Video_x17
 
FFFFFFFFFFFFB904        B010441A                        beqi    r1,#0x1A,Video_x1A
 
FFFFFFFFFFFFB908        BE0008CA                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB90C                                 Video_x02:
 
FFFFFFFFFFFFB90C        60011417                        sb              r2,CursorRow
 
FFFFFFFFFFFFB910        60019418                        sb              r3,CursorCol
 
FFFFFFFFFFFFB914        31FFF06F                        call    CalcScreenLoc
 
FFFFFFFFFFFFB918        BE00084A                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB91C                                 Video_x03:
 
FFFFFFFFFFFFB91C        4A009417                        lbu             r1,CursorRow
 
FFFFFFFFFFFFB920        4A011418                        lbu             r2,CursorCol
 
FFFFFFFFFFFFB924        BE0007EA                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB928                                 Video_x06:
 
FFFFFFFFFFFFB928        31FFF02E                        call    ScrollUp
 
FFFFFFFFFFFFB92C        BE0007AA                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB930                                 Video_x09:
 
FFFFFFFFFFFFB930        62019410                        sc              r3,CharColor
 
FFFFFFFFFFFFB934        02208009                        mov             r1,r2
 
FFFFFFFFFFFFB938                                 Video_x09a:
 
FFFFFFFFFFFFB938        31FFF07F                        call    DisplayChar
 
FFFFFFFFFFFFB93C        BE027FEF                        loop    r4,Video_x09a
 
FFFFFFFFFFFFB940        BE00070A                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB944                                 Video_x0A:
 
FFFFFFFFFFFFB944        02208009                        mov             r1,r2
 
FFFFFFFFFFFFB948                                 Video_x0Aa:
 
FFFFFFFFFFFFB948        31FFF07F                        call    DisplayChar
 
FFFFFFFFFFFFB94C        BE01FFEF                        loop    r3,Video_x0Aa
 
FFFFFFFFFFFFB950        BE00068A                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB954                                 Video_x0C:
 
FFFFFFFFFFFFB954        E69AE008                ; SETLO
 
FFFFFFFFFFFFB958        EE800003                ; SETMID
 
FFFFFFFFFFFFB95C        6A0D0812                        sh              r2,GACCEL+8             ; x0
 
FFFFFFFFFFFFB960        E69AE00C                ; SETLO
 
FFFFFFFFFFFFB964        EE800003                ; SETMID
 
FFFFFFFFFFFFB968        6A0D0C12                        sh              r3,GACCEL+12    ; y0
 
FFFFFFFFFFFFB96C        E69AE000                ; SETLO
 
FFFFFFFFFFFFB970        EE800003                ; SETMID
 
FFFFFFFFFFFFB974        6A0D1012                        sh              r4,GACCEL+0             ; color
 
FFFFFFFFFFFFB978        16008001                        lw              r1,#1
 
FFFFFFFFFFFFB97C        E69AE03C                ; SETLO
 
FFFFFFFFFFFFB980        EE800003                ; SETMID
 
FFFFFFFFFFFFB984        6A0D0412                        sh              r1,GACCEL+60    ; DRAW PIXEL command
 
FFFFFFFFFFFFB988        BE0004CA                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB98C                                 Video_x0D:
 
FFFFFFFFFFFFB98C        E69AE008                ; SETLO
 
FFFFFFFFFFFFB990        EE800003                ; SETMID
 
FFFFFFFFFFFFB994        6A0D0812                        sh              r2,GACCEL+8             ; x0
 
FFFFFFFFFFFFB998        E69AE00C                ; SETLO
 
FFFFFFFFFFFFB99C        EE800003                ; SETMID
 
FFFFFFFFFFFFB9A0        6A0D0C12                        sh              r3,GACCEL+12    ; y0
 
FFFFFFFFFFFFB9A4        16008008                        lw              r1,#8
 
FFFFFFFFFFFFB9A8        E69AE03C                ; SETLO
 
FFFFFFFFFFFFB9AC        EE800003                ; SETMID
 
FFFFFFFFFFFFB9B0        6A0D0412                        sh              r1,GACCEL+60    ; GET PIXEL command
 
FFFFFFFFFFFFB9B4        DE000000                        nop                                             ; let command start
 
FFFFFFFFFFFFB9B8        DE000000                        nop
 
FFFFFFFFFFFFB9BC        DE000000                        nop
 
FFFFFFFFFFFFB9C0                                 vxd1:
 
FFFFFFFFFFFFB9C0        E69AE038                ; SETLO
 
FFFFFFFFFFFFB9C4        EE800003                ; SETMID
 
FFFFFFFFFFFFB9C8        6A0D0407                        lhu             r1,GACCEL+56    ; wait for state = IDLE
 
FFFFFFFFFFFFB9CC        BE107FA9                        bne             r1,r0,vxd1
 
FFFFFFFFFFFFB9D0        E69AE034                ; SETLO
 
FFFFFFFFFFFFB9D4        EE800003                ; SETMID
 
FFFFFFFFFFFFB9D8        6A0D0407                        lhu             r1,GACCEL+52
 
FFFFFFFFFFFFB9DC        BE00022A                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB9E0                                 Video_x14:
 
FFFFFFFFFFFFB9E0        02208009                        mov             r1,r2
 
FFFFFFFFFFFFB9E4        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFB9E8        BE0001CA                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB9EC                                 Video_x15:
 
FFFFFFFFFFFFB9EC        02208009                        mov             r1,r2
 
FFFFFFFFFFFFB9F0        02310009                        mov             r2,r3
 
FFFFFFFFFFFFB9F4        31FFF13F                        call    DisplayNum
 
FFFFFFFFFFFFB9F8        BE00014A                        bra             VideoRet
 
 
 
FFFFFFFFFFFFB9FC                                 Video_x16:
 
FFFFFFFFFFFFB9FC        02208009                        mov             r1,r2
 
FFFFFFFFFFFFBA00        31FFF130                        call    DisplayStringCRLF
 
FFFFFFFFFFFFBA04        BE0000EA                        bra             VideoRet
 
 
 
FFFFFFFFFFFFBA08                                 Video_x17:
 
FFFFFFFFFFFFBA08        02208009                        mov             r1,r2
 
FFFFFFFFFFFFBA0C        31FFF169                        call    DisplayWord
 
FFFFFFFFFFFFBA10        BE00008A                        bra             VideoRet
 
 
 
FFFFFFFFFFFFBA14                                 Video_x1A:
 
FFFFFFFFFFFFBA14        02208009                        mov             r1,r2
 
FFFFFFFFFFFFBA18        31FFF14B                        call    DisplayByte
 
FFFFFFFFFFFFBA1C        BE00002A                        bra             VideoRet
 
 
 
FFFFFFFFFFFFBA20                                 VideoRet:
 
FFFFFFFFFFFFBA20        020000B5                        cmgi    #VIDEOGATE
 
FFFFFFFFFFFFBA24        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFBA28        020D0568                        mfspr   r26,AXC                         ; get context
 
FFFFFFFFFFFFBA2C        07AD0606                        shlui   r26,r26,#3                      ; *8
 
FFFFFFFFFFFFBA30        47AF2200                        lw              sp,sp_saves[r26]        ; get back the stack
 
FFFFFFFFFFFFBA34        01800021                        eret
 
 
 
                                                 ;==============================================================================
 
                                                 ; BIOS interrupt #413
 
                                                 ; 0x00  initialize
 
                                                 ; 0x01 read sector             r2 = sector #, r3 = pointer to buffer
 
                                                 ; 0x02 write sector
 
                                                 ;==============================================================================
 
                                                 ;
 
FFFFFFFFFFFFBA38                                 SDCARDSC:
 
FFFFFFFFFFFFBA38        020D0568                        mfspr   r26,AXC                         ; get context
 
FFFFFFFFFFFFBA3C        07AD0606                        shlui   r26,r26,#3                      ; *8
 
FFFFFFFFFFFFBA40        67AF2200                        sw              sp,sp_saves[r26]        ; save sp in save area
 
FFFFFFFFFFFFBA44        07AD1006                        shlui   r26,r26,#8                      ; 2k for stack
 
FFFFFFFFFFFFBA48        03AF0009                        mov             sp,r26
 
FFFFFFFFFFFFBA4C        E6808000                ; SETLO
 
FFFFFFFFFFFFBA50        EE800400                ; SETMID
 
FFFFFFFFFFFFBA54        05ED7803                        addui   sp,sp,#0x100008000      ; base stacks address
 
FFFFFFFFFFFFBA58        0FEF0008                        subui   sp,sp,#8
 
FFFFFFFFFFFFBA5C        67EF8000                        sw              lr,[sp]
 
FFFFFFFFFFFFBA60                                 SDC_1:
 
FFFFFFFFFFFFBA60        020F80F4                        omgi    lr,#CARDGATE
 
FFFFFFFFFFFFBA64        BFF07FE9                        bne             lr,r0,SDC_1
 
FFFFFFFFFFFFBA68        B0100400                        beqi    r1,#0,SDC_x00
 
FFFFFFFFFFFFBA6C        B0100501                        beqi    r1,#1,SDC_x01
 
FFFFFFFFFFFFBA70        B0100802                        beqi    r1,#2,SDC_x02
 
FFFFFFFFFFFFBA74        BE0000EA                        bra             SDCRet
 
FFFFFFFFFFFFBA78                                 SDC_x00:
 
FFFFFFFFFFFFBA78        31FFF54E                        call    spi_init
 
FFFFFFFFFFFFBA7C        BE0000AA                        bra             SDCRet
 
FFFFFFFFFFFFBA80                                 SDC_x01:
 
FFFFFFFFFFFFBA80        02208009                        mov             r1,r2
 
FFFFFFFFFFFFBA84        02310009                        mov             r2,r3
 
FFFFFFFFFFFFBA88        31FFF56D                        call    spi_read_sector
 
FFFFFFFFFFFFBA8C        BE00002A                        bra             SDCRet
 
FFFFFFFFFFFFBA90                                 SDC_x02:
 
FFFFFFFFFFFFBA90                                 SDCRet:
 
FFFFFFFFFFFFBA90        020000F5                        cmgi    #CARDGATE
 
FFFFFFFFFFFFBA94        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFBA98        020D0568                        mfspr   r26,AXC                         ; get context
 
FFFFFFFFFFFFBA9C        07AD0606                        shlui   r26,r26,#3                      ; *8
 
FFFFFFFFFFFFBAA0        47AF2200                        lw              sp,sp_saves[r26]        ; get back the stack
 
FFFFFFFFFFFFBAA4        01800021                        eret
 
 
 
                                                 ;==============================================================================
 
                                                 ; Real time clock BIOS
 
                                                 ; BIOS interrupt #416
 
                                                 ;
 
                                                 ; Function
 
                                                 ; 0x00 = get system tick
 
                                                 ; 0x01 = get date/time
 
                                                 ; 0x02 = set date/time
 
                                                 ;==============================================================================
 
                                                 ;
 
FFFFFFFFFFFFBAA8                                 RTCSC:
 
FFFFFFFFFFFFBAA8        020D0568                        mfspr   r26,AXC                         ; get context
 
FFFFFFFFFFFFBAAC        07AD0606                        shlui   r26,r26,#3                      ; *8
 
FFFFFFFFFFFFBAB0        67AF2200                        sw              sp,sp_saves[r26]        ; save sp in save area
 
FFFFFFFFFFFFBAB4        07AD1006                        shlui   r26,r26,#8                      ; 2k for stack
 
FFFFFFFFFFFFBAB8        03AF0009                        mov             sp,r26
 
FFFFFFFFFFFFBABC        E6808000                ; SETLO
 
FFFFFFFFFFFFBAC0        EE800400                ; SETMID
 
FFFFFFFFFFFFBAC4        05ED7803                        addui   sp,sp,#0x100008000      ; base stacks address
 
FFFFFFFFFFFFBAC8        0FEF0008                        subui   sp,sp,#8
 
FFFFFFFFFFFFBACC        67EF8000                        sw              lr,[sp]
 
                                                        ;
 
FFFFFFFFFFFFBAD0        B0100200                        beqi    r1,#0x00,RTC_x00
 
FFFFFFFFFFFFBAD4        B0100301                        beqi    r1,#0x01,RTC_x01
 
FFFFFFFFFFFFBAD8                                 RTC_x00:
 
FFFFFFFFFFFFBAD8        020085A8                        mfspr   r1,TICK
 
FFFFFFFFFFFFBADC        BE00012A                        bra             RTCRet
 
FFFFFFFFFFFFBAE0                                 RTC_x01:
 
FFFFFFFFFFFFBAE0        E69C0418                ; SETLO
 
FFFFFFFFFFFFBAE4        EE800003                ; SETMID
 
FFFFFFFFFFFFBAE8        6A0D002B                        outw    r0,DATETIME+24          ; trigger a snapshot
 
FFFFFFFFFFFFBAEC        DE000000                        nop
 
FFFFFFFFFFFFBAF0        E69C0400                ; SETLO
 
FFFFFFFFFFFFBAF4        EE800003                ; SETMID
 
FFFFFFFFFFFFBAF8        6A0D0423                        inw             r1,DATETIME                     ; get the snapshotted date and time
 
FFFFFFFFFFFFBAFC        BE00002A                        bra             RTCRet
 
FFFFFFFFFFFFBB00                                 RTCRet:
 
FFFFFFFFFFFFBB00        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFBB04        020D0568                        mfspr   r26,AXC                         ; get context
 
FFFFFFFFFFFFBB08        07AD0606                        shlui   r26,r26,#3                      ; *8
 
FFFFFFFFFFFFBB0C        47AF2200                        lw              sp,sp_saves[r26]        ; get back the stack
 
FFFFFFFFFFFFBB10        01800021                        eret
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ; Keyboard BIOS
                                                 ; Keyboard BIOS
                                                 ; BIOS interrupt #417
                                                 ; BIOS interrupt #417
                                                 ;
                                                 ;
                                                 ; Function in R1
                                                 ; Function in R1
                                                 ; 0 = initialize keyboard
                                                 ; 0x00 = initialize keyboard
                                                 ; 1 = set keyboard echo
                                                 ; 0x01 = set keyboard echo
                                                 ; 2 = get keyboard character
                                                 ; 0x02 = get keyboard character from buffer
                                                 ; 3 = check for key available
                                                 ; 0x03 = check for key available in buffer
 
                                                 ; 0x04 = check for key directly at keyboard port
 
                                                 ; 0x05 = get keyboard character directly from keyboard port (blocks)
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;
                                                 ;
FFFFFFFFFFFFB768                                 KeybdSC:
FFFFFFFFFFFFBB14                                 KeybdSC:
FFFFFFFFFFFFB768        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFBB14        020D0568                        mfspr   r26,AXC                         ; get context
FFFFFFFFFFFFB76C        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFBB18        07AD0606                        shlui   r26,r26,#3                      ; *8
FFFFFFFFFFFFB770        B2100300                        bnei    r1,#0,kbdsc1
FFFFFFFFFFFFBB1C        67AF2200                        sw              sp,sp_saves[r26]        ; save sp in save area
FFFFFFFFFFFFB774        31FFEDEC                        call    KeybdInit
FFFFFFFFFFFFBB20        07AD1006                        shlui   r26,r26,#8                      ; 2k for stack
FFFFFFFFFFFFB778        BE00016A                        bra             kbdscRet
FFFFFFFFFFFFBB24        03AF0009                        mov             sp,r26
FFFFFFFFFFFFB77C                                 kbdsc1:
FFFFFFFFFFFFBB28        E6808000                ; SETLO
FFFFFFFFFFFFB77C        B2100401                        bnei    r1,#1,kbdsc2
FFFFFFFFFFFFBB2C        EE800400                ; SETMID
FFFFFFFFFFFFB780        02208009                        mov             r1,r2
FFFFFFFFFFFFBB30        05ED7803                        addui   sp,sp,#0x100008000      ; base stacks address
FFFFFFFFFFFFB784        31FFEE06                        call    SetKeyboardEcho
FFFFFFFFFFFFBB34        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFB788        BE0000EA                        bra             kbdscRet
FFFFFFFFFFFFBB38        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFB78C                                 kbdsc2:
FFFFFFFFFFFFBB3C                                 kbdsc5:
FFFFFFFFFFFFB78C        B2100302                        bnei    r1,#2,kbdsc3
FFFFFFFFFFFFBB3C        020F8074                        omgi    lr,#KEYBDGATE
FFFFFFFFFFFFB790        31FFEE08                        call    KeybdGetChar
FFFFFFFFFFFFBB40        BFF07FE9                        bne             lr,r0,kbdsc5
FFFFFFFFFFFFB794        BE00008A                        bra             kbdscRet
FFFFFFFFFFFFBB44        B0100700                        beqi    r1,#0,kbd_x00
FFFFFFFFFFFFB798                                 kbdsc3:
FFFFFFFFFFFFBB48        B0100801                        beqi    r1,#1,kbd_x01
FFFFFFFFFFFFB798        B2100303                        bnei    r1,#3,kbdsc4
FFFFFFFFFFFFBB4C        B0100A02                        beqi    r1,#2,kbd_x02
FFFFFFFFFFFFB79C        31FFEE1D                        call    KeybdCheckForKey
FFFFFFFFFFFFBB50        B0100B03                        beqi    r1,#3,kbd_x03
FFFFFFFFFFFFB7A0        BE00002A                        bra             kbdscRet
FFFFFFFFFFFFBB54        B0100C04                        beqi    r1,#4,kbd_x04
FFFFFFFFFFFFB7A4                                 kbdsc4:
FFFFFFFFFFFFBB58        B0100D05                        beqi    r1,#5,kbd_x05
FFFFFFFFFFFFB7A4                                 kbdscRet:
FFFFFFFFFFFFBB5C        BE0001CA                        bra             kbdscRet
FFFFFFFFFFFFB7A4        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFBB60                                 kbd_x00:
FFFFFFFFFFFFB7A8        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFBB60        31FFEEEB                        call    KeybdInit
FFFFFFFFFFFFB7AC        01800021                        eret
FFFFFFFFFFFFBB64        BE00018A                        bra             kbdscRet
 
FFFFFFFFFFFFBB68                                 kbd_x01:
 
FFFFFFFFFFFFBB68        02208009                        mov             r1,r2
 
FFFFFFFFFFFFBB6C        31FFEF05                        call    SetKeyboardEcho
 
FFFFFFFFFFFFBB70        BE00012A                        bra             kbdscRet
 
FFFFFFFFFFFFBB74                                 kbd_x02:
 
FFFFFFFFFFFFBB74        31FFEF07                        call    KeybdGetChar
 
FFFFFFFFFFFFBB78        BE0000EA                        bra             kbdscRet
 
FFFFFFFFFFFFBB7C                                 kbd_x03:
 
FFFFFFFFFFFFBB7C        31FFEF1C                        call    KeybdCheckForKey
 
FFFFFFFFFFFFBB80        BE0000AA                        bra             kbdscRet
 
FFFFFFFFFFFFBB84                                 kbd_x04:
 
FFFFFFFFFFFFBB84        31FFEF20                        call    KeybdCheckForKeyDirect
 
FFFFFFFFFFFFBB88        BE00006A                        bra             kbdscRet
 
FFFFFFFFFFFFBB8C                                 kbd_x05:
 
FFFFFFFFFFFFBB8C        31FFEF25                        call    KeybdGetCharDirect
 
FFFFFFFFFFFFBB90        BE00002A                        bra             kbdscRet
 
FFFFFFFFFFFFBB94                                 kbdscRet:
 
FFFFFFFFFFFFBB94        02000075                        cmgi    #KEYBDGATE
 
FFFFFFFFFFFFBB98        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFBB9C        020D0568                        mfspr   r26,AXC                         ; get context
 
FFFFFFFFFFFFBBA0        07AD0606                        shlui   r26,r26,#3                      ; *8
 
FFFFFFFFFFFFBBA4        47AF2200                        lw              sp,sp_saves[r26]        ; get back the stack
 
FFFFFFFFFFFFBBA8        01800021                        eret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Initialize keyboard
                                                 ; Initialize keyboard
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
FFFFFFFFFFFFB7B0                                 KeybdInit:
FFFFFFFFFFFFBBAC                                 KeybdInit:
FFFFFFFFFFFFB7B0        60001450                        sb              r0,KeybdHead
FFFFFFFFFFFFBBAC        60001450                        sb              r0,KeybdHead
FFFFFFFFFFFFB7B4        60001451                        sb              r0,KeybdTail
FFFFFFFFFFFFBBB0        60001451                        sb              r0,KeybdTail
FFFFFFFFFFFFB7B8        E0400001                        setlo   r1,#1                   ; turn on keyboard echo
FFFFFFFFFFFFBBB4        E0400001                        setlo   r1,#1                   ; turn on keyboard echo
FFFFFFFFFFFFB7BC        6000941C                        sb              r1,KeybdEcho
FFFFFFFFFFFFBBB8        6000941C                        sb              r1,KeybdEcho
FFFFFFFFFFFFB7C0        37EF8000                        ret
FFFFFFFFFFFFBBBC        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Normal keyboard interrupt, the lowest priority interrupt in the system.
                                                 ; Normal keyboard interrupt, the lowest priority interrupt in the system.
                                                 ; Grab the character from the keyboard device and store it in a buffer.
                                                 ; Grab the character from the keyboard device and store it in a buffer.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB7C4                                 KeybdIRQ:
FFFFFFFFFFFFBBC0                                 KeybdIRQ:
FFFFFFFFFFFFB7C4        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFBBC0        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFB7C8        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFBBC4        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFB7CC        4A009450                        lbu             r1,KeybdHead
FFFFFFFFFFFFBBC8        4A009450                        lbu             r1,KeybdHead
FFFFFFFFFFFFB7D0        1410800F                        andi    r1,r1,#0x0f                             ; r1 = index into buffer
FFFFFFFFFFFFBBCC        1410800F                        andi    r1,r1,#0x0f                             ; r1 = index into buffer
FFFFFFFFFFFFB7D4                                 KeybdIRQa:
FFFFFFFFFFFFBBD0                                 KeybdIRQa:
FFFFFFFFFFFFB7D4        E69C0000                ; SETLO
FFFFFFFFFFFFBBD0        E69C0000                ; SETLO
FFFFFFFFFFFFB7D8        EE800003                ; SETMID
FFFFFFFFFFFFBBD4        EE800003                ; SETMID
FFFFFFFFFFFFB7DC        6A0D0821                        inch    r2,KEYBD                                ; get keyboard character
FFFFFFFFFFFFBBD8        6A0D0821                        inch    r2,KEYBD                                ; get keyboard character
FFFFFFFFFFFFB7E0        E69C0002                ; SETLO
FFFFFFFFFFFFBBDC        E69C0002                ; SETLO
FFFFFFFFFFFFB7E4        EE800003                ; SETMID
FFFFFFFFFFFFBBE0        EE800003                ; SETMID
FFFFFFFFFFFFB7E8        6A0D0029                        outc    r0,KEYBD+2                              ; clear keyboard strobe (turns off the IRQ)
FFFFFFFFFFFFBBE4        6A0D0029                        outc    r0,KEYBD+2                              ; clear keyboard strobe (turns off the IRQ)
FFFFFFFFFFFFB7EC        60111440                        sb              r2,KeybdBuffer[r1]              ; store character in buffer
FFFFFFFFFFFFBBE8        60111440                        sb              r2,KeybdBuffer[r1]              ; store character in buffer
FFFFFFFFFFFFB7F0        0A108001                        addui   r1,r1,#1                                ; increment head index
FFFFFFFFFFFFBBEC        0A108001                        addui   r1,r1,#1                                ; increment head index
FFFFFFFFFFFFB7F4        1410800F                        andi    r1,r1,#0x0f
FFFFFFFFFFFFBBF0        1410800F                        andi    r1,r1,#0x0f
FFFFFFFFFFFFB7F8        60009450                        sb              r1,KeybdHead
FFFFFFFFFFFFBBF4        60009450                        sb              r1,KeybdHead
FFFFFFFFFFFFB7FC                                 KeybdIRQb:
FFFFFFFFFFFFBBF8                                 KeybdIRQb:
FFFFFFFFFFFFB7FC        4A011451                        lbu             r2,KeybdTail                    ; check to see if we've collided
FFFFFFFFFFFFBBF8        4A011451                        lbu             r2,KeybdTail                    ; check to see if we've collided
FFFFFFFFFFFFB800        BE110089                        bne             r1,r2,KeybdIRQc                 ; with the tail
FFFFFFFFFFFFBBFC        BE110089                        bne             r1,r2,KeybdIRQc                 ; with the tail
FFFFFFFFFFFFB804        0A210001                        addui   r2,r2,#1                                ; if so, increment the tail index
FFFFFFFFFFFFBC00        0A210001                        addui   r2,r2,#1                                ; if so, increment the tail index
FFFFFFFFFFFFB808        1421000F                        andi    r2,r2,#0x0f                             ; the oldest character will be lost
FFFFFFFFFFFFBC04        1421000F                        andi    r2,r2,#0x0f                             ; the oldest character will be lost
FFFFFFFFFFFFB80C        60011451                        sb              r2,KeybdTail
FFFFFFFFFFFFBC08        60011451                        sb              r2,KeybdTail
FFFFFFFFFFFFB810                                 KeybdIRQc:
FFFFFFFFFFFFBC0C                                 KeybdIRQc:
FFFFFFFFFFFFB810        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFBC0C        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB814        37EF8008                        ret             #8
FFFFFFFFFFFFBC10        37EF8008                        ret             #8
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; r1 0=echo off, non-zero = echo on
                                                 ; r1 0=echo off, non-zero = echo on
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
FFFFFFFFFFFFB818                                 SetKeyboardEcho:
FFFFFFFFFFFFBC14                                 SetKeyboardEcho:
FFFFFFFFFFFFB818        6000941C                        sb              r1,KeybdEcho
FFFFFFFFFFFFBC14        6000941C                        sb              r1,KeybdEcho
FFFFFFFFFFFFB81C        37EF8000                        ret
FFFFFFFFFFFFBC18        37EF8000                        ret
 
 
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
                                                 ; Get character from keyboard buffer
                                                 ; Get character from keyboard buffer
                                                 ;-----------------------------------------
                                                 ;-----------------------------------------
FFFFFFFFFFFFB820                                 KeybdGetChar:
FFFFFFFFFFFFBC1C                                 KeybdGetChar:
FFFFFFFFFFFFB820        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFBC1C        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFB824        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFBC20        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFB828        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFBC24        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFB82C        4A011451                        lbu             r2,KeybdTail
FFFFFFFFFFFFBC28        4A011451                        lbu             r2,KeybdTail
FFFFFFFFFFFFB830        4A009450                        lbu             r1,KeybdHead
FFFFFFFFFFFFBC2C        4A009450                        lbu             r1,KeybdHead
FFFFFFFFFFFFB834        BE110188                        beq             r1,r2,nochar
FFFFFFFFFFFFBC30        BE110188                        beq             r1,r2,nochar
FFFFFFFFFFFFB838        4A209440                        lbu             r1,KeybdBuffer[r2]
FFFFFFFFFFFFBC34        4A209440                        lbu             r1,KeybdBuffer[r2]
FFFFFFFFFFFFB83C        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFBC38        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFB840        1421000F                        andi    r2,r2,#0x0f
FFFFFFFFFFFFBC3C        1421000F                        andi    r2,r2,#0x0f
FFFFFFFFFFFFB844        60011451                        sb              r2,KeybdTail
FFFFFFFFFFFFBC40        60011451                        sb              r2,KeybdTail
FFFFFFFFFFFFB848        4001141C                        lb              r2,KeybdEcho
FFFFFFFFFFFFBC44        4001141C                        lb              r2,KeybdEcho
FFFFFFFFFFFFB84C        BE2000E8                        beq             r2,r0,kgc3
FFFFFFFFFFFFBC48        BE2000E8                        beq             r2,r0,kgc3
FFFFFFFFFFFFB850        B210030D                        bnei    r1,#CR,kgc2
FFFFFFFFFFFFBC4C        B210030D                        bnei    r1,#CR,kgc2
FFFFFFFFFFFFB854        31FFF93F                        call    CRLF                    ; convert CR keystroke into CRLF
FFFFFFFFFFFFBC50        31FFFD80                        call    CRLF                    ; convert CR keystroke into CRLF
FFFFFFFFFFFFB858        BE00008A                        bra             kgc3
FFFFFFFFFFFFBC54        BE00008A                        bra             kgc3
FFFFFFFFFFFFB85C                                 kgc2:
FFFFFFFFFFFFBC58                                 kgc2:
FFFFFFFFFFFFB85C        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFBC58        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFB860        BE00004A                        bra             kgc3
FFFFFFFFFFFFBC5C        BE00004A                        bra             kgc3
FFFFFFFFFFFFB864                                 nochar:
FFFFFFFFFFFFBC60                                 nochar:
FFFFFFFFFFFFB864        E07FFFFF                        setlo   r1,#-1
FFFFFFFFFFFFBC60        E07FFFFF                        setlo   r1,#-1
FFFFFFFFFFFFB868                                 kgc3:
FFFFFFFFFFFFBC64                                 kgc3:
FFFFFFFFFFFFB868        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFBC64        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFB86C        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFBC68        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB870        37EF8010                        ret             #16
FFFFFFFFFFFFBC6C        37EF8010                        ret             #16
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Check if there is a keyboard character available in the keyboard buffer.
                                                 ; Check if there is a keyboard character available in the keyboard buffer.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB874                                 KeybdCheckForKey:
FFFFFFFFFFFFBC70                                 KeybdCheckForKey:
FFFFFFFFFFFFB874        4A009451                        lbu             r1,KeybdTail
FFFFFFFFFFFFBC70        4A009451                        lbu             r1,KeybdTail
FFFFFFFFFFFFB878        4A011450                        lbu             r2,KeybdHead
FFFFFFFFFFFFBC74        4A011450                        lbu             r2,KeybdHead
FFFFFFFFFFFFB87C        04110439                        sne             r1,r1,r2
FFFFFFFFFFFFBC78        04110439                        sne             r1,r1,r2
FFFFFFFFFFFFB880        37EF8000                        ret
FFFFFFFFFFFFBC7C        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Check if there is a keyboard character available. If so return true (1)
                                                 ; Check if there is a keyboard character available. If so return true (1)
                                                 ; otherwise return false (0) in r1.
                                                 ; otherwise return false (0) in r1.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB884                                 KeybdCheckForKeyDirect:
FFFFFFFFFFFFBC80                                 KeybdCheckForKeyDirect:
FFFFFFFFFFFFB884        E69C0000                ; SETLO
FFFFFFFFFFFFBC80        E69C0000                ; SETLO
FFFFFFFFFFFFB888        EE800003                ; SETMID
FFFFFFFFFFFFBC84        EE800003                ; SETMID
FFFFFFFFFFFFB88C        6A0D0421                        inch    r1,KEYBD
FFFFFFFFFFFFBC88        6A0D0421                        inch    r1,KEYBD
FFFFFFFFFFFFB890        04100430                        slt             r1,r1,r0
FFFFFFFFFFFFBC8C        04100430                        slt             r1,r1,r0
FFFFFFFFFFFFB894        37EF8000                        ret
FFFFFFFFFFFFBC90        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Get character directly from keyboard. This routine blocks until a key is
                                                 ; Get character directly from keyboard. This routine blocks until a key is
                                                 ; available.
                                                 ; available.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB898                                 KeybdGetCharDirect:
FFFFFFFFFFFFBC94                                 KeybdGetCharDirect:
FFFFFFFFFFFFB898        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFBC94        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFB89C        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFBC98        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFB8A0        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFBC9C        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFB8A4        E09C0000                        setlo   r2,KEYBD
FFFFFFFFFFFFBCA0        E09C0000                        setlo   r2,KEYBD
FFFFFFFFFFFFB8A8                                 kgc1:
FFFFFFFFFFFFBCA4                                 kgc1:
FFFFFFFFFFFFB8A8        E69C0000                ; SETLO
FFFFFFFFFFFFBCA4        E69C0000                ; SETLO
FFFFFFFFFFFFB8AC        EE800003                ; SETMID
FFFFFFFFFFFFBCA8        EE800003                ; SETMID
FFFFFFFFFFFFB8B0        6A0D0421                        inch    r1,KEYBD
FFFFFFFFFFFFBCAC        6A0D0421                        inch    r1,KEYBD
FFFFFFFFFFFFB8B4        BE107FA1                        bge             r1,r0,kgc1
FFFFFFFFFFFFBCB0        BE107FA1                        bge             r1,r0,kgc1
FFFFFFFFFFFFB8B8        E69C0002                ; SETLO
FFFFFFFFFFFFBCB4        E69C0002                ; SETLO
FFFFFFFFFFFFB8BC        EE800003                ; SETMID
FFFFFFFFFFFFBCB8        EE800003                ; SETMID
FFFFFFFFFFFFB8C0        6A0D0029                        outc    r0,KEYBD+2              ; clear keyboard strobe
FFFFFFFFFFFFBCBC        6A0D0029                        outc    r0,KEYBD+2              ; clear keyboard strobe
FFFFFFFFFFFFB8C4        141080FF                        andi    r1,r1,#0xff             ; remove strobe bit
FFFFFFFFFFFFBCC0        141080FF                        andi    r1,r1,#0xff             ; remove strobe bit
FFFFFFFFFFFFB8C8        4001141C                        lb              r2,KeybdEcho    ; is keyboard echo on ?
FFFFFFFFFFFFBCC4        4001141C                        lb              r2,KeybdEcho    ; is keyboard echo on ?
FFFFFFFFFFFFB8CC        BE2000A8                        beq             r2,r0,gk1
FFFFFFFFFFFFBCC8        BE2000A8                        beq             r2,r0,gk1
FFFFFFFFFFFFB8D0        B210030D                        bnei    r1,#'\r',gk2    ; convert CR keystroke into CRLF
FFFFFFFFFFFFBCCC        B210030D                        bnei    r1,#'\r',gk2    ; convert CR keystroke into CRLF
FFFFFFFFFFFFB8D4        31FFF93F                        call    CRLF
FFFFFFFFFFFFBCD0        31FFFD80                        call    CRLF
FFFFFFFFFFFFB8D8        BE00004A                        bra             gk1
FFFFFFFFFFFFBCD4        BE00004A                        bra             gk1
FFFFFFFFFFFFB8DC                                 gk2:
FFFFFFFFFFFFBCD8                                 gk2:
FFFFFFFFFFFFB8DC        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFBCD8        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFB8E0                                 gk1:
FFFFFFFFFFFFBCDC                                 gk1:
FFFFFFFFFFFFB8E0        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFBCDC        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFB8E4        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFBCE0        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFB8E8        37EF8010                        ret             #16
FFFFFFFFFFFFBCE4        37EF8010                        ret             #16
 
 
 
                                                 ;==============================================================================
 
                                                 ;==============================================================================
 
FFFFFFFFFFFFBCE8                                 tmp_init:
 
                                                        ; wait for the rst1626 to go low
 
FFFFFFFFFFFFBCE8        E6989680                ; SETLO
 
FFFFFFFFFFFFBCEC        EE800002                ; SETMID
 
FFFFFFFFFFFFBCF0        040D0809                        lw              r2,#10000000    ; retry for up to several seconds
 
FFFFFFFFFFFFBCF4                                 tmp_init4:
 
FFFFFFFFFFFFBCF4        BE2000C8                        beq             r2,r0,tmp_init5
 
FFFFFFFFFFFFBCF8        0E210001                        subui   r2,r2,#1
 
FFFFFFFFFFFFBCFC        E69C0302                ; SETLO
 
FFFFFFFFFFFFBD00        EE800003                ; SETMID
 
FFFFFFFFFFFFBD04        6A0D0421                        inch    r1,TMP+2        ; read the status reg
 
FFFFFFFFFFFFBD08        BE107F60                        blt             r1,r0,tmp_init4
 
FFFFFFFFFFFFBD0C                                 tmp_init5:
 
 
 
FFFFFFFFFFFFBD0C        16008051                        lw              r1,#0x51        ; Start temperature conversion
 
FFFFFFFFFFFFBD10        E69C0300                ; SETLO
 
FFFFFFFFFFFFBD14        EE800003                ; SETMID
 
FFFFFFFFFFFFBD18        6A0D0429                        outc    r1,TMP
 
 
 
                                                        ; wait a bit for the trigger to take effect
 
FFFFFFFFFFFFBD1C        160089C4                        lw              r1,#2500
 
FFFFFFFFFFFFBD20                                 tmp_init1:
 
FFFFFFFFFFFFBD20        BE00800F                        loop    r1,tmp_init1
 
 
 
                                                        ; wait for the rst1626 to go low
 
FFFFFFFFFFFFBD24        E6989680                ; SETLO
 
FFFFFFFFFFFFBD28        EE800002                ; SETMID
 
FFFFFFFFFFFFBD2C        040D0809                        lw              r2,#10000000    ; retry for up to several seconds
 
FFFFFFFFFFFFBD30                                 tmp_init2:
 
FFFFFFFFFFFFBD30        BE2000C8                        beq             r2,r0,tmp_init3
 
FFFFFFFFFFFFBD34        0E210001                        subui   r2,r2,#1
 
FFFFFFFFFFFFBD38        E69C0302                ; SETLO
 
FFFFFFFFFFFFBD3C        EE800003                ; SETMID
 
FFFFFFFFFFFFBD40        6A0D0421                        inch    r1,TMP+2        ; read the status reg
 
FFFFFFFFFFFFBD44        BE107F60                        blt             r1,r0,tmp_init2
 
FFFFFFFFFFFFBD48                                 tmp_init3:
 
FFFFFFFFFFFFBD48        37EF8000                        ret
 
 
 
FFFFFFFFFFFFBD4C                                 tmp_read:
 
FFFFFFFFFFFFBD4C        0FEF0018                        subui   sp,sp,#24
 
FFFFFFFFFFFFBD50        67EF8000                        sw              lr,[sp]
 
FFFFFFFFFFFFBD54        67E08008                        sw              r1,8[sp]
 
FFFFFFFFFFFFBD58        67E10010                        sw              r2,16[sp]
 
 
 
FFFFFFFFFFFFBD5C        E6BD7840                ; SETLO
 
FFFFFFFFFFFFBD60        EE800005                ; SETMID
 
FFFFFFFFFFFFBD64        040D0409                        lw              r1,#25000000    ; wait about 1 second or so
 
FFFFFFFFFFFFBD68                                 tmp_read1:
 
FFFFFFFFFFFFBD68        BE00800F                        loop    r1,tmp_read1
 
FFFFFFFFFFFFBD6C        160080AC                        lw              r1,#0xAC        ; issue read temperature conversion
 
FFFFFFFFFFFFBD70        E69C0300                ; SETLO
 
FFFFFFFFFFFFBD74        EE800003                ; SETMID
 
FFFFFFFFFFFFBD78        6A0D0429                        outc    r1,TMP
 
 
 
                                                        ; wait a bit for the trigger to take effect
 
FFFFFFFFFFFFBD7C        160089C4                        lw              r1,#2500
 
FFFFFFFFFFFFBD80                                 tmp_read3:
 
FFFFFFFFFFFFBD80        BE00800F                        loop    r1,tmp_read3
 
 
 
                                                        ; wait for the rst1626 to go low
 
FFFFFFFFFFFFBD84        E6989680                ; SETLO
 
FFFFFFFFFFFFBD88        EE800002                ; SETMID
 
FFFFFFFFFFFFBD8C        040D0809                        lw              r2,#10000000
 
FFFFFFFFFFFFBD90                                 tmp_read2:
 
FFFFFFFFFFFFBD90        E69C0302                ; SETLO
 
FFFFFFFFFFFFBD94        EE800003                ; SETMID
 
FFFFFFFFFFFFBD98        6A0D0421                        inch    r1,TMP+2        ; read the status reg
 
FFFFFFFFFFFFBD9C        BE200068                        beq             r2,r0,tmp_read4
 
FFFFFFFFFFFFBDA0        0E210001                        subui   r2,r2,#1
 
FFFFFFFFFFFFBDA4        BE107F60                        blt             r1,r0,tmp_read2
 
FFFFFFFFFFFFBDA8                                 tmp_read4:
 
FFFFFFFFFFFFBDA8        E69C0302                ; SETLO
 
FFFFFFFFFFFFBDAC        EE800003                ; SETMID
 
FFFFFFFFFFFFBDB0        6A0D0421                        inch    r1,TMP+2                ; read the temperature
 
FFFFFFFFFFFFBDB4        16010005                        lw              r2,#5                   ; five digits
 
FFFFFFFFFFFFBDB8        31FFF13F                        call    DisplayNum
 
FFFFFFFFFFFFBDBC        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFBDC0        47E08008                        lw              r1,8[sp]
 
FFFFFFFFFFFFBDC4        47E10010                        lw              r2,16[sp]
 
FFFFFFFFFFFFBDC8        37EF8018                        ret             #24
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; 100 Hz interrupt
                                                 ; 100 Hz interrupt
                                                 ; - takes care of "flashing" the cursor
                                                 ; - takes care of "flashing" the cursor
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFB8EC                                 Pulse100:
FFFFFFFFFFFFBDCC                                 Pulse100:
FFFFFFFFFFFFB8EC        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFBDCC        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFB8F0        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFBDD0        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFB8F4        E6900000                ; SETLO
FFFFFFFFFFFFBDD4        E6900000                ; SETLO
FFFFFFFFFFFFB8F8        EE800003                ; SETMID
FFFFFFFFFFFFBDD8        EE800003                ; SETMID
FFFFFFFFFFFFB8FC        6A0D082D                        lea             r2,TEXTSCR
FFFFFFFFFFFFBDDC        6A0D082D                        lea             r2,TEXTSCR
FFFFFFFFFFFFB900        8220814E                        inch    r1,334[r2]
FFFFFFFFFFFFBDE0        8220814E                        inch    r1,334[r2]
FFFFFFFFFFFFB904        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFBDE4        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFB908        9220814E                        outc    r1,334[r2]
FFFFFFFFFFFFBDE8        9220814E                        outc    r1,334[r2]
FFFFFFFFFFFFB90C        31FFF2D8                        call    DisplayDatetime
                                                 ;      call    DisplayDatetime
FFFFFFFFFFFFB910        31FFEE4A                        call    SelectNextToRunTCB
FFFFFFFFFFFFBDEC        31FFEF82                        call    SelectNextToRunTCB
FFFFFFFFFFFFB914        31FFEE4C                        call    SwitchTask
FFFFFFFFFFFFBDF0        31FFEF84                        call    SwitchTask
FFFFFFFFFFFFB918        E6BF0010                ; SETLO
FFFFFFFFFFFFBDF4        E69CFFFC                ; SETLO
FFFFFFFFFFFFB91C        6A0D0010                        sb              r0,0xFFFF_FFFF_FFFF_0010        ; clear interrupt
FFFFFFFFFFFFBDF8        EE800003                ; SETMID
 
FFFFFFFFFFFFBDFC        6A0D0028                        outb    r0,0xDCFFFC             ; clear interrupt
                                                 ;      lw              r1,TickIRQAddr
                                                 ;      lw              r1,TickIRQAddr
                                                 ;      jal             r31,[r1]
                                                 ;      jal             r31,[r1]
                                                 ;      lw              r1,Milliseconds
                                                 ;      lw              r1,Milliseconds
                                                 ;      andi    r1,r1,#0x0f
                                                 ;      andi    r1,r1,#0x0f
                                                 ;      bnei    r1,#5,p1001
                                                 ;      bnei    r1,#5,p1001
                                                 ;      call    FlashCursor
                                                 ;      call    FlashCursor
FFFFFFFFFFFFB920                                 p1001:
FFFFFFFFFFFFBE00                                 p1001:
FFFFFFFFFFFFB920        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFBE00        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFB924        37EF8008                        ret             #8
FFFFFFFFFFFFBE04        37EF8008                        ret             #8
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
FFFFFFFFFFFFB928                                 SelectNextToRunTCB:
FFFFFFFFFFFFBE08                                 SelectNextToRunTCB:
FFFFFFFFFFFFB928        620020A8                        sc              r0,NextToRunTCB
FFFFFFFFFFFFBE08        620020A8                        sc              r0,NextToRunTCB
FFFFFFFFFFFFB92C        37EF8000                        ret
FFFFFFFFFFFFBE0C        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Switch from the RunningTCB to the NextToRunTCB
                                                 ; Switch from the RunningTCB to the NextToRunTCB
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
FFFFFFFFFFFFB930                                 SwitchTask:
FFFFFFFFFFFFBE10                                 SwitchTask:
FFFFFFFFFFFFB930        6600A0B0                        sw              r1,r1save
FFFFFFFFFFFFBE10        6600A0B0                        sw              r1,r1save
FFFFFFFFFFFFB934        660120B8                        sw              r2,r2save
FFFFFFFFFFFFBE14        660120B8                        sw              r2,r2save
FFFFFFFFFFFFB938        4C00A0A8                        lcu             r1,NextToRunTCB
FFFFFFFFFFFFBE18        4C00A0A8                        lcu             r1,NextToRunTCB
FFFFFFFFFFFFB93C        4C0120A6                        lcu             r2,RunningTCB
FFFFFFFFFFFFBE1C        4C0120A6                        lcu             r2,RunningTCB
FFFFFFFFFFFFB940        BE110089                        bne             r1,r2,swtsk1            ; are we already running this TCB ?
FFFFFFFFFFFFBE20        BE110089                        bne             r1,r2,swtsk1            ; are we already running this TCB ?
FFFFFFFFFFFFB944        4600A0B0                        lw              r1,r1save
FFFFFFFFFFFFBE24        4600A0B0                        lw              r1,r1save
FFFFFFFFFFFFB948        460120B8                        lw              r2,r2save
FFFFFFFFFFFFBE28        460120B8                        lw              r2,r2save
FFFFFFFFFFFFB94C        37EF8000                        ret
FFFFFFFFFFFFBE2C        37EF8000                        ret
FFFFFFFFFFFFB950                                 swtsk1:
FFFFFFFFFFFFBE30                                 swtsk1:
FFFFFFFFFFFFB950        142101FF                        andi    r2,r2,#0x1ff            ; max 512 TCB's
FFFFFFFFFFFFBE30        142101FF                        andi    r2,r2,#0x1ff            ; max 512 TCB's
FFFFFFFFFFFFB954        1A210200                        mului   r2,r2,#TCBSize
FFFFFFFFFFFFBE34        1A210200                        mului   r2,r2,#TCBSize
FFFFFFFFFFFFB958        E6800000                ; SETLO
FFFFFFFFFFFFBE38        E6800000                ; SETLO
FFFFFFFFFFFFB95C        EE800400                ; SETMID
FFFFFFFFFFFFBE3C        EE800400                ; SETMID
FFFFFFFFFFFFB960        042D0803                        addui   r2,r2,#TCBBase
FFFFFFFFFFFFBE40        042D0803                        addui   r2,r2,#TCBBase
FFFFFFFFFFFFB964        4600A0B0                        lw              r1,r1save                       ; get back r1
FFFFFFFFFFFFBE44        4600A0B0                        lw              r1,r1save                       ; get back r1
FFFFFFFFFFFFB968        66208000                        sw              r1,TCBr1[r2]
FFFFFFFFFFFFBE48        66208000                        sw              r1,TCBr1[r2]
FFFFFFFFFFFFB96C        4600A0B8                        lw              r1,r2save                       ; get back r2
FFFFFFFFFFFFBE4C        4600A0B8                        lw              r1,r2save                       ; get back r2
FFFFFFFFFFFFB970        66208008                        sw              r1,TCBr2[r2]
FFFFFFFFFFFFBE50        66208008                        sw              r1,TCBr2[r2]
FFFFFFFFFFFFB974        66218010                        sw              r3,TCBr3[r2]
FFFFFFFFFFFFBE54        66218010                        sw              r3,TCBr3[r2]
FFFFFFFFFFFFB978        66220018                        sw              r4,TCBr4[r2]
FFFFFFFFFFFFBE58        66220018                        sw              r4,TCBr4[r2]
FFFFFFFFFFFFB97C        66228020                        sw              r5,TCBr5[r2]
FFFFFFFFFFFFBE5C        66228020                        sw              r5,TCBr5[r2]
FFFFFFFFFFFFB980        66230028                        sw              r6,TCBr6[r2]
FFFFFFFFFFFFBE60        66230028                        sw              r6,TCBr6[r2]
FFFFFFFFFFFFB984        66238030                        sw              r7,TCBr7[r2]
FFFFFFFFFFFFBE64        66238030                        sw              r7,TCBr7[r2]
FFFFFFFFFFFFB988        66240038                        sw              r8,TCBr8[r2]
FFFFFFFFFFFFBE68        66240038                        sw              r8,TCBr8[r2]
FFFFFFFFFFFFB98C        66248040                        sw              r9,TCBr9[r2]
FFFFFFFFFFFFBE6C        66248040                        sw              r9,TCBr9[r2]
FFFFFFFFFFFFB990        66250048                        sw              r10,TCBr10[r2]
FFFFFFFFFFFFBE70        66250048                        sw              r10,TCBr10[r2]
FFFFFFFFFFFFB994        66258050                        sw              r11,TCBr11[r2]
FFFFFFFFFFFFBE74        66258050                        sw              r11,TCBr11[r2]
FFFFFFFFFFFFB998        66260058                        sw              r12,TCBr12[r2]
FFFFFFFFFFFFBE78        66260058                        sw              r12,TCBr12[r2]
FFFFFFFFFFFFB99C        66268060                        sw              r13,TCBr13[r2]
FFFFFFFFFFFFBE7C        66268060                        sw              r13,TCBr13[r2]
FFFFFFFFFFFFB9A0        66270068                        sw              r14,TCBr14[r2]
FFFFFFFFFFFFBE80        66270068                        sw              r14,TCBr14[r2]
FFFFFFFFFFFFB9A4        66278070                        sw              r15,TCBr15[r2]
FFFFFFFFFFFFBE84        66278070                        sw              r15,TCBr15[r2]
FFFFFFFFFFFFB9A8        66280078                        sw              r16,TCBr16[r2]
FFFFFFFFFFFFBE88        66280078                        sw              r16,TCBr16[r2]
FFFFFFFFFFFFB9AC        66288080                        sw              r17,TCBr17[r2]
FFFFFFFFFFFFBE8C        66288080                        sw              r17,TCBr17[r2]
FFFFFFFFFFFFB9B0        66290088                        sw              r18,TCBr18[r2]
FFFFFFFFFFFFBE90        66290088                        sw              r18,TCBr18[r2]
FFFFFFFFFFFFB9B4        66298090                        sw              r19,TCBr19[r2]
FFFFFFFFFFFFBE94        66298090                        sw              r19,TCBr19[r2]
FFFFFFFFFFFFB9B8        662A0098                        sw              r20,TCBr20[r2]
FFFFFFFFFFFFBE98        662A0098                        sw              r20,TCBr20[r2]
FFFFFFFFFFFFB9BC        662A80A0                        sw              r21,TCBr21[r2]
FFFFFFFFFFFFBE9C        662A80A0                        sw              r21,TCBr21[r2]
FFFFFFFFFFFFB9C0        662B00A8                        sw              r22,TCBr22[r2]
FFFFFFFFFFFFBEA0        662B00A8                        sw              r22,TCBr22[r2]
FFFFFFFFFFFFB9C4        662B80B0                        sw              r23,TCBr23[r2]
FFFFFFFFFFFFBEA4        662B80B0                        sw              r23,TCBr23[r2]
FFFFFFFFFFFFB9C8        662C00B8                        sw              r24,TCBr24[r2]
FFFFFFFFFFFFBEA8        662C00B8                        sw              r24,TCBr24[r2]
FFFFFFFFFFFFB9CC        662C80C0                        sw              r25,TCBr25[r2]
FFFFFFFFFFFFBEAC        662C80C0                        sw              r25,TCBr25[r2]
FFFFFFFFFFFFB9D0        662D00C8                        sw              r26,TCBr26[r2]
FFFFFFFFFFFFBEB0        662D00C8                        sw              r26,TCBr26[r2]
FFFFFFFFFFFFB9D4        662D80D0                        sw              r27,TCBr27[r2]
FFFFFFFFFFFFBEB4        662D80D0                        sw              r27,TCBr27[r2]
FFFFFFFFFFFFB9D8        662E00D8                        sw              r28,TCBr28[r2]
FFFFFFFFFFFFBEB8        662E00D8                        sw              r28,TCBr28[r2]
FFFFFFFFFFFFB9DC        662E80E0                        sw              r29,TCBr29[r2]
FFFFFFFFFFFFBEBC        662E80E0                        sw              r29,TCBr29[r2]
FFFFFFFFFFFFB9E0        662F00E8                        sw              r30,TCBr30[r2]
FFFFFFFFFFFFBEC0        662F00E8                        sw              r30,TCBr30[r2]
FFFFFFFFFFFFB9E4        662F80F0                        sw              r31,TCBr31[r2]
FFFFFFFFFFFFBEC4        662F80F0                        sw              r31,TCBr31[r2]
 
 
FFFFFFFFFFFFB9E8        4C0120A8                        lcu             r2,NextToRunTCB
FFFFFFFFFFFFBEC8        4C0120A8                        lcu             r2,NextToRunTCB
FFFFFFFFFFFFB9EC        620120A6                        sc              r2,RunningTCB
FFFFFFFFFFFFBECC        620120A6                        sc              r2,RunningTCB
FFFFFFFFFFFFB9F0        1A210200                        mului   r2,r2,#TCBSize
FFFFFFFFFFFFBED0        1A210200                        mului   r2,r2,#TCBSize
FFFFFFFFFFFFB9F4        E6800000                ; SETLO
FFFFFFFFFFFFBED4        E6800000                ; SETLO
FFFFFFFFFFFFB9F8        EE800400                ; SETMID
FFFFFFFFFFFFBED8        EE800400                ; SETMID
FFFFFFFFFFFFB9FC        042D0803                        addui   r2,r2,#TCBBase
FFFFFFFFFFFFBEDC        042D0803                        addui   r2,r2,#TCBBase
 
 
FFFFFFFFFFFFBA00        46208000                        lw              r1,TCBr1[r2]
FFFFFFFFFFFFBEE0        46208000                        lw              r1,TCBr1[r2]
FFFFFFFFFFFFBA04        46218010                        lw              r3,TCBr3[r2]
FFFFFFFFFFFFBEE4        46218010                        lw              r3,TCBr3[r2]
FFFFFFFFFFFFBA08        46220018                        lw              r4,TCBr4[r2]
FFFFFFFFFFFFBEE8        46220018                        lw              r4,TCBr4[r2]
FFFFFFFFFFFFBA0C        46228020                        lw              r5,TCBr5[r2]
FFFFFFFFFFFFBEEC        46228020                        lw              r5,TCBr5[r2]
FFFFFFFFFFFFBA10        46230028                        lw              r6,TCBr6[r2]
FFFFFFFFFFFFBEF0        46230028                        lw              r6,TCBr6[r2]
FFFFFFFFFFFFBA14        46238030                        lw              r7,TCBr7[r2]
FFFFFFFFFFFFBEF4        46238030                        lw              r7,TCBr7[r2]
FFFFFFFFFFFFBA18        46240038                        lw              r8,TCBr8[r2]
FFFFFFFFFFFFBEF8        46240038                        lw              r8,TCBr8[r2]
FFFFFFFFFFFFBA1C        46248040                        lw              r9,TCBr9[r2]
FFFFFFFFFFFFBEFC        46248040                        lw              r9,TCBr9[r2]
FFFFFFFFFFFFBA20        46250048                        lw              r10,TCBr10[r2]
FFFFFFFFFFFFBF00        46250048                        lw              r10,TCBr10[r2]
FFFFFFFFFFFFBA24        46258050                        lw              r11,TCBr11[r2]
FFFFFFFFFFFFBF04        46258050                        lw              r11,TCBr11[r2]
FFFFFFFFFFFFBA28        46260058                        lw              r12,TCBr12[r2]
FFFFFFFFFFFFBF08        46260058                        lw              r12,TCBr12[r2]
FFFFFFFFFFFFBA2C        46268060                        lw              r13,TCBr13[r2]
FFFFFFFFFFFFBF0C        46268060                        lw              r13,TCBr13[r2]
FFFFFFFFFFFFBA30        46270068                        lw              r14,TCBr14[r2]
FFFFFFFFFFFFBF10        46270068                        lw              r14,TCBr14[r2]
FFFFFFFFFFFFBA34        46278070                        lw              r15,TCBr15[r2]
FFFFFFFFFFFFBF14        46278070                        lw              r15,TCBr15[r2]
FFFFFFFFFFFFBA38        46280078                        lw              r16,TCBr16[r2]
FFFFFFFFFFFFBF18        46280078                        lw              r16,TCBr16[r2]
FFFFFFFFFFFFBA3C        46288080                        lw              r17,TCBr17[r2]
FFFFFFFFFFFFBF1C        46288080                        lw              r17,TCBr17[r2]
FFFFFFFFFFFFBA40        46290088                        lw              r18,TCBr18[r2]
FFFFFFFFFFFFBF20        46290088                        lw              r18,TCBr18[r2]
FFFFFFFFFFFFBA44        46298090                        lw              r19,TCBr19[r2]
FFFFFFFFFFFFBF24        46298090                        lw              r19,TCBr19[r2]
FFFFFFFFFFFFBA48        462A0098                        lw              r20,TCBr20[r2]
FFFFFFFFFFFFBF28        462A0098                        lw              r20,TCBr20[r2]
FFFFFFFFFFFFBA4C        462A80A0                        lw              r21,TCBr21[r2]
FFFFFFFFFFFFBF2C        462A80A0                        lw              r21,TCBr21[r2]
FFFFFFFFFFFFBA50        462B00A8                        lw              r22,TCBr22[r2]
FFFFFFFFFFFFBF30        462B00A8                        lw              r22,TCBr22[r2]
FFFFFFFFFFFFBA54        462B80B0                        lw              r23,TCBr23[r2]
FFFFFFFFFFFFBF34        462B80B0                        lw              r23,TCBr23[r2]
FFFFFFFFFFFFBA58        462C00B8                        lw              r24,TCBr24[r2]
FFFFFFFFFFFFBF38        462C00B8                        lw              r24,TCBr24[r2]
FFFFFFFFFFFFBA5C        462C80C0                        lw              r25,TCBr25[r2]
FFFFFFFFFFFFBF3C        462C80C0                        lw              r25,TCBr25[r2]
FFFFFFFFFFFFBA60        462D00C8                        lw              r26,TCBr26[r2]
FFFFFFFFFFFFBF40        462D00C8                        lw              r26,TCBr26[r2]
FFFFFFFFFFFFBA64        462D80D0                        lw              r27,TCBr27[r2]
FFFFFFFFFFFFBF44        462D80D0                        lw              r27,TCBr27[r2]
FFFFFFFFFFFFBA68        462E00D8                        lw              r28,TCBr28[r2]
FFFFFFFFFFFFBF48        462E00D8                        lw              r28,TCBr28[r2]
FFFFFFFFFFFFBA6C        462E80E0                        lw              r29,TCBr29[r2]
FFFFFFFFFFFFBF4C        462E80E0                        lw              r29,TCBr29[r2]
FFFFFFFFFFFFBA70        462F00E8                        lw              r30,TCBr30[r2]
FFFFFFFFFFFFBF50        462F00E8                        lw              r30,TCBr30[r2]
FFFFFFFFFFFFBA74        462F80F0                        lw              r31,TCBr31[r2]
FFFFFFFFFFFFBF54        462F80F0                        lw              r31,TCBr31[r2]
FFFFFFFFFFFFBA78        46210008                        lw              r2,TCBr2[r2]
FFFFFFFFFFFFBF58        46210008                        lw              r2,TCBr2[r2]
FFFFFFFFFFFFBA7C        37EF8000                        ret
FFFFFFFFFFFFBF5C        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Flash Cursor
                                                 ; Flash Cursor
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBA80                                 FlashCursor:
FFFFFFFFFFFFBF60                                 FlashCursor:
FFFFFFFFFFFFBA80        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBF60        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBA84        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBF64        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBA88        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBF68        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBA8C        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBF6C        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBA90        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBF70        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBA94        31FFEF37                        call    CalcScreenLoc
FFFFFFFFFFFFBF74        31FFF06F                        call    CalcScreenLoc
FFFFFFFFFFFFBA98        E6810000                ; SETLO
FFFFFFFFFFFFBF78        E6810000                ; SETLO
FFFFFFFFFFFFBA9C        041D0403                        addui   r1,r1,#0x10000
FFFFFFFFFFFFBF7C        041D0403                        addui   r1,r1,#0x10000
FFFFFFFFFFFFBAA0        4001141A                        lb              r2,CursorFlash
FFFFFFFFFFFFBF80        4001141A                        lb              r2,CursorFlash
FFFFFFFFFFFFBAA4        BE2001C8                        beq             r2,r0,flshcrsr2
FFFFFFFFFFFFBF84        BE2001C8                        beq             r2,r0,flshcrsr2
                                                        ; causes screen colors to flip around
                                                        ; causes screen colors to flip around
FFFFFFFFFFFFBAA8        82110000                        inch    r2,[r1]
FFFFFFFFFFFFBF88        82110000                        inch    r2,[r1]
FFFFFFFFFFFFBAAC        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFBF8C        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFBAB0        92110000                        outc    r2,[r1]
FFFFFFFFFFFFBF90        92110000                        outc    r2,[r1]
FFFFFFFFFFFFBAB4                                 flshcrsr3:
FFFFFFFFFFFFBF94                                 flshcrsr3:
FFFFFFFFFFFFBAB4        46011408                        lw              r2,Lastloc
FFFFFFFFFFFFBF94        46011408                        lw              r2,Lastloc
FFFFFFFFFFFFBAB8        BE110088                        beq             r1,r2,flshcrsr1
FFFFFFFFFFFFBF98        BE110088                        beq             r1,r2,flshcrsr1
                                                        ; restore the screen colors of the previous cursor location
                                                        ; restore the screen colors of the previous cursor location
FFFFFFFFFFFFBABC        42019414                        lc              r3,ScreenColor
FFFFFFFFFFFFBF9C        42019414                        lc              r3,ScreenColor
FFFFFFFFFFFFBAC0        92218000                        outc    r3,[r2]
FFFFFFFFFFFFBFA0        92218000                        outc    r3,[r2]
FFFFFFFFFFFFBAC4        66009408                        sw              r1,Lastloc
FFFFFFFFFFFFBFA4        66009408                        sw              r1,Lastloc
FFFFFFFFFFFFBAC8                                 flshcrsr1:
FFFFFFFFFFFFBFA8                                 flshcrsr1:
FFFFFFFFFFFFBAC8        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBFA8        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBACC        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBFAC        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBAD0        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFBFB0        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFBAD4        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFBFB4        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFBAD8        37EF8020                        ret             #32
FFFFFFFFFFFFBFB8        37EF8020                        ret             #32
FFFFFFFFFFFFBADC                                 flshcrsr2:
FFFFFFFFFFFFBFBC                                 flshcrsr2:
FFFFFFFFFFFFBADC        42019414                        lc              r3,ScreenColor
FFFFFFFFFFFFBFBC        42019414                        lc              r3,ScreenColor
FFFFFFFFFFFFBAE0        92118000                        outc    r3,[r1]
FFFFFFFFFFFFBFC0        92118000                        outc    r3,[r1]
FFFFFFFFFFFFBAE4        BE007E8A                        bra             flshcrsr3
FFFFFFFFFFFFBFC4        BE007E8A                        bra             flshcrsr3
 
 
FFFFFFFFFFFFBAE8                                 CursorOff:
FFFFFFFFFFFFBFC8                                 CursorOff:
FFFFFFFFFFFFBAE8        160080A0                        lw              r1,#0xA0
FFFFFFFFFFFFBFC8        160080A0                        lw              r1,#0xA0
FFFFFFFFFFFFBAEC        E69A0010                ; SETLO
FFFFFFFFFFFFBFCC        E69A0010                ; SETLO
FFFFFFFFFFFFBAF0        EE800003                ; SETMID
FFFFFFFFFFFFBFD0        EE800003                ; SETMID
FFFFFFFFFFFFBAF4        6A0D0429                        outc    r1,TEXTREG+16           ; turn off cursor
FFFFFFFFFFFFBFD4        6A0D0429                        outc    r1,TEXTREG+16           ; turn off cursor
FFFFFFFFFFFFBAF8        37EF8000                        ret
FFFFFFFFFFFFBFD8        37EF8000                        ret
FFFFFFFFFFFFBAFC                                 CursorOn:
FFFFFFFFFFFFBFDC                                 CursorOn:
FFFFFFFFFFFFBAFC        160080E0                        lw              r1,#0xE0
FFFFFFFFFFFFBFDC        160080E0                        lw              r1,#0xE0
FFFFFFFFFFFFBB00        E69A0010                ; SETLO
FFFFFFFFFFFFBFE0        E69A0010                ; SETLO
FFFFFFFFFFFFBB04        EE800003                ; SETMID
FFFFFFFFFFFFBFE4        EE800003                ; SETMID
FFFFFFFFFFFFBB08        6A0D0429                        outc    r1,TEXTREG+16           ; turn on cursor
FFFFFFFFFFFFBFE8        6A0D0429                        outc    r1,TEXTREG+16           ; turn on cursor
FFFFFFFFFFFFBB0C        37EF8000                        ret
FFFFFFFFFFFFBFEC        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
FFFFFFFFFFFFBB10                                 ClearBmpScreen:
FFFFFFFFFFFFBFF0                                 ClearBmpScreen:
FFFFFFFFFFFFBB10        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFBFF0        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFBB14        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBFF4        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBB18        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBFF8        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBB1C        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBFFC        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBB20        E68FFC00                ; SETLO
FFFFFFFFFFFFC000        E68FFC00                ; SETLO
FFFFFFFFFFFFBB24        040D0809                        lw              r2,#1364*768
FFFFFFFFFFFFC004        040D0809                        lw              r2,#1364*768
FFFFFFFFFFFFBB28        06210601                        shrui   r2,r2,#3                        ; r2 = # words to clear
FFFFFFFFFFFFC008        06210601                        shrui   r2,r2,#3                        ; r2 = # words to clear
FFFFFFFFFFFFBB2C        E6A92929                ; SETLO
FFFFFFFFFFFFC00C        E6A92929                ; SETLO
FFFFFFFFFFFFBB30        EEA4A4A4                ; SETMID
FFFFFFFFFFFFC010        EEA4A4A4                ; SETMID
FFFFFFFFFFFFBB34        F6829292                ; SETHI
FFFFFFFFFFFFC014        F6829292                ; SETHI
FFFFFFFFFFFFBB38        6A0D042D                        lea             r1,0x2929292929292929   ; r1 = color for eight pixels
FFFFFFFFFFFFC018        6A0D042D                        lea             r1,0x2929292929292929   ; r1 = color for eight pixels
FFFFFFFFFFFFBB3C        E6A00000                ; SETLO
FFFFFFFFFFFFC01C        E6A00000                ; SETLO
FFFFFFFFFFFFBB40        EE800400                ; SETMID
FFFFFFFFFFFFC020        EE800400                ; SETMID
FFFFFFFFFFFFBB44        6A0D0C2D                        lea             r3,BITMAPSCR            ; r3 = screen address
FFFFFFFFFFFFC024        6A0D0C2D                        lea             r3,BITMAPSCR            ; r3 = screen address
FFFFFFFFFFFFBB48                                 csj4:
FFFFFFFFFFFFC028                                 csj4:
FFFFFFFFFFFFBB48        66308000                        sw              r1,[r3]                         ; store pixel data
FFFFFFFFFFFFC028        66308000                        sw              r1,[r3]                         ; store pixel data
FFFFFFFFFFFFBB4C        0A318008                        addui   r3,r3,#8                        ; advance screen address by eight
FFFFFFFFFFFFC02C        0A318008                        addui   r3,r3,#8                        ; advance screen address by eight
FFFFFFFFFFFFBB50        BE017FCF                        loop    r2,csj4                         ; decrement pixel count and loop back
FFFFFFFFFFFFC030        BE017FCF                        loop    r2,csj4                         ; decrement pixel count and loop back
FFFFFFFFFFFFBB54        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC034        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBB58        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFC038        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBB5C        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFC03C        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFBB60        37EF8018                        ret             #24
FFFFFFFFFFFFC040        37EF8018                        ret             #24
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Clear the screen and the screen color memory
                                                 ; Clear the screen and the screen color memory
                                                 ; We clear the screen to give a visual indication that the system
                                                 ; We clear the screen to give a visual indication that the system
                                                 ; is working at all.
                                                 ; is working at all.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBB64                                 ClearScreen:
FFFFFFFFFFFFC044                                 ClearScreen:
FFFFFFFFFFFFBB64        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFC044        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFBB68        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC048        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBB6C        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC04C        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBB70        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC050        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBB74        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFC054        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFBB78        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFC058        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFBB7C        E69A0000                ; SETLO
FFFFFFFFFFFFC05C        E69A0000                ; SETLO
FFFFFFFFFFFFBB80        EE800003                ; SETMID
FFFFFFFFFFFFC060        EE800003                ; SETMID
FFFFFFFFFFFFBB84        6A0D0C2D                        lea             r3,TEXTREG
FFFFFFFFFFFFC064        6A0D0C2D                        lea             r3,TEXTREG
FFFFFFFFFFFFBB88        82308000                        inch    r1,TEXT_COLS[r3]        ; calc number to clear
FFFFFFFFFFFFC068        82308000                        inch    r1,TEXT_COLS[r3]        ; calc number to clear
FFFFFFFFFFFFBB8C        82310002                        inch    r2,TEXT_ROWS[r3]
FFFFFFFFFFFFC06C        82310002                        inch    r2,TEXT_ROWS[r3]
FFFFFFFFFFFFBB90        04110818                        mulu    r2,r1,r2                        ; r2 = # chars to clear
FFFFFFFFFFFFC070        04110818                        mulu    r2,r1,r2                        ; r2 = # chars to clear
FFFFFFFFFFFFBB94        E0400020                        setlo   r1,#32                  ; space char
FFFFFFFFFFFFC074        E0400020                        setlo   r1,#32                  ; space char
FFFFFFFFFFFFBB98        42021414                        lc              r4,ScreenColor
FFFFFFFFFFFFC078        42021414                        lc              r4,ScreenColor
FFFFFFFFFFFFBB9C        31FFEF2B                        call    AsciiToScreen
FFFFFFFFFFFFC07C        31FFF063                        call    AsciiToScreen
FFFFFFFFFFFFBBA0        E6900000                ; SETLO
FFFFFFFFFFFFC080        E6900000                ; SETLO
FFFFFFFFFFFFBBA4        EE800003                ; SETMID
FFFFFFFFFFFFC084        EE800003                ; SETMID
FFFFFFFFFFFFBBA8        6A0D0C2D                        lea             r3,TEXTSCR              ; text screen address
FFFFFFFFFFFFC088        6A0D0C2D                        lea             r3,TEXTSCR              ; text screen address
FFFFFFFFFFFFBBAC                                 csj4:
FFFFFFFFFFFFC08C                                 csj4:
FFFFFFFFFFFFBBAC        92308000                        outc    r1,[r3]
FFFFFFFFFFFFC08C        92308000                        outc    r1,[r3]
FFFFFFFFFFFFBBB0        E6810000                ; SETLO
FFFFFFFFFFFFC090        E6810000                ; SETLO
FFFFFFFFFFFFBBB4        6A3D1029                        outc    r4,0x10000[r3]  ; color screen is 0x10000 higher
FFFFFFFFFFFFC094        6A3D1029                        outc    r4,0x10000[r3]  ; color screen is 0x10000 higher
FFFFFFFFFFFFBBB8        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC098        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFBBBC        BE017F8F                        loop    r2,csj4
FFFFFFFFFFFFC09C        BE017F8F                        loop    r2,csj4
FFFFFFFFFFFFBBC0        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFC0A0        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFBBC4        47E20018                        lw              r4,24[sp]
FFFFFFFFFFFFC0A4        47E20018                        lw              r4,24[sp]
FFFFFFFFFFFFBBC8        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFC0A8        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFBBCC        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFC0AC        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBBD0        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC0B0        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBBD4        37EF8028                        ret             #40
FFFFFFFFFFFFC0B4        37EF8028                        ret             #40
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Scroll text on the screen upwards
                                                 ; Scroll text on the screen upwards
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBBD8                                 ScrollUp:
FFFFFFFFFFFFC0B8                                 ScrollUp:
FFFFFFFFFFFFBBD8        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFC0B8        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFBBDC        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC0BC        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBBE0        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC0C0        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBBE4        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC0C4        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBBE8        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFC0C8        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFBBEC        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFC0CC        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFBBF0        E69A0000                ; SETLO
FFFFFFFFFFFFC0D0        E69A0000                ; SETLO
FFFFFFFFFFFFBBF4        EE800003                ; SETMID
FFFFFFFFFFFFC0D4        EE800003                ; SETMID
FFFFFFFFFFFFBBF8        6A0D0C2D                        lea             r3,TEXTREG
FFFFFFFFFFFFC0D8        6A0D0C2D                        lea             r3,TEXTREG
FFFFFFFFFFFFBBFC        82308000                        inch    r1,TEXT_COLS[r3]        ; r1 = # text columns
FFFFFFFFFFFFC0DC        82308000                        inch    r1,TEXT_COLS[r3]        ; r1 = # text columns
FFFFFFFFFFFFBC00        82310002                        inch    r2,TEXT_ROWS[r3]
FFFFFFFFFFFFC0E0        82310002                        inch    r2,TEXT_ROWS[r3]
FFFFFFFFFFFFBC04        04110818                        mulu    r2,r1,r2                        ; calc number of chars to scroll
FFFFFFFFFFFFC0E4        04110818                        mulu    r2,r1,r2                        ; calc number of chars to scroll
FFFFFFFFFFFFBC08        04208805                        subu    r2,r2,r1                        ; one less row
FFFFFFFFFFFFC0E8        04208805                        subu    r2,r2,r1                        ; one less row
FFFFFFFFFFFFBC0C        E6900000                ; SETLO
FFFFFFFFFFFFC0EC        E6900000                ; SETLO
FFFFFFFFFFFFBC10        EE800003                ; SETMID
FFFFFFFFFFFFC0F0        EE800003                ; SETMID
FFFFFFFFFFFFBC14        6A0D0C2D                        lea             r3,TEXTSCR
FFFFFFFFFFFFC0F4        6A0D0C2D                        lea             r3,TEXTSCR
FFFFFFFFFFFFBC18                                 scrup1:
FFFFFFFFFFFFC0F8                                 scrup1:
FFFFFFFFFFFFBC18        6A309021                        inch    r4,[r3+r1]                      ; indexed addressing example
FFFFFFFFFFFFC0F8        6A309121                        inch    r4,[r3+r1*2]            ; indexed addressing example
FFFFFFFFFFFFBC1C        92320000                        outc    r4,[r3]
FFFFFFFFFFFFC0FC        92320000                        outc    r4,[r3]
FFFFFFFFFFFFBC20        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC100        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFBC24        BE017FAF                        loop    r2,scrup1
FFFFFFFFFFFFC104        BE017FAF                        loop    r2,scrup1
 
 
FFFFFFFFFFFFBC28        E69A0000                ; SETLO
FFFFFFFFFFFFC108        E69A0000                ; SETLO
FFFFFFFFFFFFBC2C        EE800003                ; SETMID
FFFFFFFFFFFFC10C        EE800003                ; SETMID
FFFFFFFFFFFFBC30        6A0D0C2D                        lea             r3,TEXTREG
FFFFFFFFFFFFC110        6A0D0C2D                        lea             r3,TEXTREG
FFFFFFFFFFFFBC34        82308002                        inch    r1,TEXT_ROWS[r3]
FFFFFFFFFFFFC114        82308002                        inch    r1,TEXT_ROWS[r3]
FFFFFFFFFFFFBC38        0E108001                        subui   r1,r1,#1
FFFFFFFFFFFFC118        0E108001                        subui   r1,r1,#1
FFFFFFFFFFFFBC3C        31FFEF16                        call    BlankLine
FFFFFFFFFFFFC11C        31FFF04E                        call    BlankLine
FFFFFFFFFFFFBC40        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC120        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBC44        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFC124        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBC48        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFC128        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFBC4C        47E20018                        lw              r4,24[sp]
FFFFFFFFFFFFC12C        47E20018                        lw              r4,24[sp]
FFFFFFFFFFFFBC50        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFC130        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFBC54        37EF8028                        ret             #40
FFFFFFFFFFFFC134        37EF8028                        ret             #40
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Blank out a line on the display
                                                 ; Blank out a line on the display
                                                 ; line number to blank is in r1
                                                 ; line number to blank is in r1
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBC58                                 BlankLine:
FFFFFFFFFFFFC138                                 BlankLine:
FFFFFFFFFFFFBC58        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFC138        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFBC5C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC13C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBC60        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC140        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBC64        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC144        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBC68        E69A0000                ; SETLO
FFFFFFFFFFFFC148        E69A0000                ; SETLO
FFFFFFFFFFFFBC6C        EE800003                ; SETMID
FFFFFFFFFFFFC14C        EE800003                ; SETMID
FFFFFFFFFFFFBC70        6A0D0C2D                        lea             r3,TEXTREG                      ; r3 = text register address
FFFFFFFFFFFFC150        6A0D0C2D                        lea             r3,TEXTREG                      ; r3 = text register address
FFFFFFFFFFFFBC74        82310000                        inch    r2,TEXT_COLS[r3]        ; r2 = # chars to blank out
FFFFFFFFFFFFC154        82310000                        inch    r2,TEXT_COLS[r3]        ; r2 = # chars to blank out
FFFFFFFFFFFFBC78        04208C18                        mulu    r3,r2,r1
FFFFFFFFFFFFC158        04208C18                        mulu    r3,r2,r1
FFFFFFFFFFFFBC7C        06318200                        shli    r3,r3,#1
FFFFFFFFFFFFC15C        06318200                        shli    r3,r3,#1
FFFFFFFFFFFFBC80        E6900000                ; SETLO
FFFFFFFFFFFFC160        E6900000                ; SETLO
FFFFFFFFFFFFBC84        EE800003                ; SETMID
FFFFFFFFFFFFC164        EE800003                ; SETMID
FFFFFFFFFFFFBC88        043D0C03                        addui   r3,r3,#TEXTSCR          ; r3 = screen address
FFFFFFFFFFFFC168        043D0C03                        addui   r3,r3,#TEXTSCR          ; r3 = screen address
FFFFFFFFFFFFBC8C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFC16C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFBC90                                 blnkln1:
FFFFFFFFFFFFC170                                 blnkln1:
FFFFFFFFFFFFBC90        92308000                        outc    r1,[r3]
FFFFFFFFFFFFC170        92308000                        outc    r1,[r3]
FFFFFFFFFFFFBC94        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC174        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFBC98        BE017FCF                        loop    r2,blnkln1
FFFFFFFFFFFFC178        BE017FCF                        loop    r2,blnkln1
FFFFFFFFFFFFBC9C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC17C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBCA0        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFC180        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBCA4        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFC184        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFBCA8        37EF8018                        ret             #24
FFFFFFFFFFFFC188        37EF8018                        ret             #24
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Convert ASCII character to screen display character.
                                                 ; Convert ASCII character to screen display character.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBCAC                                 AsciiToScreen:
FFFFFFFFFFFFC18C                                 AsciiToScreen:
FFFFFFFFFFFFBCAC        141080FF                        andi    r1,r1,#0x00ff
FFFFFFFFFFFFC18C        141080FF                        andi    r1,r1,#0x00ff
FFFFFFFFFFFFBCB0        A8100541                        bltui   r1,#'A',atoscr1
FFFFFFFFFFFFC190        A8100541                        bltui   r1,#'A',atoscr1
FFFFFFFFFFFFBCB4        AC10045A                        bleui   r1,#'Z',atoscr1
FFFFFFFFFFFFC194        AC10045A                        bleui   r1,#'Z',atoscr1
FFFFFFFFFFFFBCB8        AE10037A                        bgtui   r1,#'z',atoscr1
FFFFFFFFFFFFC198        AE10037A                        bgtui   r1,#'z',atoscr1
FFFFFFFFFFFFBCBC        A8100261                        bltui   r1,#'a',atoscr1
FFFFFFFFFFFFC19C        A8100261                        bltui   r1,#'a',atoscr1
FFFFFFFFFFFFBCC0        0C108060                        subi    r1,r1,#0x60
FFFFFFFFFFFFC1A0        0E108060                        subui   r1,r1,#0x60
FFFFFFFFFFFFBCC4                                 atoscr1:
FFFFFFFFFFFFC1A4                                 atoscr1:
FFFFFFFFFFFFBCC4        16108100                        ori             r1,r1,#0x100
FFFFFFFFFFFFC1A4        16108100                        ori             r1,r1,#0x100
FFFFFFFFFFFFBCC8        37EF8000                        ret
FFFFFFFFFFFFC1A8        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Convert screen character to ascii character
                                                 ; Convert screen character to ascii character
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBCCC                                 ScreenToAscii:
FFFFFFFFFFFFC1AC                                 ScreenToAscii:
FFFFFFFFFFFFBCCC        141080FF                        andi    r1,r1,#0xff
FFFFFFFFFFFFC1AC        141080FF                        andi    r1,r1,#0xff
FFFFFFFFFFFFBCD0        AE10021A                        bgtui   r1,#26,stasc1
FFFFFFFFFFFFC1B0        AE10021A                        bgtui   r1,#26,stasc1
FFFFFFFFFFFFBCD4        0A10803C                        addui   r1,r1,#60
FFFFFFFFFFFFC1B4        0A10803C                        addui   r1,r1,#60
FFFFFFFFFFFFBCD8                                 stasc1:
FFFFFFFFFFFFC1B8                                 stasc1:
FFFFFFFFFFFFBCD8        37EF8000                        ret
FFFFFFFFFFFFC1B8        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Calculate screen memory location from CursorRow,CursorCol.
                                                 ; Calculate screen memory location from CursorRow,CursorCol.
                                                 ; Also refreshes the cursor location.
                                                 ; Also refreshes the cursor location.
                                                 ; Destroys r1,r2,r3
                                                 ; Destroys r1,r2,r3
                                                 ; r1 = screen location
                                                 ; r1 = screen location
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBCDC                                 CalcScreenLoc:
FFFFFFFFFFFFC1BC                                 CalcScreenLoc:
FFFFFFFFFFFFBCDC        42009416                        lc              r1,CursorRow
FFFFFFFFFFFFC1BC        4A009417                        lbu             r1,CursorRow
FFFFFFFFFFFFBCE0        1410807F                        andi    r1,r1,#0x7f
FFFFFFFFFFFFC1C0        1410807F                        andi    r1,r1,#0x7f
FFFFFFFFFFFFBCE4        E69A0000                ; SETLO
FFFFFFFFFFFFC1C4        E69A0000                ; SETLO
FFFFFFFFFFFFBCE8        EE800003                ; SETMID
FFFFFFFFFFFFC1C8        EE800003                ; SETMID
FFFFFFFFFFFFBCEC        6A0D0C2D                        lea             r3,TEXTREG
FFFFFFFFFFFFC1CC        6A0D0C2D                        lea             r3,TEXTREG
FFFFFFFFFFFFBCF0        82310000                        inch    r2,TEXT_COLS[r3]
FFFFFFFFFFFFC1D0        82310000                        inch    r2,TEXT_COLS[r3]
FFFFFFFFFFFFBCF4        04208818                        mulu    r2,r2,r1
FFFFFFFFFFFFC1D4        04208818                        mulu    r2,r2,r1
FFFFFFFFFFFFBCF8        42009418                        lc              r1,CursorCol
FFFFFFFFFFFFC1D8        4A009418                        lbu             r1,CursorCol
FFFFFFFFFFFFBCFC        1410807F                        andi    r1,r1,#0x7f
FFFFFFFFFFFFC1DC        1410807F                        andi    r1,r1,#0x7f
FFFFFFFFFFFFBD00        04208803                        addu    r2,r2,r1
FFFFFFFFFFFFC1E0        04208803                        addu    r2,r2,r1
FFFFFFFFFFFFBD04        92310016                        outc    r2,TEXT_CURPOS[r3]
FFFFFFFFFFFFC1E4        92310016                        outc    r2,TEXT_CURPOS[r3]
FFFFFFFFFFFFBD08        06210200                        shli    r2,r2,#1
FFFFFFFFFFFFC1E8        06210206                        shlui   r2,r2,#1
FFFFFFFFFFFFBD0C        E6900000                ; SETLO
FFFFFFFFFFFFC1EC        E6900000                ; SETLO
FFFFFFFFFFFFBD10        EE800003                ; SETMID
FFFFFFFFFFFFC1F0        EE800003                ; SETMID
FFFFFFFFFFFFBD14        042D0403                        addui   r1,r2,#TEXTSCR                  ; r1 = screen location
FFFFFFFFFFFFC1F4        042D0403                        addui   r1,r2,#TEXTSCR                  ; r1 = screen location
FFFFFFFFFFFFBD18        37EF8000                        ret
FFFFFFFFFFFFC1F8        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Display a character on the screen
                                                 ; Display a character on the screen
                                                 ; d1.b = char to display
                                                 ; d1.b = char to display
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBD1C                                 DisplayChar:
FFFFFFFFFFFFC1FC                                 DisplayChar:
FFFFFFFFFFFFBD1C        B210080D                        bnei    r1,#'\r',dccr           ; carriage return ?
FFFFFFFFFFFFC1FC        B210080D                        bnei    r1,#'\r',dccr           ; carriage return ?
FFFFFFFFFFFFBD20        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC200        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBD24        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC204        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBD28        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC208        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBD2C        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC20C        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBD30        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFC210        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBD34        62001418                        sc              r0,CursorCol            ; just set cursor column to zero on a CR
FFFFFFFFFFFFC214        60001418                        sb              r0,CursorCol            ; just set cursor column to zero on a CR
FFFFFFFFFFFFBD38        BE00018A                        bra             dcx7
FFFFFFFFFFFFC218        BE00018A                        bra             dcx7
FFFFFFFFFFFFBD3C                                 dccr:
FFFFFFFFFFFFC21C                                 dccr:
FFFFFFFFFFFFBD3C        E6800091                ; SETLO
                                                 ;      beqi    r1,#CTRLK,dccr1
FFFFFFFFFFFFBD40        BE1D0209                        bnei    r1,#0x91,dcx6           ; cursor right ?
FFFFFFFFFFFFC21C        E6800091                ; SETLO
FFFFFFFFFFFFBD44        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC220        BE1D0209                        bnei    r1,#0x91,dcx6           ; cursor right ?
FFFFFFFFFFFFBD48        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC224                                 dccr1:
FFFFFFFFFFFFBD4C        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC224        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBD50        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC228        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBD54        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFC22C        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBD58        42011418                        lc              r2,CursorCol
FFFFFFFFFFFFC230        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBD5C        B0200338                        beqi    r2,#56,dcx7
FFFFFFFFFFFFC234        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBD60        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFC238        4A011418                        lbu             r2,CursorCol
FFFFFFFFFFFFBD64        62011418                        sc              r2,CursorCol
FFFFFFFFFFFFC23C        B0200338                        beqi    r2,#56,dcx7
FFFFFFFFFFFFBD68                                 dcx7:
FFFFFFFFFFFFC240        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFBD68        31FFEF37                        call    CalcScreenLoc
FFFFFFFFFFFFC244        60011418                        sb              r2,CursorCol
FFFFFFFFFFFFBD6C        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFC248                                 dcx7:
FFFFFFFFFFFFBD70        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFC248        31FFF06F                        call    CalcScreenLoc
FFFFFFFFFFFFBD74        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFC24C        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFBD78        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC250        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFBD7C        37EF8020                        ret             #32
FFFFFFFFFFFFC254        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBD80                                 dcx6:
FFFFFFFFFFFFC258        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBD80        E6800090                ; SETLO
FFFFFFFFFFFFC25C        37EF8020                        ret             #32
FFFFFFFFFFFFBD84        BE1D0169                        bnei    r1,#0x90,dcx8           ; cursor up ?
FFFFFFFFFFFFC260                                 dcx6:
FFFFFFFFFFFFBD88        0FEF0020                        subui   sp,sp,#32
                                                 ;      beqi    r1,#CTRLI,dccu1
FFFFFFFFFFFFBD8C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC260        E6800090                ; SETLO
FFFFFFFFFFFFBD90        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC264        BE1D0169                        bnei    r1,#0x90,dcx8           ; cursor up ?
FFFFFFFFFFFFBD94        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC268                                 dccu1:
FFFFFFFFFFFFBD98        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFC268        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBD9C        42011416                        lc              r2,CursorRow
FFFFFFFFFFFFC26C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBDA0        B02FF200                        beqi    r2,#0,dcx7
FFFFFFFFFFFFC270        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBDA4        0E210001                        subui   r2,r2,#1
FFFFFFFFFFFFC274        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBDA8        62011416                        sc              r2,CursorRow
FFFFFFFFFFFFC278        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBDAC        BE007DEA                        bra             dcx7
FFFFFFFFFFFFC27C        4A011417                        lbu             r2,CursorRow
FFFFFFFFFFFFBDB0                                 dcx8:
FFFFFFFFFFFFC280        B02FF200                        beqi    r2,#0,dcx7
FFFFFFFFFFFFBDB0        E6800093                ; SETLO
FFFFFFFFFFFFC284        0E210001                        subui   r2,r2,#1
FFFFFFFFFFFFBDB4        BE1D0169                        bnei    r1,#0x93,dcx9           ; cursor left ?
FFFFFFFFFFFFC288        60011417                        sb              r2,CursorRow
FFFFFFFFFFFFBDB8        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC28C        BE007DEA                        bra             dcx7
FFFFFFFFFFFFBDBC        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC290                                 dcx8:
FFFFFFFFFFFFBDC0        67E10008                        sw              r2,8[sp]
                                                 ;      beqi    r1,#CTRLJ,dccl1
FFFFFFFFFFFFBDC4        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC290        E6800093                ; SETLO
FFFFFFFFFFFFBDC8        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFC294        BE1D0169                        bnei    r1,#0x93,dcx9           ; cursor left ?
FFFFFFFFFFFFBDCC        42011418                        lc              r2,CursorCol
FFFFFFFFFFFFC298                                 dccl1:
FFFFFFFFFFFFBDD0        B02FE600                        beqi    r2,#0,dcx7
FFFFFFFFFFFFC298        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBDD4        0E210001                        subui   r2,r2,#1
FFFFFFFFFFFFC29C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBDD8        62011418                        sc              r2,CursorCol
FFFFFFFFFFFFC2A0        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBDDC        BE007C6A                        bra             dcx7
FFFFFFFFFFFFC2A4        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBDE0                                 dcx9:
FFFFFFFFFFFFC2A8        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBDE0        E6800092                ; SETLO
FFFFFFFFFFFFC2AC        4A011418                        lbu             r2,CursorCol
FFFFFFFFFFFFBDE4        BE1D0169                        bnei    r1,#0x92,dcx10          ; cursor down ?
FFFFFFFFFFFFC2B0        B02FE600                        beqi    r2,#0,dcx7
FFFFFFFFFFFFBDE8        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC2B4        0E210001                        subui   r2,r2,#1
FFFFFFFFFFFFBDEC        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC2B8        60011418                        sb              r2,CursorCol
FFFFFFFFFFFFBDF0        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC2BC        BE007C6A                        bra             dcx7
FFFFFFFFFFFFBDF4        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC2C0                                 dcx9:
FFFFFFFFFFFFBDF8        67EF8018                        sw              lr,24[sp]
                                                 ;      beqi    r1,#CTRLM,dccd1
FFFFFFFFFFFFBDFC        42011416                        lc              r2,CursorRow
FFFFFFFFFFFFC2C0        E6800092                ; SETLO
FFFFFFFFFFFFBE00        B02FDA1E                        beqi    r2,#30,dcx7
FFFFFFFFFFFFC2C4        BE1D0169                        bnei    r1,#0x92,dcx10          ; cursor down ?
FFFFFFFFFFFFBE04        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFC2C8                                 dccd1:
FFFFFFFFFFFFBE08        62011416                        sc              r2,CursorRow
FFFFFFFFFFFFC2C8        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBE0C        BE007AEA                        bra             dcx7
FFFFFFFFFFFFC2CC        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBE10                                 dcx10:
FFFFFFFFFFFFC2D0        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBE10        E6800094                ; SETLO
FFFFFFFFFFFFC2D4        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBE14        BE1D0189                        bnei    r1,#0x94,dcx11                  ; cursor home ?
FFFFFFFFFFFFC2D8        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBE18        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC2DC        4A011417                        lbu             r2,CursorRow
FFFFFFFFFFFFBE1C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC2E0        B02FDA1E                        beqi    r2,#30,dcx7
FFFFFFFFFFFFBE20        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC2E4        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFBE24        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC2E8        60011417                        sb              r2,CursorRow
FFFFFFFFFFFFBE28        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFC2EC        BE007AEA                        bra             dcx7
FFFFFFFFFFFFBE2C        42011418                        lc              r2,CursorCol
FFFFFFFFFFFFC2F0                                 dcx10:
FFFFFFFFFFFFBE30        BE200068                        beq             r2,r0,dcx12
FFFFFFFFFFFFC2F0        E6800094                ; SETLO
FFFFFFFFFFFFBE34        62001418                        sc              r0,CursorCol
FFFFFFFFFFFFC2F4        BE1D0189                        bnei    r1,#0x94,dcx11                  ; cursor home ?
FFFFFFFFFFFFBE38        BE00798A                        bra             dcx7
FFFFFFFFFFFFC2F8        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBE3C                                 dcx12:
FFFFFFFFFFFFC2FC        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBE3C        62001416                        sc              r0,CursorRow
FFFFFFFFFFFFC300        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBE40        BE00794A                        bra             dcx7
FFFFFFFFFFFFC304        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBE44                                 dcx11:
FFFFFFFFFFFFC308        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBE44        0FEF0030                        subui   sp,sp,#48
FFFFFFFFFFFFC30C        4A011418                        lbu             r2,CursorCol
FFFFFFFFFFFFBE48        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC310        BE200068                        beq             r2,r0,dcx12
FFFFFFFFFFFFBE4C        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC314        60001418                        sb              r0,CursorCol
FFFFFFFFFFFFBE50        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC318        BE00798A                        bra             dcx7
FFFFFFFFFFFFBE54        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFC31C                                 dcx12:
FFFFFFFFFFFFBE58        67E28020                        sw              r5,32[sp]
FFFFFFFFFFFFC31C        60001417                        sb              r0,CursorRow
FFFFFFFFFFFFBE5C        67EF8028                        sw              lr,40[sp]
FFFFFFFFFFFFC320        BE00794A                        bra             dcx7
FFFFFFFFFFFFBE60        E6800099                ; SETLO
FFFFFFFFFFFFC324                                 dcx11:
FFFFFFFFFFFFBE64        BE1D00A9                        bnei    r1,#0x99,dcx13          ; delete ?
FFFFFFFFFFFFC324        0FEF0030                        subui   sp,sp,#48
FFFFFFFFFFFFBE68        31FFEF37                        call    CalcScreenLoc
FFFFFFFFFFFFC328        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBE6C        04008C09                        or              r3,r0,r1                        ; r3 = screen location
FFFFFFFFFFFFC32C        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBE70        42009418                        lc              r1,CursorCol            ; r1 = cursor column
FFFFFFFFFFFFC330        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBE74        BE00012A                        bra             dcx5
FFFFFFFFFFFFC334        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFBE78                                 dcx13:
FFFFFFFFFFFFC338        67E28020                        sw              r5,32[sp]
FFFFFFFFFFFFBE78        B2101508                        bnei    r1,#CTRLH,dcx3          ; backspace ?
FFFFFFFFFFFFC33C        67EF8028                        sw              lr,40[sp]
FFFFFFFFFFFFBE7C        42011418                        lc              r2,CursorCol
FFFFFFFFFFFFC340        E6800099                ; SETLO
FFFFFFFFFFFFBE80        BE2003A8                        beq             r2,r0,dcx4
FFFFFFFFFFFFC344        BE1D00A9                        bnei    r1,#0x99,dcx13          ; delete ?
FFFFFFFFFFFFBE84        0E210001                        subui   r2,r2,#1
FFFFFFFFFFFFC348        31FFF06F                        call    CalcScreenLoc
FFFFFFFFFFFFBE88        62011418                        sc              r2,CursorCol
FFFFFFFFFFFFC34C        02118009                        mov             r3,r1                           ; r3 = screen location
FFFFFFFFFFFFBE8C        31FFEF37                        call    CalcScreenLoc           ; a0 = screen location
FFFFFFFFFFFFC350        4A009418                        lbu             r1,CursorCol            ; r1 = cursor column
FFFFFFFFFFFFBE90        04008C09                        or              r3,r0,r1                        ; r3 = screen location
FFFFFFFFFFFFC354        BE00012A                        bra             dcx5
FFFFFFFFFFFFBE94        42009418                        lc              r1,CursorCol
FFFFFFFFFFFFC358                                 dcx13:
FFFFFFFFFFFFBE98                                 dcx5:
FFFFFFFFFFFFC358        B2101508                        bnei    r1,#CTRLH,dcx3          ; backspace ?
FFFFFFFFFFFFBE98        82310002                        inch    r2,2[r3]
FFFFFFFFFFFFC35C        4A011418                        lbu             r2,CursorCol
FFFFFFFFFFFFBE9C        92310000                        outc    r2,[r3]
FFFFFFFFFFFFC360        BE200408                        beq             r2,r0,dcx4
FFFFFFFFFFFFBEA0        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC364        0E210001                        subui   r2,r2,#1
FFFFFFFFFFFFBEA4        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFC368        60011418                        sb              r2,CursorCol
FFFFFFFFFFFFBEA8        E69A0000                ; SETLO
FFFFFFFFFFFFC36C        31FFF06F                        call    CalcScreenLoc           ; a0 = screen location
FFFFFFFFFFFFBEAC        EE800003                ; SETMID
FFFFFFFFFFFFC370        02118009                        mov             r3,r1                           ; r3 = screen location
FFFFFFFFFFFFBEB0        6A0D102D                        lea             r4,TEXTREG
FFFFFFFFFFFFC374        4A009418                        lbu             r1,CursorCol
FFFFFFFFFFFFBEB4        82428000                        inch    r5,TEXT_COLS[r4]
FFFFFFFFFFFFC378                                 dcx5:
FFFFFFFFFFFFBEB8        BE12FF04                        bltu    r1,r5,dcx5
FFFFFFFFFFFFC378        82310002                        inch    r2,2[r3]
FFFFFFFFFFFFBEBC        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFC37C        92310000                        outc    r2,[r3]
FFFFFFFFFFFFBEC0        31FFEF2B                        call    AsciiToScreen
FFFFFFFFFFFFC380        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFBEC4        9230FFFE                        outc    r1,-2[r3]
FFFFFFFFFFFFC384        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFBEC8        BE00016A                        bra             dcx4
FFFFFFFFFFFFC388        E69A0000                ; SETLO
FFFFFFFFFFFFBECC                                 dcx3:
FFFFFFFFFFFFC38C        EE800003                ; SETMID
FFFFFFFFFFFFBECC        B010090A                        beqi    r1,#'\n',dclf   ; linefeed ?
FFFFFFFFFFFFC390        6A0D102D                        lea             r4,TEXTREG
FFFFFFFFFFFFBED0        04009009                        or              r4,r0,r1                ; save r1 in r4
FFFFFFFFFFFFC394        82428000                        inch    r5,TEXT_COLS[r4]
FFFFFFFFFFFFBED4        31FFEF37                        call    CalcScreenLoc   ; r1 = screen location
FFFFFFFFFFFFC398        BE12FF04                        bltu    r1,r5,dcx5
FFFFFFFFFFFFBED8        04008C09                        or              r3,r0,r1                ; r3 = screen location
FFFFFFFFFFFFC39C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFBEDC        04020409                        or              r1,r0,r4                ; restore r1
FFFFFFFFFFFFC3A0        31FFF063                        call    AsciiToScreen
FFFFFFFFFFFFBEE0        31FFEF2B                        call    AsciiToScreen   ; convert ascii char to screen char
FFFFFFFFFFFFC3A4        9230FFFE                        outc    r1,-2[r3]
FFFFFFFFFFFFBEE4        92308000                        outc    r1,[r3]
FFFFFFFFFFFFC3A8        BE0001CA                        bra             dcx4
FFFFFFFFFFFFBEE8        31FFEFC4                        call    IncCursorPos
FFFFFFFFFFFFC3AC                                 dcx3:
FFFFFFFFFFFFBEEC        BE00004A                        bra             dcx4
FFFFFFFFFFFFC3AC        B0100C0A                        beqi    r1,#'\n',dclf   ; linefeed ?
FFFFFFFFFFFFBEF0                                 dclf:
FFFFFFFFFFFFC3B0        02120009                        mov             r4,r1                   ; save r1 in r4
FFFFFFFFFFFFBEF0        31FFEFD2                        call    IncCursorRow
FFFFFFFFFFFFC3B4        31FFF06F                        call    CalcScreenLoc   ; r1 = screen location
FFFFFFFFFFFFBEF4                                 dcx4:
FFFFFFFFFFFFC3B8        02118009                        mov             r3,r1                   ; r3 = screen location
FFFFFFFFFFFFBEF4        47EF8028                        lw              lr,40[sp]
FFFFFFFFFFFFC3BC        02408009                        mov             r1,r4                   ; restore r1
FFFFFFFFFFFFBEF8        47E28020                        lw              r5,32[sp]
FFFFFFFFFFFFC3C0        31FFF063                        call    AsciiToScreen   ; convert ascii char to screen char
FFFFFFFFFFFFBEFC        47E20018                        lw              r4,24[sp]
FFFFFFFFFFFFC3C4        92308000                        outc    r1,[r3]
FFFFFFFFFFFFBF00        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFC3C8        42009410                        lc              r1,CharColor
FFFFFFFFFFFFBF04        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFC3CC        E6810000                ; SETLO
FFFFFFFFFFFFBF08        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC3D0        6A3D0429                        outc    r1,0x10000[r3]
FFFFFFFFFFFFBF0C        37EF8030                        ret             #48
FFFFFFFFFFFFC3D4        31FFF0FF                        call    IncCursorPos
 
FFFFFFFFFFFFC3D8        BE00004A                        bra             dcx4
 
FFFFFFFFFFFFC3DC                                 dclf:
 
FFFFFFFFFFFFC3DC        31FFF10D                        call    IncCursorRow
 
FFFFFFFFFFFFC3E0                                 dcx4:
 
FFFFFFFFFFFFC3E0        47EF8028                        lw              lr,40[sp]
 
FFFFFFFFFFFFC3E4        47E28020                        lw              r5,32[sp]
 
FFFFFFFFFFFFC3E8        47E20018                        lw              r4,24[sp]
 
FFFFFFFFFFFFC3EC        47E18010                        lw              r3,16[sp]
 
FFFFFFFFFFFFC3F0        47E10008                        lw              r2,8[sp]
 
FFFFFFFFFFFFC3F4        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFC3F8        37EF8030                        ret             #48
 
 
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Increment the cursor position, scroll the screen if needed.
                                                 ; Increment the cursor position, scroll the screen if needed.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBF10                                 IncCursorPos:
FFFFFFFFFFFFC3FC                                 IncCursorPos:
FFFFFFFFFFFFBF10        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC3FC        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBF14        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC400        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBF18        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC404        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBF1C        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC408        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBF20        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFC40C        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBF24        42009418                        lc              r1,CursorCol
FFFFFFFFFFFFC410        4A009418                        lbu             r1,CursorCol
FFFFFFFFFFFFBF28        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFC414        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFBF2C        62009418                        sc              r1,CursorCol
FFFFFFFFFFFFC418        60009418                        sb              r1,CursorCol
FFFFFFFFFFFFBF30        E69A0000                ; SETLO
FFFFFFFFFFFFC41C        E69A0000                ; SETLO
FFFFFFFFFFFFBF34        EE800003                ; SETMID
FFFFFFFFFFFFC420        EE800003                ; SETMID
FFFFFFFFFFFFBF38        6A0D0821                        inch    r2,TEXTREG+TEXT_COLS
FFFFFFFFFFFFC424        6A0D0821                        inch    r2,TEXTREG+TEXT_COLS
FFFFFFFFFFFFBF3C        BE110246                        bleu    r1,r2,icc1
FFFFFFFFFFFFC428        BE110246                        bleu    r1,r2,icc1
FFFFFFFFFFFFBF40        62001418                        sc              r0,CursorCol            ; column = 0
FFFFFFFFFFFFC42C        60001418                        sb              r0,CursorCol            ; column = 0
FFFFFFFFFFFFBF44        BE0000CA                        bra             icr1
FFFFFFFFFFFFC430        BE0000CA                        bra             icr1
FFFFFFFFFFFFBF48                                 IncCursorRow:
FFFFFFFFFFFFC434                                 IncCursorRow:
FFFFFFFFFFFFBF48        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC434        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFBF4C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC438        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBF50        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC43C        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBF54        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFC440        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFBF58        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFC444        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFBF5C                                 icr1:
FFFFFFFFFFFFC448                                 icr1:
FFFFFFFFFFFFBF5C        42009416                        lc              r1,CursorRow
FFFFFFFFFFFFC448        4A009417                        lbu             r1,CursorRow
FFFFFFFFFFFFBF60        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFC44C        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFBF64        62009416                        sc              r1,CursorRow
FFFFFFFFFFFFC450        60009417                        sb              r1,CursorRow
FFFFFFFFFFFFBF68        E69A0002                ; SETLO
FFFFFFFFFFFFC454        E69A0002                ; SETLO
FFFFFFFFFFFFBF6C        EE800003                ; SETMID
FFFFFFFFFFFFC458        EE800003                ; SETMID
FFFFFFFFFFFFBF70        6A0D0821                        inch    r2,TEXTREG+TEXT_ROWS
FFFFFFFFFFFFC45C        6A0D0821                        inch    r2,TEXTREG+TEXT_ROWS
FFFFFFFFFFFFBF74        BE110086                        bleu    r1,r2,icc1
FFFFFFFFFFFFC460        BE110086                        bleu    r1,r2,icc1
FFFFFFFFFFFFBF78        0E210001                        subui   r2,r2,#1                        ; backup the cursor row, we are scrolling up
FFFFFFFFFFFFC464        0E210001                        subui   r2,r2,#1                        ; backup the cursor row, we are scrolling up
FFFFFFFFFFFFBF7C        62011416                        sc              r2,CursorRow
FFFFFFFFFFFFC468        60011417                        sb              r2,CursorRow
FFFFFFFFFFFFBF80        31FFEEF6                        call    ScrollUp
FFFFFFFFFFFFC46C        31FFF02E                        call    ScrollUp
FFFFFFFFFFFFBF84                                 icc1:
FFFFFFFFFFFFC470                                 icc1:
FFFFFFFFFFFFBF84        31FFEF37                        call    CalcScreenLoc
FFFFFFFFFFFFC470        31FFF06F                        call    CalcScreenLoc
FFFFFFFFFFFFBF88        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFC474        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFBF8C        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFC478        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFBF90        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFC47C        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBF94        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC480        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBF98        37EF8020                        ret             #32
FFFFFFFFFFFFC484        37EF8020                        ret             #32
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Display a string on the screen.
                                                 ; Display a string on the screen.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFBF9C                                 DisplayString:
FFFFFFFFFFFFC488                                 DisplayString:
FFFFFFFFFFFFBF9C        0DEF0018                        subi    sp,sp,#24
FFFFFFFFFFFFC488        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFBFA0        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC48C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBFA4        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFC490        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFBFA8        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFC494        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFBFAC        02110009                        mov             r2,r1                   ; r2 = pointer to string
FFFFFFFFFFFFC498        02110009                        mov             r2,r1                   ; r2 = pointer to string
FFFFFFFFFFFFBFB0                                 dspj1:
FFFFFFFFFFFFC49C                                 dspj1:
FFFFFFFFFFFFBFB0        4A208000                        lbu             r1,[r2]                 ; move string char into r1
FFFFFFFFFFFFC49C        4A208000                        lbu             r1,[r2]                 ; move string char into r1
FFFFFFFFFFFFBFB4        0A210001                        addui   r2,r2,#1                ; increment pointer
FFFFFFFFFFFFC4A0        0A210001                        addui   r2,r2,#1                ; increment pointer
FFFFFFFFFFFFBFB8        BE100068                        beq             r1,r0,dsret             ; is it end of string ?
FFFFFFFFFFFFC4A4        BE100068                        beq             r1,r0,dsret             ; is it end of string ?
FFFFFFFFFFFFBFBC        31FFEF47                        call    DisplayChar             ; display character
FFFFFFFFFFFFC4A8        31FFF07F                        call    DisplayChar             ; display character
FFFFFFFFFFFFBFC0        BE007F8A                        bra             dspj1                   ; go back for next character
FFFFFFFFFFFFC4AC        BE007F8A                        bra             dspj1                   ; go back for next character
FFFFFFFFFFFFBFC4                                 dsret:
FFFFFFFFFFFFC4B0                                 dsret:
FFFFFFFFFFFFBFC4        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFC4B0        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFBFC8        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFC4B4        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFBFCC        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC4B8        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFBFD0        37EF8018                        ret             #24
FFFFFFFFFFFFC4BC        37EF8018                        ret             #24
 
 
FFFFFFFFFFFFBFD4                                 DisplayStringCRLF:
FFFFFFFFFFFFC4C0                                 DisplayStringCRLF:
FFFFFFFFFFFFBFD4        0FEF0008                        subui   r30,r30,#8
FFFFFFFFFFFFC4C0        0FEF0008                        subui   r30,r30,#8
FFFFFFFFFFFFBFD8        67EF8000                        sw              r31,[r30]
FFFFFFFFFFFFC4C4        67EF8000                        sw              r31,[r30]
FFFFFFFFFFFFBFDC        31FFEFE7                        call    DisplayString
FFFFFFFFFFFFC4C8        31FFF122                        call    DisplayString
FFFFFFFFFFFFBFE0        47EF8000                        lw              r31,[r30]
FFFFFFFFFFFFC4CC        47EF8000                        lw              r31,[r30]
FFFFFFFFFFFFBFE4        0BEF0008                        addui   r30,r30,#8
FFFFFFFFFFFFC4D0        0BEF0008                        addui   r30,r30,#8
 
 
FFFFFFFFFFFFBFE8                                 CRLF:
FFFFFFFFFFFFC4D4                                 CRLF:
FFFFFFFFFFFFBFE8        0FEF0010                        subui   r30,r30,#16
FFFFFFFFFFFFC4D4        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFBFEC        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC4D8        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFBFF0        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFC4DC        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFBFF4        E040000D                        setlo   r1,#'\r'
FFFFFFFFFFFFC4E0        E040000D                        setlo   r1,#'\r'
FFFFFFFFFFFFBFF8        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFC4E4        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFBFFC        E040000A                        setlo   r1,#'\n'
FFFFFFFFFFFFC4E8        E040000A                        setlo   r1,#'\n'
FFFFFFFFFFFFC000        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFC4EC        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFC004        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFC4F0        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFC008        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC4F4        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC00C        37EF8010                        ret             #16
FFFFFFFFFFFFC4F8        37EF8010                        ret             #16
 
 
 
                                                 ; Call the Tiny BASIC routine to display a number
 
                                                 ;
 
FFFFFFFFFFFFC4FC                                 DisplayNum:
 
FFFFFFFFFFFFC4FC        33FFFCCC                        jmp             PRTNUM
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Display nybble in r1
                                                 ; Display nybble in r1
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC010                                 DisplayNybble:
FFFFFFFFFFFFC500                                 DisplayNybble:
FFFFFFFFFFFFC010        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFC500        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFC014        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC504        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC018        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFC508        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFC01C        1410800F                        andi    r1,r1,#0x0F
FFFFFFFFFFFFC50C        1410800F                        andi    r1,r1,#0x0F
FFFFFFFFFFFFC020        0A108030                        addui   r1,r1,#'0'
FFFFFFFFFFFFC510        0A108030                        addui   r1,r1,#'0'
FFFFFFFFFFFFC024        AC100239                        bleui   r1,#'9',dispnyb1
FFFFFFFFFFFFC514        AC100239                        bleui   r1,#'9',dispnyb1
FFFFFFFFFFFFC028        0A108007                        addui   r1,r1,#7
FFFFFFFFFFFFC518        0A108007                        addui   r1,r1,#7
FFFFFFFFFFFFC02C                                 dispnyb1:
FFFFFFFFFFFFC51C                                 dispnyb1:
FFFFFFFFFFFFC02C        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFC51C        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFC030        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFC520        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFC034        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC524        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC038        37EF8010                        ret             #16
FFFFFFFFFFFFC528        37EF8010                        ret             #16
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Display the byte in r1
                                                 ; Display the byte in r1
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC03C                                 DisplayByte:
FFFFFFFFFFFFC52C                                 DisplayByte:
FFFFFFFFFFFFC03C        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFC52C        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFC040        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC530        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC044        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFC534        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFC048        06108804                        rori    r1,r1,#4
FFFFFFFFFFFFC538        06108804                        rori    r1,r1,#4
FFFFFFFFFFFFC04C        31FFF004                        call    DisplayNybble
FFFFFFFFFFFFC53C        31FFF140                        call    DisplayNybble
FFFFFFFFFFFFC050        06108802                        roli    r1,r1,#4
FFFFFFFFFFFFC540        06108802                        roli    r1,r1,#4
FFFFFFFFFFFFC054        31FFF004                        call    DisplayNybble
FFFFFFFFFFFFC544        31FFF140                        call    DisplayNybble
FFFFFFFFFFFFC058        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFC548        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFC05C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC54C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC060        37EF8010                        ret             #16
FFFFFFFFFFFFC550        37EF8010                        ret             #16
 
 
 
                                                 ;------------------------------------------------------------------------------
 
                                                 ; Display the char in r1
 
                                                 ;------------------------------------------------------------------------------
 
                                                 ;
 
FFFFFFFFFFFFC554                                 DisplayCharr:
 
FFFFFFFFFFFFC554        0FEF0010                        subui   sp,sp,#16
 
FFFFFFFFFFFFC558        67E08000                        sw              r1,[sp]
 
FFFFFFFFFFFFC55C        67EF8008                        sw              lr,8[sp]
 
FFFFFFFFFFFFC560        06109004                        rori    r1,r1,#8
 
FFFFFFFFFFFFC564        31FFF14B                        call    DisplayByte
 
FFFFFFFFFFFFC568        06109002                        roli    r1,r1,#8
 
FFFFFFFFFFFFC56C        31FFF14B                        call    DisplayByte
 
FFFFFFFFFFFFC570        47EF8008                        lw              lr,8[sp]
 
FFFFFFFFFFFFC574        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFC578        37EF8010                        ret             #16
 
 
 
                                                 ;------------------------------------------------------------------------------
 
                                                 ; Display the half-word in r1
 
                                                 ;------------------------------------------------------------------------------
 
                                                 ;
 
FFFFFFFFFFFFC57C                                 DisplayHalf:
 
FFFFFFFFFFFFC57C        0FEF0010                        subui   sp,sp,#16
 
FFFFFFFFFFFFC580        67E08000                        sw              r1,[sp]
 
FFFFFFFFFFFFC584        67EF8008                        sw              lr,8[sp]
 
FFFFFFFFFFFFC588        0610A004                        rori    r1,r1,#16
 
FFFFFFFFFFFFC58C        31FFF155                        call    DisplayCharr
 
FFFFFFFFFFFFC590        0610A002                        roli    r1,r1,#16
 
FFFFFFFFFFFFC594        31FFF155                        call    DisplayCharr
 
FFFFFFFFFFFFC598        47EF8008                        lw              lr,8[sp]
 
FFFFFFFFFFFFC59C        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFC5A0        37EF8010                        ret             #16
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Display the 64 bit word in r1
                                                 ; Display the 64 bit word in r1
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC064                                 DisplayWord:
FFFFFFFFFFFFC5A4                                 DisplayWord:
FFFFFFFFFFFFC064        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFC5A4        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFC068        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC5A8        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC06C        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFC5AC        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFC070        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFC5B0        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFC074        E0C00007                        setlo   r3,#7
FFFFFFFFFFFFC5B4        E0C00007                        setlo   r3,#7
FFFFFFFFFFFFC078                                 dspwd1:
FFFFFFFFFFFFC5B8                                 dspwd1:
FFFFFFFFFFFFC078        06109002                        roli    r1,r1,#8
FFFFFFFFFFFFC5B8        06109002                        roli    r1,r1,#8
FFFFFFFFFFFFC07C        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFC5BC        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFC080        BE01FFCF                        loop    r3,dspwd1
FFFFFFFFFFFFC5C0        BE01FFCF                        loop    r3,dspwd1
FFFFFFFFFFFFC084        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFC5C4        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFC088        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFC5C8        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFC08C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC5CC        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC090        37EF8018                        ret             #24
FFFFFFFFFFFFC5D0        37EF8018                        ret             #24
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Display memory pointed to by r2.
                                                 ; Display memory pointed to by r2.
                                                 ; destroys r1,r3
                                                 ; destroys r1,r3
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC094                                 DisplayMem:
FFFFFFFFFFFFC5D4                                 DisplayMemB:
FFFFFFFFFFFFC094        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFC5D4        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFC098        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC5D8        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC09C        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFC5DC        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFC0A0        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFC5E0        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFC0A4        E040003A                        setlo   r1,#':'
FFFFFFFFFFFFC5E4        E040003A                        setlo   r1,#':'
FFFFFFFFFFFFC0A8        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFC5E8        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFC0AC        02208009                        mov             r1,r2
FFFFFFFFFFFFC5EC        02208009                        mov             r1,r2
FFFFFFFFFFFFC0B0        31FFF019                        call    DisplayWord
FFFFFFFFFFFFC5F0        31FFF169                        call    DisplayWord
FFFFFFFFFFFFC0B4        E0C00007                        setlo   r3,#7
FFFFFFFFFFFFC5F4        E0C00007                        setlo   r3,#7
FFFFFFFFFFFFC0B8                                 dspmem1:
FFFFFFFFFFFFC5F8                                 dspmem1:
FFFFFFFFFFFFC0B8        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFC5F8        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFC0BC        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFC5FC        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFC0C0        40208000                        lb              r1,[r2]
FFFFFFFFFFFFC600        4A208000                        lbu             r1,[r2]
FFFFFFFFFFFFC0C4        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFC604        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFC0C8        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFC608        0A210001                        addui   r2,r2,#1
FFFFFFFFFFFFC0CC        BE01FF6F                        loop    r3,dspmem1
FFFFFFFFFFFFC60C        BE01FF6F                        loop    r3,dspmem1
FFFFFFFFFFFFC0D0        31FFEFFA                        call    CRLF
FFFFFFFFFFFFC610        31FFF135                        call    CRLF
FFFFFFFFFFFFC0D4        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFC614        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFC0D8        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFC618        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFC0DC        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC61C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC0E0        37EF8018                        ret             #24
FFFFFFFFFFFFC620        37EF8018                        ret             #24
 
 
 
FFFFFFFFFFFFC624                                 DisplayMemC:
 
FFFFFFFFFFFFC624        0FEF0018                        subui   sp,sp,#24
 
FFFFFFFFFFFFC628        67E08000                        sw              r1,[sp]
 
FFFFFFFFFFFFC62C        67E18008                        sw              r3,8[sp]
 
FFFFFFFFFFFFC630        67EF8010                        sw              lr,16[sp]
 
FFFFFFFFFFFFC634        E040003A                        setlo   r1,#':'
 
FFFFFFFFFFFFC638        31FFF07F                        call    DisplayChar
 
FFFFFFFFFFFFC63C        02208009                        mov             r1,r2
 
FFFFFFFFFFFFC640        31FFF169                        call    DisplayWord
 
FFFFFFFFFFFFC644        E0C00003                        setlo   r3,#3
 
FFFFFFFFFFFFC648                                 dspmemc1:
 
FFFFFFFFFFFFC648        E0400020                        setlo   r1,#' '
 
FFFFFFFFFFFFC64C        31FFF07F                        call    DisplayChar
 
FFFFFFFFFFFFC650        4C208000                        lcu             r1,[r2]
 
FFFFFFFFFFFFC654        31FFF155                        call    DisplayCharr
 
FFFFFFFFFFFFC658        0A210002                        addui   r2,r2,#2
 
FFFFFFFFFFFFC65C        BE01FF6F                        loop    r3,dspmemc1
 
FFFFFFFFFFFFC660        31FFF135                        call    CRLF
 
FFFFFFFFFFFFC664        47EF8010                        lw              lr,16[sp]
 
FFFFFFFFFFFFC668        47E18008                        lw              r3,8[sp]
 
FFFFFFFFFFFFC66C        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFC670        37EF8018                        ret             #24
 
 
 
FFFFFFFFFFFFC674                                 DisplayMemW:
 
FFFFFFFFFFFFC674        0FEF0018                        subui   sp,sp,#24
 
FFFFFFFFFFFFC678        67E08000                        sw              r1,[sp]
 
FFFFFFFFFFFFC67C        67EF8010                        sw              lr,16[sp]
 
FFFFFFFFFFFFC680        E040003A                        setlo   r1,#':'
 
FFFFFFFFFFFFC684        31FFF07F                        call    DisplayChar
 
FFFFFFFFFFFFC688        02208009                        mov             r1,r2
 
FFFFFFFFFFFFC68C        31FFF169                        call    DisplayWord
 
FFFFFFFFFFFFC690        E0400020                        setlo   r1,#' '
 
FFFFFFFFFFFFC694        31FFF07F                        call    DisplayChar
 
FFFFFFFFFFFFC698        46208000                        lw              r1,[r2]
 
FFFFFFFFFFFFC69C        31FFF169                        call    DisplayWord
 
FFFFFFFFFFFFC6A0        0A210008                        addui   r2,r2,#8
 
FFFFFFFFFFFFC6A4        31FFF135                        call    CRLF
 
FFFFFFFFFFFFC6A8        47EF8010                        lw              lr,16[sp]
 
FFFFFFFFFFFFC6AC        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFC6B0        37EF8018                        ret             #24
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Converts binary number in r1 into BCD number in r2 and r1.
                                                 ; Converts binary number in r1 into BCD number in r2 and r1.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC0E4                                 BinToBCD:
FFFFFFFFFFFFC6B4                                 BinToBCD:
FFFFFFFFFFFFC0E4        0FEF0030                        subui   sp,sp,#48
FFFFFFFFFFFFC6B4        0FEF0030                        subui   sp,sp,#48
FFFFFFFFFFFFC0E8        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFC6B8        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFC0EC        67E20008                        sw              r4,8[sp]
FFFFFFFFFFFFC6BC        67E20008                        sw              r4,8[sp]
FFFFFFFFFFFFC0F0        67E28010                        sw              r5,16[sp]
FFFFFFFFFFFFC6C0        67E28010                        sw              r5,16[sp]
FFFFFFFFFFFFC0F4        67E30018                        sw              r6,24[sp]
FFFFFFFFFFFFC6C4        67E30018                        sw              r6,24[sp]
FFFFFFFFFFFFC0F8        67E38020                        sw              r7,32[sp]
FFFFFFFFFFFFC6C8        67E38020                        sw              r7,32[sp]
FFFFFFFFFFFFC0FC        67E40028                        sw              r8,40[sp]
FFFFFFFFFFFFC6CC        67E40028                        sw              r8,40[sp]
FFFFFFFFFFFFC100        E080000A                        setlo   r2,#10
FFFFFFFFFFFFC6D0        E080000A                        setlo   r2,#10
FFFFFFFFFFFFC104        E2000013                        setlo   r8,#19          ; number of digits to produce - 1
FFFFFFFFFFFFC6D4        E2000013                        setlo   r8,#19          ; number of digits to produce - 1
FFFFFFFFFFFFC108                                 bta1:
FFFFFFFFFFFFC6D8                                 bta1:
FFFFFFFFFFFFC108        04110C1C                        mod             r3,r1,r2
FFFFFFFFFFFFC6D8        04110C1C                        modu    r3,r1,r2
FFFFFFFFFFFFC10C        0631F800                        shli    r3,r3,#60       ; shift result to uppermost bits
FFFFFFFFFFFFC6DC        0631F800                        shli    r3,r3,#60       ; shift result to uppermost bits
FFFFFFFFFFFFC110        0653F800                        shli    r7,r5,#60       ; copy low order nybble of r5 to r4 topmost nybble
FFFFFFFFFFFFC6E0        0653F800                        shli    r7,r5,#60       ; copy low order nybble of r5 to r4 topmost nybble
FFFFFFFFFFFFC114        06420801                        shrui   r4,r4,#4
FFFFFFFFFFFFC6E4        06420801                        shrui   r4,r4,#4
FFFFFFFFFFFFC118        04439009                        or              r4,r4,r7
FFFFFFFFFFFFC6E8        04439009                        or              r4,r4,r7
FFFFFFFFFFFFC11C        06528801                        shrui   r5,r5,#4
FFFFFFFFFFFFC6EC        06528801                        shrui   r5,r5,#4
FFFFFFFFFFFFC120        04519409                        or              r5,r5,r3        ; copy new bcd digit into uppermost bits of r5
FFFFFFFFFFFFC6F0        04519409                        or              r5,r5,r3        ; copy new bcd digit into uppermost bits of r5
FFFFFFFFFFFFC124        1C108000                        divui   r1,r1,r2        ; r1=r1/10
FFFFFFFFFFFFC6F4        1E108000                        divui   r1,r1,r2        ; r1=r1/10
FFFFFFFFFFFFC128        BE047F0F                        loop    r8,bta1
FFFFFFFFFFFFC6F8        BE047F0F                        loop    r8,bta1
FFFFFFFFFFFFC12C        06426001                        shrui   r4,r4,#48       ; right align number in register
FFFFFFFFFFFFC6FC        06426001                        shrui   r4,r4,#48       ; right align number in register
FFFFFFFFFFFFC130        06532000                        shli    r6,r5,#16
FFFFFFFFFFFFC700        06532000                        shli    r6,r5,#16
FFFFFFFFFFFFC134        04431009                        or              r4,r4,r6        ; copy bits into r4
FFFFFFFFFFFFC704        04431009                        or              r4,r4,r6        ; copy bits into r4
FFFFFFFFFFFFC138        0652E001                        shrui   r5,r5,#48
FFFFFFFFFFFFC708        0652E001                        shrui   r5,r5,#48
FFFFFFFFFFFFC13C        02408009                        mov             r1,r4
FFFFFFFFFFFFC70C        02408009                        mov             r1,r4
FFFFFFFFFFFFC140        02510009                        mov             r2,r5
FFFFFFFFFFFFC710        02510009                        mov             r2,r5
FFFFFFFFFFFFC144        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFC714        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFC148        47E20008                        lw              r4,8[sp]
FFFFFFFFFFFFC718        47E20008                        lw              r4,8[sp]
FFFFFFFFFFFFC14C        47E28010                        lw              r5,16[sp]
FFFFFFFFFFFFC71C        47E28010                        lw              r5,16[sp]
FFFFFFFFFFFFC150        47E30018                        lw              r6,24[sp]
FFFFFFFFFFFFC720        47E30018                        lw              r6,24[sp]
FFFFFFFFFFFFC154        47E38020                        lw              r7,32[sp]
FFFFFFFFFFFFC724        47E38020                        lw              r7,32[sp]
FFFFFFFFFFFFC158        47E40028                        lw              r8,40[sp]
FFFFFFFFFFFFC728        47E40028                        lw              r8,40[sp]
FFFFFFFFFFFFC15C        37EF8030                        ret             #48
FFFFFFFFFFFFC72C        37EF8030                        ret             #48
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Converts BCD number in r1 into Ascii number in r2 and r1.
                                                 ; Converts BCD number in r1 into Ascii number in r2 and r1.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC160                                 BCDToAscii:
FFFFFFFFFFFFC730                                 BCDToAscii:
FFFFFFFFFFFFC160        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC730        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFC164        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFC734        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFC168        67E20008                        sw              r4,8[sp]
FFFFFFFFFFFFC738        67E20008                        sw              r4,8[sp]
FFFFFFFFFFFFC16C        67E28010                        sw              r5,16[sp]
FFFFFFFFFFFFC73C        67E28010                        sw              r5,16[sp]
FFFFFFFFFFFFC170        67E40018                        sw              r8,24[sp]
FFFFFFFFFFFFC740        67E40018                        sw              r8,24[sp]
FFFFFFFFFFFFC174        E200000F                        setlo   r8,#15
FFFFFFFFFFFFC744        E200000F                        setlo   r8,#15
FFFFFFFFFFFFC178                                 bta2:
FFFFFFFFFFFFC748                                 bta2:
FFFFFFFFFFFFC178        1411000F                        andi    r2,r1,#0x0F
FFFFFFFFFFFFC748        1411000F                        andi    r2,r1,#0x0F
FFFFFFFFFFFFC17C        16210030                        ori             r2,r2,#0x30
FFFFFFFFFFFFC74C        16210030                        ori             r2,r2,#0x30
FFFFFFFFFFFFC180        06217000                        shli    r2,r2,#56
FFFFFFFFFFFFC750        06217000                        shli    r2,r2,#56
FFFFFFFFFFFFC184        06421001                        shrui   r4,r4,#8
FFFFFFFFFFFFC754        06421001                        shrui   r4,r4,#8
FFFFFFFFFFFFC188        0632F000                        shli    r5,r3,#56
FFFFFFFFFFFFC758        0632F000                        shli    r5,r3,#56
FFFFFFFFFFFFC18C        04429009                        or              r4,r4,r5
FFFFFFFFFFFFC75C        04429009                        or              r4,r4,r5
FFFFFFFFFFFFC190        06319001                        shrui   r3,r3,#8
FFFFFFFFFFFFC760        06319001                        shrui   r3,r3,#8
FFFFFFFFFFFFC194        04310C09                        or              r3,r3,r2
FFFFFFFFFFFFC764        04310C09                        or              r3,r3,r2
FFFFFFFFFFFFC198        06108801                        shrui   r1,r1,#4
FFFFFFFFFFFFC768        06108801                        shrui   r1,r1,#4
FFFFFFFFFFFFC19C        BE047EEF                        loop    r8,bta2
FFFFFFFFFFFFC76C        BE047EEF                        loop    r8,bta2
FFFFFFFFFFFFC1A0        02408009                        mov             r1,r4
FFFFFFFFFFFFC770        02408009                        mov             r1,r4
FFFFFFFFFFFFC1A4        02310009                        mov             r2,r3
FFFFFFFFFFFFC774        02310009                        mov             r2,r3
FFFFFFFFFFFFC1A8        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFC778        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFC1AC        47E20008                        lw              r4,8[sp]
FFFFFFFFFFFFC77C        47E20008                        lw              r4,8[sp]
FFFFFFFFFFFFC1B0        47E28010                        lw              r5,16[sp]
FFFFFFFFFFFFC780        47E28010                        lw              r5,16[sp]
FFFFFFFFFFFFC1B4        47E40018                        lw              r8,24[sp]
FFFFFFFFFFFFC784        47E40018                        lw              r8,24[sp]
FFFFFFFFFFFFC1B8        37EF8020                        ret             #32
FFFFFFFFFFFFC788        37EF8020                        ret             #32
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Convert a binary number into a 20 character ascii string.
                                                 ; Convert a binary number into a 20 character ascii string.
                                                 ; r1 = number to convert
                                                 ; r1 = number to convert
                                                 ; r2 = address of string buffer
                                                 ; r2 = address of string buffer
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC1BC                                 BinToStr:
FFFFFFFFFFFFC78C                                 BinToStr:
FFFFFFFFFFFFC1BC        0FEF0038                        subui   sp,sp,#56
FFFFFFFFFFFFC78C        0FEF0038                        subui   sp,sp,#56
FFFFFFFFFFFFC1C0        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFC790        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFC1C4        67E38008                        sw              r7,8[sp]
FFFFFFFFFFFFC794        67E38008                        sw              r7,8[sp]
FFFFFFFFFFFFC1C8        67E40010                        sw              r8,16[sp]
FFFFFFFFFFFFC798        67E40010                        sw              r8,16[sp]
FFFFFFFFFFFFC1CC        67E48018                        sw              r9,24[sp]
FFFFFFFFFFFFC79C        67E48018                        sw              r9,24[sp]
FFFFFFFFFFFFC1D0        67E50020                        sw              r10,32[sp]
FFFFFFFFFFFFC7A0        67E50020                        sw              r10,32[sp]
FFFFFFFFFFFFC1D4        67E58028                        sw              r11,40[sp]
FFFFFFFFFFFFC7A4        67E58028                        sw              r11,40[sp]
FFFFFFFFFFFFC1D8        67EF8030                        sw              lr,48[sp]
FFFFFFFFFFFFC7A8        67EF8030                        sw              lr,48[sp]
FFFFFFFFFFFFC1DC        02258009                        mov             r11,r2
FFFFFFFFFFFFC7AC        02258009                        mov             r11,r2
FFFFFFFFFFFFC1E0        31FFF039                        call    BinToBCD
FFFFFFFFFFFFC7B0        31FFF1AD                        call    BinToBCD
FFFFFFFFFFFFC1E4        02250009                        mov             r10,r2  ; save off r2
FFFFFFFFFFFFC7B4        02250009                        mov             r10,r2  ; save off r2
FFFFFFFFFFFFC1E8        31FFF058                        call    BCDToAscii
FFFFFFFFFFFFC7B8        31FFF1CC                        call    BCDToAscii
FFFFFFFFFFFFC1EC        E2400001                        setlo   r9,#1
FFFFFFFFFFFFC7BC        E2400001                        setlo   r9,#1
FFFFFFFFFFFFC1F0                                 btos3:
FFFFFFFFFFFFC7C0                                 btos3:
FFFFFFFFFFFFC1F0        E2000007                        setlo   r8,#7
FFFFFFFFFFFFC7C0        E2000007                        setlo   r8,#7
FFFFFFFFFFFFC1F4                                 btos1:
FFFFFFFFFFFFC7C4                                 btos1:
FFFFFFFFFFFFC1F4        06938600                        shli    r7,r9,#3
FFFFFFFFFFFFC7C4        06938600                        shli    r7,r9,#3
FFFFFFFFFFFFC1F8        0A738000                        addui   r7,r7,r8
FFFFFFFFFFFFC7C8        0A738000                        addui   r7,r7,r8
FFFFFFFFFFFFC1FC        0A738004                        addui   r7,r7,#4
FFFFFFFFFFFFC7CC        0A738004                        addui   r7,r7,#4
FFFFFFFFFFFFC200        141180FF                        andi    r3,r1,#0xff
FFFFFFFFFFFFC7D0        141180FF                        andi    r3,r1,#0xff
FFFFFFFFFFFFC204        6A758C10                        sb              r3,[r7+r11]
FFFFFFFFFFFFC7D4        6A758C10                        sb              r3,[r7+r11]
FFFFFFFFFFFFC208        06109001                        shrui   r1,r1,#8
FFFFFFFFFFFFC7D8        06109001                        shrui   r1,r1,#8
FFFFFFFFFFFFC20C        BE047F4F                        loop    r8,btos1
FFFFFFFFFFFFC7DC        BE047F4F                        loop    r8,btos1
FFFFFFFFFFFFC210        02208009                        mov             r1,r2
FFFFFFFFFFFFC7E0        02208009                        mov             r1,r2
FFFFFFFFFFFFC214        BE04FEEF                        loop    r9,btos3
FFFFFFFFFFFFC7E4        BE04FEEF                        loop    r9,btos3
                                                 ; the last four digits
                                                 ; the last four digits
FFFFFFFFFFFFC218        02A08009                        mov             r1,r10  ; get back r2
FFFFFFFFFFFFC7E8        02A08009                        mov             r1,r10  ; get back r2
FFFFFFFFFFFFC21C        31FFF058                        call    BCDToAscii
FFFFFFFFFFFFC7EC        31FFF1CC                        call    BCDToAscii
FFFFFFFFFFFFC220        E2000003                        setlo   r8,#3
FFFFFFFFFFFFC7F0        E2000003                        setlo   r8,#3
FFFFFFFFFFFFC224                                 btos2:
FFFFFFFFFFFFC7F4                                 btos2:
FFFFFFFFFFFFC224        141180FF                        andi    r3,r1,#0xff
FFFFFFFFFFFFC7F4        141180FF                        andi    r3,r1,#0xff
FFFFFFFFFFFFC228        6A858C10                        sb              r3,[r8+r11]
FFFFFFFFFFFFC7F8        6A858C10                        sb              r3,[r8+r11]
FFFFFFFFFFFFC22C        06109001                        shrui   r1,r1,#8
FFFFFFFFFFFFC7FC        06109001                        shrui   r1,r1,#8
FFFFFFFFFFFFC230        BE047FAF                        loop    r8,btos2
FFFFFFFFFFFFC800        BE047FAF                        loop    r8,btos2
FFFFFFFFFFFFC234        60B00014                        sb              r0,20[r11]      ; null terminate
FFFFFFFFFFFFC804        60B00014                        sb              r0,20[r11]      ; null terminate
FFFFFFFFFFFFC238        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFC808        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFC23C        47E38008                        lw              r7,8[sp]
FFFFFFFFFFFFC80C        47E38008                        lw              r7,8[sp]
FFFFFFFFFFFFC240        47E40010                        lw              r8,16[sp]
FFFFFFFFFFFFC810        47E40010                        lw              r8,16[sp]
FFFFFFFFFFFFC244        47E48018                        lw              r9,24[sp]
FFFFFFFFFFFFC814        47E48018                        lw              r9,24[sp]
FFFFFFFFFFFFC248        47E50020                        lw              r10,32[sp]
FFFFFFFFFFFFC818        47E50020                        lw              r10,32[sp]
FFFFFFFFFFFFC24C        47E58028                        lw              r11,40[sp]
FFFFFFFFFFFFC81C        47E58028                        lw              r11,40[sp]
FFFFFFFFFFFFC250        47EF8030                        lw              lr,48[sp]
FFFFFFFFFFFFC820        47EF8030                        lw              lr,48[sp]
FFFFFFFFFFFFC254        37EF8038                        ret             #56
FFFFFFFFFFFFC824        37EF8038                        ret             #56
 
 
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
 
                                                 ; System Monitor Program
                                                 ;==============================================================================
                                                 ;==============================================================================
FFFFFFFFFFFFC258                                 Monitor:
                                                 ;
FFFFFFFFFFFFC258        E6BEFFF8                ; SETLO
FFFFFFFFFFFFC828                                 Monitor:
FFFFFFFFFFFFC25C        6A0D782D                        lea             sp,STACKTOP0    ; top of stack; reset the stack pointer
FFFFFFFFFFFFC828        E6BEFFF8                ; SETLO
FFFFFFFFFFFFC260        6000141C                        sb              r0,KeybdEcho    ; turn off keyboard echo
FFFFFFFFFFFFC82C        6A0D782D                        lea             sp,STACKTOP0    ; top of stack; reset the stack pointer
FFFFFFFFFFFFC264                                 PromptLn:
FFFFFFFFFFFFC830        6000141C                        sb              r0,KeybdEcho    ; turn off keyboard echo
FFFFFFFFFFFFC264        31FFEFFA                        call    CRLF
FFFFFFFFFFFFC834                                 PromptLn:
FFFFFFFFFFFFC268        E0400024                        setlo   r1,#'$'
FFFFFFFFFFFFC834        31FFF135                        call    CRLF
FFFFFFFFFFFFC26C        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFC838        E0400024                        setlo   r1,#'$'
 
FFFFFFFFFFFFC83C        31FFF07F                        call    DisplayChar
 
 
                                                 ; Get characters until a CR is keyed
                                                 ; Get characters until a CR is keyed
                                                 ;
                                                 ;
FFFFFFFFFFFFC270                                 Prompt3:
FFFFFFFFFFFFC840                                 Prompt3:
FFFFFFFFFFFFC270        31FFEE08                        call    KeybdGetChar
                                                 ;      lw              r1,#2                   ; get keyboard character
FFFFFFFFFFFFC274        B01FFFFF                        beqi    r1,#-1,Prompt3  ; wait for a character
                                                 ;      syscall #417
FFFFFFFFFFFFC278        B010030D                        beqi    r1,#CR,Prompt1
FFFFFFFFFFFFC840        31FFEF07                        call    KeybdGetChar
FFFFFFFFFFFFC27C        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFC844        B01FFFFF                        beqi    r1,#-1,Prompt3  ; wait for a character
FFFFFFFFFFFFC280        BE007F8A                        bra             Prompt3
FFFFFFFFFFFFC848        B010030D                        beqi    r1,#CR,Prompt1
 
FFFFFFFFFFFFC84C        31FFF07F                        call    DisplayChar
 
FFFFFFFFFFFFC850        BE007F8A                        bra             Prompt3
 
 
                                                 ; Process the screen line that the CR was keyed on
                                                 ; Process the screen line that the CR was keyed on
                                                 ;
                                                 ;
FFFFFFFFFFFFC284                                 Prompt1:
FFFFFFFFFFFFC854                                 Prompt1:
FFFFFFFFFFFFC284        62001418                        sc              r0,CursorCol    ; go back to the start of the line
FFFFFFFFFFFFC854        60001418                        sb              r0,CursorCol    ; go back to the start of the line
FFFFFFFFFFFFC288        31FFEF37                        call    CalcScreenLoc   ; r1 = screen memory location
FFFFFFFFFFFFC858        31FFF06F                        call    CalcScreenLoc   ; r1 = screen memory location
FFFFFFFFFFFFC28C        04100C09                        or              r3,r1,r0
FFFFFFFFFFFFC85C        02118009                        mov             r3,r1
FFFFFFFFFFFFC290        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC860        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC294        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC864        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC298        31FFEF33                        call    ScreenToAscii
FFFFFFFFFFFFC868        31FFF06B                        call    ScreenToAscii
FFFFFFFFFFFFC29C        B2100424                        bnei    r1,#'$',Prompt2 ; skip over '$' prompt character
FFFFFFFFFFFFC86C        B2100424                        bnei    r1,#'$',Prompt2 ; skip over '$' prompt character
FFFFFFFFFFFFC2A0        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC870        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC2A4        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC874        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC2A8        31FFEF33                        call    ScreenToAscii
FFFFFFFFFFFFC878        31FFF06B                        call    ScreenToAscii
 
 
                                                 ; Dispatch based on command character
                                                 ; Dispatch based on command character
                                                 ;
                                                 ;
FFFFFFFFFFFFC2AC                                 Prompt2:
FFFFFFFFFFFFC87C                                 Prompt2:
FFFFFFFFFFFFC2AC        B010563A                        beqi    r1,#':',Editmem         ; $: - edit memory
FFFFFFFFFFFFC87C        B0106A3A                        beqi    r1,#':',Editmem         ; $: - edit memory
FFFFFFFFFFFFC2B0        B0106344                        beqi    r1,#'D',Dumpmem         ; $D - dump memory
FFFFFFFFFFFFC880        B0107C44                        beqi    r1,#'D',Dumpmem         ; $D - dump memory
FFFFFFFFFFFFC2B4        B012EF42                        beqi    r1,#'B',CSTART          ; $B - start tiny basic
FFFFFFFFFFFFC884        B0109446                        beqi    r1,#'F',Fillmem         ; $F - fill memory
FFFFFFFFFFFFC2B8        B0105D4A                        beqi    r1,#'J',ExecuteCode     ; $J - execute code
FFFFFFFFFFFFC888                                 Prompt7:
FFFFFFFFFFFFC2BC        B010914C                        beqi    r1,#'L',LoadS19         ; $L - load S19 file
FFFFFFFFFFFFC888        B2100242                        bnei    r1,#'B',Prompt4         ; $B - start tiny basic
FFFFFFFFFFFFC2C0        B010153F                        beqi    r1,#'?',DisplayHelp     ; $? - display help
FFFFFFFFFFFFC88C        33FFF7E0                        jmp             CSTART
FFFFFFFFFFFFC2C4        B0100743                        beqi    r1,#'C',TestCLS         ; $C - clear screen
FFFFFFFFFFFFC890                                 Prompt4:
FFFFFFFFFFFFC2C8        B0100452                        beqi    r1,#'R',RandomLinesCall
FFFFFFFFFFFFC890        B0106F4A                        beqi    r1,#'J',ExecuteCode     ; $J - execute code
FFFFFFFFFFFFC2CC        B012B849                        beqi    r1,#'I',Invaders
FFFFFFFFFFFFC894        B210024C                        bnei    r1,#'L',Prompt9 ; $L - load S19 file
FFFFFFFFFFFFC2D0        B011A350                        beqi    r1,#'P',Piano
FFFFFFFFFFFFC898        33FFF297                        jmp             LoadSector
FFFFFFFFFFFFC2D4        BE007C2A                        bra             Monitor
FFFFFFFFFFFFC89C                                 Prompt9:
 
FFFFFFFFFFFFC89C        B210043F                        bnei    r1,#'?',Prompt10        ; $? - display help
FFFFFFFFFFFFC2D8                                 RandomLinesCall:
FFFFFFFFFFFFC8A0        9A00C910                        lea             r1,HelpMsg
FFFFFFFFFFFFC2D8        31FFF1BC                        call    RandomLines
FFFFFFFFFFFFC8A4        31FFF122                        call    DisplayString
FFFFFFFFFFFFC2DC        BE007BEA                        bra             Monitor
FFFFFFFFFFFFC8A8        33FFF20A                        jmp             Monitor
 
FFFFFFFFFFFFC8AC                                 Prompt10:
FFFFFFFFFFFFC2E0                                 TestCLS:
FFFFFFFFFFFFC8AC        B0100C43                        beqi    r1,#'C',TestCLS         ; $C - clear screen
FFFFFFFFFFFFC2E0        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC8B0        B2100252                        bnei    r1,#'R',Prompt12
FFFFFFFFFFFFC2E4        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC8B4        33FFF235                        jmp             RandomLinesCall
FFFFFFFFFFFFC2E8        31FFEF33                        call    ScreenToAscii
FFFFFFFFFFFFC8B8                                 Prompt12:
FFFFFFFFFFFFC2EC        B21FDB4C                        bnei    r1,#'L',Monitor
FFFFFFFFFFFFC8B8        B2100249                        bnei    r1,#'I',Prompt13
FFFFFFFFFFFFC2F0        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC8BC        33FFF528                        jmp             Invaders
FFFFFFFFFFFFC2F4        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC8C0                                 Prompt13:
FFFFFFFFFFFFC2F8        31FFEF33                        call    ScreenToAscii
FFFFFFFFFFFFC8C0        B2100250                        bnei    r1,#'P',Prompt14
FFFFFFFFFFFFC2FC        B21FD753                        bnei    r1,#'S',Monitor
FFFFFFFFFFFFC8C4        33FFF411                        jmp             Piano
FFFFFFFFFFFFC300        31FFEED9                        call    ClearScreen
FFFFFFFFFFFFC8C8                                 Prompt14:
FFFFFFFFFFFFC304        60001418                        sb              r0,CursorCol
FFFFFFFFFFFFC8C8        B2100254                        bnei    r1,#'T',Prompt15
FFFFFFFFFFFFC308        60001416                        sb              r0,CursorRow
FFFFFFFFFFFFC8CC        31FFEF53                        call    tmp_read
FFFFFFFFFFFFC30C        31FFEF37                        call    CalcScreenLoc
FFFFFFFFFFFFC8D0                                 Prompt15:
FFFFFFFFFFFFC310        BE007A4A                        bra             Monitor
FFFFFFFFFFFFC8D0        33FFF20A                        jmp             Monitor
 
 
FFFFFFFFFFFFC314                                 DisplayHelp:
FFFFFFFFFFFFC8D4                                 RandomLinesCall:
FFFFFFFFFFFFC314        E07FC320                        setlo   r1,HelpMsg
FFFFFFFFFFFFC8D4        31FFF374                        call    RandomLines
FFFFFFFFFFFFC318        31FFEFE7                        call    DisplayString
FFFFFFFFFFFFC8D8        33FFF20A                        jmp             Monitor
FFFFFFFFFFFFC31C        BE0079EA                        bra             Monitor
 
 
FFFFFFFFFFFFC8DC                                 TestCLS:
FFFFFFFFFFFFC320                                        align   16
FFFFFFFFFFFFC8DC        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC320                                 HelpMsg:
FFFFFFFFFFFFC8E0        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC320 70736944203D203F               db      "? = Display help",CR,LF
FFFFFFFFFFFFC8E4        31FFF06B                        call    ScreenToAscii
FFFFFFFFFFFFC328 706C65682079616C
FFFFFFFFFFFFC8E8        B21FD04C                        bnei    r1,#'L',Monitor
FFFFFFFFFFFFC330 203D20534C430A0D               db      "CLS = clear screen",CR,LF
FFFFFFFFFFFFC8EC        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC338 6373207261656C63
FFFFFFFFFFFFC8F0        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC340 203A0A0D6E656572               db      ": = Edit memory bytes",CR,LF
FFFFFFFFFFFFC8F4        31FFF06B                        call    ScreenToAscii
FFFFFFFFFFFFC348 6D2074696445203D
FFFFFFFFFFFFC8F8        B21FCC53                        bnei    r1,#'S',Monitor
FFFFFFFFFFFFC350 79622079726F6D65
FFFFFFFFFFFFC8FC        31FFF011                        call    ClearScreen
FFFFFFFFFFFFC358 3D204C0A0D736574               db      "L = Load S19 file",CR,LF
FFFFFFFFFFFFC900        60001418                        sb              r0,CursorCol
FFFFFFFFFFFFC360 31532064616F4C20
FFFFFFFFFFFFC904        60001417                        sb              r0,CursorRow
FFFFFFFFFFFFC368 0A0D656C69662039
FFFFFFFFFFFFC908        31FFF06F                        call    CalcScreenLoc
FFFFFFFFFFFFC370 706D7544203D2044               db      "D = Dump memory",CR,LF
FFFFFFFFFFFFC90C        33FFF20A                        jmp             Monitor
FFFFFFFFFFFFC378 0D79726F6D656D20
 
FFFFFFFFFFFFC380 617473203D20420A               db      "B = start tiny basic",CR,LF
FFFFFFFFFFFFC910                                 HelpMsg:
FFFFFFFFFFFFC388 20796E6974207472
FFFFFFFFFFFFC910 70736944203D203F               db      "? = Display help",CR,LF
FFFFFFFFFFFFC390 4A0A0D6369736162               db      "J = Jump to code",CR,LF
FFFFFFFFFFFFC918 706C65682079616C
FFFFFFFFFFFFC398 20706D754A203D20
FFFFFFFFFFFFC920 203D20534C430A0D               db      "CLS = clear screen",CR,LF
FFFFFFFFFFFFC3A0 0D65646F63206F74
FFFFFFFFFFFFC928 6373207261656C63
FFFFFFFFFFFFC3A8 766E49203D20490A               db      "I = Invaders",CR,LF
FFFFFFFFFFFFC930 203A0A0D6E656572               db      ": = Edit memory bytes",CR,LF
FFFFFFFFFFFFC3B0 520A0D7372656461               db      "R = Random lines",CR,LF
FFFFFFFFFFFFC938 6D2074696445203D
FFFFFFFFFFFFC3B8 6F646E6152203D20
FFFFFFFFFFFFC940 79622079726F6D65
FFFFFFFFFFFFC3C0 0D73656E696C206D
FFFFFFFFFFFFC948 3D204C0A0D736574               db      "L = Load S19 file",CR,LF
FFFFFFFFFFFFC3C8 616950203D20500A               db      "P = Piano",CR,LF,0
FFFFFFFFFFFFC950 31532064616F4C20
FFFFFFFFFFFFC3D0 000000000A0D6F6E               align   16
FFFFFFFFFFFFC958 0A0D656C69662039
FFFFFFFFFFFFC3D8 0000000000000000
FFFFFFFFFFFFC960 7C487C437C425B44               db      "D[B|C|H|W] = Dump memory",CR,LF
FFFFFFFFFFFFC3E0                                        align   16
FFFFFFFFFFFFC968 6D7544203D205D57
 
FFFFFFFFFFFFC970 79726F6D656D2070
 
FFFFFFFFFFFFC978 7C437C425B460A0D               db      "F[B|C|H|W] = Fill memory",CR,LF
 
FFFFFFFFFFFFC980 46203D205D577C48
 
FFFFFFFFFFFFC988 6F6D656D206C6C69
 
FFFFFFFFFFFFC990 203D20420A0D7972               db      "B = start tiny basic",CR,LF
 
FFFFFFFFFFFFC998 6974207472617473
 
FFFFFFFFFFFFC9A0 636973616220796E
 
FFFFFFFFFFFFC9A8 754A203D204A0A0D               db      "J = Jump to code",CR,LF
 
FFFFFFFFFFFFC9B0 6F63206F7420706D
 
FFFFFFFFFFFFC9B8 203D20490A0D6564               db      "I = Invaders",CR,LF
 
FFFFFFFFFFFFC9C0 7372656461766E49
 
FFFFFFFFFFFFC9C8 6152203D20520A0D               db      "R = Random lines",CR,LF
 
FFFFFFFFFFFFC9D0 6E696C206D6F646E
 
FFFFFFFFFFFFC9D8 203D20540A0D7365               db      "T = get temperature",CR,LF
 
FFFFFFFFFFFFC9E0 706D657420746567
 
FFFFFFFFFFFFC9E8 0D65727574617265
 
FFFFFFFFFFFFC9F0 616950203D20500A               db      "P = Piano",CR,LF,0
 
FFFFFFFFFFFFC9F8 000000000A0D6F6E               align   4
 
FFFFFFFFFFFFCA00                                        align   4
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Ignore blanks in the input
                                                 ; Ignore blanks in the input
                                                 ; r3 = text pointer
                                                 ; r3 = text pointer
                                                 ; r1 destroyed
                                                 ; r1 destroyed
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC3E0                                 ignBlanks:
FFFFFFFFFFFFCA00                                 ignBlanks:
FFFFFFFFFFFFC3E0        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFCA00        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFC3E4        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFCA04        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFC3E8                                 ignBlanks1:
FFFFFFFFFFFFCA08                                 ignBlanks1:
FFFFFFFFFFFFC3E8        82308000                        inch    r1,[r3]
FFFFFFFFFFFFCA08        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC3EC        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFCA0C        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC3F0        31FFEF33                        call    ScreenToAscii
FFFFFFFFFFFFCA10        31FFF06B                        call    ScreenToAscii
FFFFFFFFFFFFC3F4        B01FFD20                        beqi    r1,#' ',ignBlanks1
FFFFFFFFFFFFCA14        B01FFD20                        beqi    r1,#' ',ignBlanks1
FFFFFFFFFFFFC3F8        0E318002                        subui   r3,r3,#2
FFFFFFFFFFFFCA18        0E318002                        subui   r3,r3,#2
FFFFFFFFFFFFC3FC        47EF8000                        lw              r31,[sp]
FFFFFFFFFFFFCA1C        47EF8000                        lw              r31,[sp]
FFFFFFFFFFFFC400        37EF8008                        ret             #8
FFFFFFFFFFFFCA20        37EF8008                        ret             #8
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Edit memory byte(s).
                                                 ; Edit memory byte(s).
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC404                                 EditMem:
FFFFFFFFFFFFCA24                                 EditMem:
FFFFFFFFFFFFC404        31FFF0F8                        call    ignBlanks
FFFFFFFFFFFFCA24        31FFF280                        call    ignBlanks
FFFFFFFFFFFFC408        31FFF11C                        call    GetHexNumber
FFFFFFFFFFFFCA28        31FFF2D4                        call    GetHexNumber
FFFFFFFFFFFFC40C        04101409                        or              r5,r1,r0
FFFFFFFFFFFFCA2C        04101409                        or              r5,r1,r0
FFFFFFFFFFFFC410        E1000007                        setlo   r4,#7
FFFFFFFFFFFFCA30        E1000007                        setlo   r4,#7
FFFFFFFFFFFFC414                                 edtmem1:
FFFFFFFFFFFFCA34                                 edtmem1:
FFFFFFFFFFFFC414        31FFF0F8                        call    ignBlanks
FFFFFFFFFFFFCA34        31FFF280                        call    ignBlanks
FFFFFFFFFFFFC418        31FFF11C                        call    GetHexNumber
FFFFFFFFFFFFCA38        31FFF2D4                        call    GetHexNumber
FFFFFFFFFFFFC41C        60508000                        sb              r1,[r5]
FFFFFFFFFFFFCA3C        60508000                        sb              r1,[r5]
FFFFFFFFFFFFC420        0A528001                        addui   r5,r5,#1
FFFFFFFFFFFFCA40        0A528001                        addui   r5,r5,#1
FFFFFFFFFFFFC424        BE027F8F                        loop    r4,edtmem1
FFFFFFFFFFFFCA44        BE027F8F                        loop    r4,edtmem1
FFFFFFFFFFFFC428        BE00718A                        bra             Monitor
FFFFFFFFFFFFCA48        33FFF20A                        jmp             Monitor
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Execute code at the specified address.
                                                 ; Execute code at the specified address.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC42C                                 ExecuteCode:
FFFFFFFFFFFFCA4C                                 ExecuteCode:
FFFFFFFFFFFFC42C        31FFF0F8                        call    ignBlanks
FFFFFFFFFFFFCA4C        31FFF280                        call    ignBlanks
FFFFFFFFFFFFC430        31FFF11C                        call    GetHexNumber
FFFFFFFFFFFFCA50        31FFF2D4                        call    GetHexNumber
FFFFFFFFFFFFC434        341F8000                        jal             r31,[r1]
FFFFFFFFFFFFCA54        341F8000                        jal             r31,[r1]
FFFFFFFFFFFFC438        BE00710A                        bra     Monitor
FFFFFFFFFFFFCA58        33FFF20A                        jmp     Monitor
 
 
 
FFFFFFFFFFFFCA5C                                 LoadSector:
 
FFFFFFFFFFFFCA5C        31FFF280                        call    ignBlanks
 
FFFFFFFFFFFFCA60        31FFF2D4                        call    GetHexNumber
 
FFFFFFFFFFFFCA64        16013800                        lw              r2,#0x3800
 
FFFFFFFFFFFFCA68        31FFF56D                        call    spi_read_sector
 
FFFFFFFFFFFFCA6C        33FFF20A                        jmp             Monitor
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Do a memory dump of the requested location.
                                                 ; Do a memory dump of the requested location.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC43C                                 DumpMem:
FFFFFFFFFFFFCA70                                 DumpMem:
FFFFFFFFFFFFC43C        31FFF0F8                        call    ignBlanks
FFFFFFFFFFFFCA70        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC440        31FFF11C                        call    GetHexNumber
FFFFFFFFFFFFCA74        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC444        02110009                        mov             r2,r1
FFFFFFFFFFFFCA78        31FFF06B                        call    ScreenToAscii
FFFFFFFFFFFFC448        31FFEFFA                        call    CRLF
FFFFFFFFFFFFCA7C        02130009                        mov             r6,r1                   ; r6 = fill type character
FFFFFFFFFFFFC44C        31FFF025                        call    DisplayMem
FFFFFFFFFFFFCA80        31FFF280                        call    ignBlanks
FFFFFFFFFFFFC450        31FFF025                        call    DisplayMem
FFFFFFFFFFFFCA84        31FFF2D4                        call    GetHexNumber    ; get start address of dump
FFFFFFFFFFFFC454        31FFF025                        call    DisplayMem
FFFFFFFFFFFFCA88        02110009                        mov             r2,r1
FFFFFFFFFFFFC458        31FFF025                        call    DisplayMem
FFFFFFFFFFFFCA8C        31FFF280                        call    ignBlanks
FFFFFFFFFFFFC45C        31FFF025                        call    DisplayMem
FFFFFFFFFFFFCA90        31FFF2D4                        call    GetHexNumber    ; get number of bytes to dump
FFFFFFFFFFFFC460        31FFF025                        call    DisplayMem
FFFFFFFFFFFFCA94        06108601                        shrui   r1,r1,#3                ; 1/8 as many dump rows
FFFFFFFFFFFFC464        31FFF025                        call    DisplayMem
FFFFFFFFFFFFCA98        B2100200                        bnei    r1,#0,Dumpmem2
FFFFFFFFFFFFC468        31FFF025                        call    DisplayMem
FFFFFFFFFFFFCA9C        16008001                        lw              r1,#1                   ; dump at least one row
FFFFFFFFFFFFC46C        BE006F6A                        bra             Monitor
FFFFFFFFFFFFCAA0                                 Dumpmem2:
 
FFFFFFFFFFFFCAA0        31FFF135                        call    CRLF
 
FFFFFFFFFFFFCAA4        B0600857                        beqi    r6,#'W',DumpmemW
 
                                                 ;      beqi    r6,#'H',DumpmemH
 
FFFFFFFFFFFFCAA8        B0600443                        beqi    r6,#'C',DumpmemC
 
FFFFFFFFFFFFCAAC                                 DumpmemB:
 
FFFFFFFFFFFFCAAC        31FFF175                        call    DisplayMemB
 
FFFFFFFFFFFFCAB0        BE00FFEF                        loop    r1,DumpmemB
 
FFFFFFFFFFFFCAB4        33FFF20A                        jmp             Monitor
 
FFFFFFFFFFFFCAB8                                 DumpmemC:
 
FFFFFFFFFFFFCAB8        31FFF189                        call    DisplayMemC
 
FFFFFFFFFFFFCABC        BE00FFEF                        loop    r1,DumpmemC
 
FFFFFFFFFFFFCAC0        33FFF20A                        jmp             Monitor
 
FFFFFFFFFFFFCAC4                                 DumpmemW:
 
FFFFFFFFFFFFCAC4        31FFF19D                        call    DisplayMemW
 
FFFFFFFFFFFFCAC8        BE00FFEF                        loop    r1,DumpmemW
 
FFFFFFFFFFFFCACC        33FFF20A                        jmp             Monitor
 
 
 
                                                 ;      call    DisplayMem
 
                                                 ;      call    DisplayMem
 
                                                 ;      call    DisplayMem
 
                                                 ;      call    DisplayMem
 
                                                 ;      call    DisplayMem
 
                                                 ;      call    DisplayMem
 
                                                 ;      call    DisplayMem
 
FFFFFFFFFFFFCAD0        BE006ACA                        bra             Monitor
 
 
 
FFFFFFFFFFFFCAD4                                 Fillmem:
 
FFFFFFFFFFFFCAD4        82308000                        inch    r1,[r3]
 
FFFFFFFFFFFFCAD8        0A318002                        addui   r3,r3,#2
 
FFFFFFFFFFFFCADC        31FFF06B                        call    ScreenToAscii
 
FFFFFFFFFFFFCAE0        02130009                        mov             r6,r1                   ; r6 = fill type character
 
FFFFFFFFFFFFCAE4        31FFF280                        call    ignBlanks
 
FFFFFFFFFFFFCAE8        31FFF2D4                        call    GetHexNumber    ; get start address of dump
 
FFFFFFFFFFFFCAEC        02110009                        mov             r2,r1
 
FFFFFFFFFFFFCAF0        31FFF280                        call    ignBlanks
 
FFFFFFFFFFFFCAF4        31FFF2D4                        call    GetHexNumber    ; get number of bytes to fill
 
FFFFFFFFFFFFCAF8        02128009                        mov             r5,r1
 
FFFFFFFFFFFFCAFC        31FFF280                        call    ignBlanks
 
FFFFFFFFFFFFCB00        31FFF2D4                        call    GetHexNumber    ; get the fill byte
 
FFFFFFFFFFFFCB04        B0600743                        beqi    r6,#'C',FillmemC
 
FFFFFFFFFFFFCB08        B0600A48                        beqi    r6,#'H',FillmemH
 
FFFFFFFFFFFFCB0C        B0600D57                        beqi    r6,#'W',FillmemW
 
FFFFFFFFFFFFCB10                                 FillmemB:
 
FFFFFFFFFFFFCB10        60208000                        sb              r1,[r2]
 
FFFFFFFFFFFFCB14        0A210001                        addui   r2,r2,#1
 
FFFFFFFFFFFFCB18        BE02FFCF                        loop    r5,FillmemB
 
FFFFFFFFFFFFCB1C        33FFF20A                        jmp             Monitor
 
FFFFFFFFFFFFCB20                                 FillmemC:
 
FFFFFFFFFFFFCB20        62208000                        sc              r1,[r2]
 
FFFFFFFFFFFFCB24        0A210002                        addui   r2,r2,#2
 
FFFFFFFFFFFFCB28        BE02FFCF                        loop    r5,FillmemC
 
FFFFFFFFFFFFCB2C        33FFF20A                        jmp             Monitor
 
FFFFFFFFFFFFCB30                                 FillmemH:
 
FFFFFFFFFFFFCB30        64208000                        sh              r1,[r2]
 
FFFFFFFFFFFFCB34        0A210004                        addui   r2,r2,#4
 
FFFFFFFFFFFFCB38        BE02FFCF                        loop    r5,FillmemH
 
FFFFFFFFFFFFCB3C        33FFF20A                        jmp             Monitor
 
FFFFFFFFFFFFCB40                                 FillmemW:
 
FFFFFFFFFFFFCB40        66208000                        sw              r1,[r2]
 
FFFFFFFFFFFFCB44        0A210008                        addui   r2,r2,#8
 
FFFFFFFFFFFFCB48        BE02FFCF                        loop    r5,FillmemW
 
FFFFFFFFFFFFCB4C        33FFF20A                        jmp             Monitor
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Get a hexidecimal number. Maximum of sixteen digits.
                                                 ; Get a hexidecimal number. Maximum of sixteen digits.
                                                 ; R3 = text pointer (updated)
                                                 ; R3 = text pointer (updated)
                                                 ; R1 = hex number
                                                 ; R1 = hex number
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC470                                 GetHexNumber:
FFFFFFFFFFFFCB50                                 GetHexNumber:
FFFFFFFFFFFFC470        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFCB50        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFC474        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFCB54        67E10000                        sw              r2,[sp]
FFFFFFFFFFFFC478        67E20008                        sw              r4,8[sp]
FFFFFFFFFFFFCB58        67E20008                        sw              r4,8[sp]
FFFFFFFFFFFFC47C        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFCB5C        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFC480        E0800000                        setlo   r2,#0
FFFFFFFFFFFFCB60        E0800000                        setlo   r2,#0
FFFFFFFFFFFFC484        E100000F                        setlo   r4,#15
FFFFFFFFFFFFCB64        E100000F                        setlo   r4,#15
FFFFFFFFFFFFC488                                 gthxn2:
FFFFFFFFFFFFCB68                                 gthxn2:
FFFFFFFFFFFFC488        82308000                        inch    r1,[r3]
FFFFFFFFFFFFCB68        82308000                        inch    r1,[r3]
FFFFFFFFFFFFC48C        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFCB6C        0A318002                        addui   r3,r3,#2
FFFFFFFFFFFFC490        31FFEF33                        call    ScreenToAscii
FFFFFFFFFFFFCB70        31FFF06B                        call    ScreenToAscii
FFFFFFFFFFFFC494        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCB74        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC498        B01005FF                        beqi    r1,#-1,gthxn1
FFFFFFFFFFFFCB78        B01005FF                        beqi    r1,#-1,gthxn1
FFFFFFFFFFFFC49C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCB7C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC4A0        1410800F                        andi    r1,r1,#0x0f
FFFFFFFFFFFFCB80        1410800F                        andi    r1,r1,#0x0f
FFFFFFFFFFFFC4A4        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCB84        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC4A8        BE027F0F                        loop    r4,gthxn2
FFFFFFFFFFFFCB88        BE027F0F                        loop    r4,gthxn2
FFFFFFFFFFFFC4AC                                 gthxn1:
FFFFFFFFFFFFCB8C                                 gthxn1:
FFFFFFFFFFFFC4AC        02208009                        mov             r1,r2
FFFFFFFFFFFFCB8C        02208009                        mov             r1,r2
FFFFFFFFFFFFC4B0        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFCB90        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFC4B4        47E20008                        lw              r4,8[sp]
FFFFFFFFFFFFCB94        47E20008                        lw              r4,8[sp]
FFFFFFFFFFFFC4B8        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFCB98        47E10000                        lw              r2,[sp]
FFFFFFFFFFFFC4BC        37EF8018                        ret             #24
FFFFFFFFFFFFCB9C        37EF8018                        ret             #24
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Convert ASCII character in the range '0' to '9', 'a' to 'f' or 'A' to 'F'
                                                 ; Convert ASCII character in the range '0' to '9', 'a' to 'f' or 'A' to 'F'
                                                 ; to a hex nybble.
                                                 ; to a hex nybble.
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC4C0                                 AsciiToHexNybble:
FFFFFFFFFFFFCBA0                                 AsciiToHexNybble:
FFFFFFFFFFFFC4C0        A8100E30                        bltui   r1,#'0',gthx3
FFFFFFFFFFFFCBA0        A8100E30                        bltui   r1,#'0',gthx3
FFFFFFFFFFFFC4C4        AE100339                        bgtui   r1,#'9',gthx5
FFFFFFFFFFFFCBA4        AE100339                        bgtui   r1,#'9',gthx5
FFFFFFFFFFFFC4C8        0E108030                        subui   r1,r1,#'0'
FFFFFFFFFFFFCBA8        0E108030                        subui   r1,r1,#'0'
FFFFFFFFFFFFC4CC        37EF8000                        ret
FFFFFFFFFFFFCBAC        37EF8000                        ret
FFFFFFFFFFFFC4D0                                 gthx5:
FFFFFFFFFFFFCBB0                                 gthx5:
FFFFFFFFFFFFC4D0        A8100A41                        bltui   r1,#'A',gthx3
FFFFFFFFFFFFCBB0        A8100A41                        bltui   r1,#'A',gthx3
FFFFFFFFFFFFC4D4        AE100446                        bgtui   r1,#'F',gthx6
FFFFFFFFFFFFCBB4        AE100446                        bgtui   r1,#'F',gthx6
FFFFFFFFFFFFC4D8        0E108041                        subui   r1,r1,#'A'
FFFFFFFFFFFFCBB8        0E108041                        subui   r1,r1,#'A'
FFFFFFFFFFFFC4DC        0A10800A                        addui   r1,r1,#10
FFFFFFFFFFFFCBBC        0A10800A                        addui   r1,r1,#10
FFFFFFFFFFFFC4E0        37EF8000                        ret
FFFFFFFFFFFFCBC0        37EF8000                        ret
FFFFFFFFFFFFC4E4                                 gthx6:
FFFFFFFFFFFFCBC4                                 gthx6:
FFFFFFFFFFFFC4E4        A8100561                        bltui   r1,#'a',gthx3
FFFFFFFFFFFFCBC4        A8100561                        bltui   r1,#'a',gthx3
FFFFFFFFFFFFC4E8        AE100466                        bgtui   r1,#'f',gthx3
FFFFFFFFFFFFCBC8        AE100466                        bgtui   r1,#'f',gthx3
FFFFFFFFFFFFC4EC        0E108061                        subui   r1,r1,#'a'
FFFFFFFFFFFFCBCC        0E108061                        subui   r1,r1,#'a'
FFFFFFFFFFFFC4F0        0A10800A                        addui   r1,r1,#10
FFFFFFFFFFFFCBD0        0A10800A                        addui   r1,r1,#10
FFFFFFFFFFFFC4F4        37EF8000                        ret
FFFFFFFFFFFFCBD4        37EF8000                        ret
FFFFFFFFFFFFC4F8                                 gthx3:
FFFFFFFFFFFFCBD8                                 gthx3:
FFFFFFFFFFFFC4F8        E07FFFFF                        setlo   r1,#-1          ; not a hex number
FFFFFFFFFFFFCBD8        E07FFFFF                        setlo   r1,#-1          ; not a hex number
FFFFFFFFFFFFC4FC        37EF8000                        ret
FFFFFFFFFFFFCBDC        37EF8000                        ret
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ; Load an S19 format file
                                                 ; Load an S19 format file
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;
                                                 ;
FFFFFFFFFFFFC500                                 LoadS19:
FFFFFFFFFFFFCBE0                                 LoadS19:
FFFFFFFFFFFFC500        BE00006A                        bra             ProcessRec
FFFFFFFFFFFFCBE0        BE00006A                        bra             ProcessRec
FFFFFFFFFFFFC504                                 NextRec:
FFFFFFFFFFFFCBE4                                 NextRec:
FFFFFFFFFFFFC504        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCBE4        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC508        B21FFF0A                        bne             r1,#LF,NextRec
FFFFFFFFFFFFCBE8        B21FFF0A                        bne             r1,#LF,NextRec
FFFFFFFFFFFFC50C                                 ProcessRec:
FFFFFFFFFFFFCBEC                                 ProcessRec:
FFFFFFFFFFFFC50C        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCBEC        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC510        B01F521A                        beqi    r1,#26,Monitor  ; CTRL-Z ?
FFFFFFFFFFFFCBF0        B01F0E1A                        beqi    r1,#26,Monitor  ; CTRL-Z ?
FFFFFFFFFFFFC514        B21FFC53                        bnei    r1,#'S',NextRec
FFFFFFFFFFFFCBF4        B21FFC53                        bnei    r1,#'S',NextRec
FFFFFFFFFFFFC518        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCBF8        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC51C        A01FFA30                        blt             r1,#'0',NextRec
FFFFFFFFFFFFCBFC        A01FFA30                        blt             r1,#'0',NextRec
FFFFFFFFFFFFC520        A61FF939                        bgt             r1,#'9',NextRec
FFFFFFFFFFFFCC00        A61FF939                        bgt             r1,#'9',NextRec
FFFFFFFFFFFFC524        04101009                        or              r4,r1,r0                ; r4 = record type
FFFFFFFFFFFFCC04        04101009                        or              r4,r1,r0                ; r4 = record type
FFFFFFFFFFFFC528        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCC08        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC52C        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCC0C        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC530        04100809                        or              r2,r1,r0
FFFFFFFFFFFFCC10        04100809                        or              r2,r1,r0
FFFFFFFFFFFFC534        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCC14        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC538        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCC18        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC53C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCC1C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC540        04208809                        or              r2,r2,r1                ; r2 = byte count
FFFFFFFFFFFFCC20        04208809                        or              r2,r2,r1                ; r2 = byte count
FFFFFFFFFFFFC544        04208C09                        or              r3,r2,r1                ; r3 = byte count
FFFFFFFFFFFFCC24        04208C09                        or              r3,r2,r1                ; r3 = byte count
FFFFFFFFFFFFC548        B04FEF30                        beqi    r4,#'0',NextRec ; manufacturer ID record, ignore
FFFFFFFFFFFFCC28        B04FEF30                        beqi    r4,#'0',NextRec ; manufacturer ID record, ignore
FFFFFFFFFFFFC54C        B0401E31                        beqi    r4,#'1',ProcessS1
FFFFFFFFFFFFCC2C        B0401E31                        beqi    r4,#'1',ProcessS1
FFFFFFFFFFFFC550        B0401F32                        beqi    r4,#'2',ProcessS2
FFFFFFFFFFFFCC30        B0401F32                        beqi    r4,#'2',ProcessS2
FFFFFFFFFFFFC554        B0402033                        beqi    r4,#'3',ProcessS3
FFFFFFFFFFFFCC34        B0402033                        beqi    r4,#'3',ProcessS3
FFFFFFFFFFFFC558        B04FEB35                        beqi    r4,#'5',NextRec ; record count record, ignore
FFFFFFFFFFFFCC38        B04FEB35                        beqi    r4,#'5',NextRec ; record count record, ignore
FFFFFFFFFFFFC55C        B0402037                        beqi    r4,#'7',ProcessS7
FFFFFFFFFFFFCC3C        B0402037                        beqi    r4,#'7',ProcessS7
FFFFFFFFFFFFC560        B0402238                        beqi    r4,#'8',ProcessS8
FFFFFFFFFFFFCC40        B0402238                        beqi    r4,#'8',ProcessS8
FFFFFFFFFFFFC564        B0402439                        beqi    r4,#'9',ProcessS9
FFFFFFFFFFFFCC44        B0402439                        beqi    r4,#'9',ProcessS9
FFFFFFFFFFFFC568        BE007CEA                        bra             NextRec
FFFFFFFFFFFFCC48        BE007CEA                        bra             NextRec
 
 
FFFFFFFFFFFFC56C                                 pcssxa:
FFFFFFFFFFFFCC4C                                 pcssxa:
FFFFFFFFFFFFC56C        143180FF                        andi    r3,r3,#0xff
FFFFFFFFFFFFCC4C        143180FF                        andi    r3,r3,#0xff
FFFFFFFFFFFFC570        0E318001                        subui   r3,r3,#1                ; one less for loop
FFFFFFFFFFFFCC50        0E318001                        subui   r3,r3,#1                ; one less for loop
FFFFFFFFFFFFC574                                 pcss1a:
FFFFFFFFFFFFCC54                                 pcss1a:
FFFFFFFFFFFFC574        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCC54        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC578        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCC58        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC57C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCC5C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC580        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCC60        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC584        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCC64        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC588        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCC68        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC58C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCC6C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC590        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCC70        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC594        60510000                        sb              r2,[r5]
FFFFFFFFFFFFCC74        60510000                        sb              r2,[r5]
FFFFFFFFFFFFC598        0A528001                        addui   r5,r5,#1
FFFFFFFFFFFFCC78        0A528001                        addui   r5,r5,#1
FFFFFFFFFFFFC59C        BE01FECF                        loop    r3,pcss1a
FFFFFFFFFFFFCC7C        BE01FECF                        loop    r3,pcss1a
                                                 ; Get the checksum byte
                                                 ; Get the checksum byte
FFFFFFFFFFFFC5A0        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCC80        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC5A4        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCC84        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC5A8        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCC88        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC5AC        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCC8C        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC5B0        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCC90        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC5B4        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCC94        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC5B8        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCC98        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC5BC        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCC9C        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC5C0        BE007A2A                        bra             NextRec
FFFFFFFFFFFFCCA0        BE007A2A                        bra             NextRec
 
 
FFFFFFFFFFFFC5C4                                 ProcessS1:
FFFFFFFFFFFFCCA4                                 ProcessS1:
FFFFFFFFFFFFC5C4        31FFF180                        call    S19Get16BitAddress
FFFFFFFFFFFFCCA4        31FFF338                        call    S19Get16BitAddress
FFFFFFFFFFFFC5C8        BE007D2A                        bra             pcssxa
FFFFFFFFFFFFCCA8        BE007D2A                        bra             pcssxa
FFFFFFFFFFFFC5CC                                 ProcessS2:
FFFFFFFFFFFFCCAC                                 ProcessS2:
FFFFFFFFFFFFC5CC        31FFF186                        call    S19Get24BitAddress
FFFFFFFFFFFFCCAC        31FFF33E                        call    S19Get24BitAddress
FFFFFFFFFFFFC5D0        BE007CEA                        bra             pcssxa
FFFFFFFFFFFFCCB0        BE007CEA                        bra             pcssxa
FFFFFFFFFFFFC5D4                                 ProcessS3:
FFFFFFFFFFFFCCB4                                 ProcessS3:
FFFFFFFFFFFFC5D4        31FFF18C                        call    S19Get32BitAddress
FFFFFFFFFFFFCCB4        31FFF344                        call    S19Get32BitAddress
FFFFFFFFFFFFC5D8        BE007CAA                        bra             pcssxa
FFFFFFFFFFFFCCB8        BE007CAA                        bra             pcssxa
FFFFFFFFFFFFC5DC                                 ProcessS7:
FFFFFFFFFFFFCCBC                                 ProcessS7:
FFFFFFFFFFFFC5DC        31FFF18C                        call    S19Get32BitAddress
FFFFFFFFFFFFCCBC        31FFF344                        call    S19Get32BitAddress
FFFFFFFFFFFFC5E0        66028000                        sw              r5,S19StartAddress
FFFFFFFFFFFFCCC0        66028000                        sw              r5,S19StartAddress
FFFFFFFFFFFFC5E4        BE0063AA                        bra             Monitor
FFFFFFFFFFFFCCC4        BE005B2A                        bra             Monitor
FFFFFFFFFFFFC5E8                                 ProcessS8:
FFFFFFFFFFFFCCC8                                 ProcessS8:
FFFFFFFFFFFFC5E8        31FFF186                        call    S19Get24BitAddress
FFFFFFFFFFFFCCC8        31FFF33E                        call    S19Get24BitAddress
FFFFFFFFFFFFC5EC        66028000                        sw              r5,S19StartAddress
FFFFFFFFFFFFCCCC        66028000                        sw              r5,S19StartAddress
FFFFFFFFFFFFC5F0        BE00634A                        bra             Monitor
FFFFFFFFFFFFCCD0        BE005ACA                        bra             Monitor
FFFFFFFFFFFFC5F4                                 ProcessS9:
FFFFFFFFFFFFCCD4                                 ProcessS9:
FFFFFFFFFFFFC5F4        31FFF180                        call    S19Get16BitAddress
FFFFFFFFFFFFCCD4        31FFF338                        call    S19Get16BitAddress
FFFFFFFFFFFFC5F8        66028000                        sw              r5,S19StartAddress
FFFFFFFFFFFFCCD8        66028000                        sw              r5,S19StartAddress
FFFFFFFFFFFFC5FC        BE0062EA                        bra             Monitor
FFFFFFFFFFFFCCDC        33FFF20A                        jmp             Monitor
 
 
FFFFFFFFFFFFC600                                 S19Get16BitAddress:
FFFFFFFFFFFFCCE0                                 S19Get16BitAddress:
FFFFFFFFFFFFC600        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFCCE0        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFC604        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFCCE4        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFC608        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCCE8        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC60C        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCCEC        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC610        04100809                        or              r2,r1,r0
FFFFFFFFFFFFCCF0        04100809                        or              r2,r1,r0
FFFFFFFFFFFFC614        BE00038A                        bra             S1932b
FFFFFFFFFFFFCCF4        BE00038A                        bra             S1932b
 
 
FFFFFFFFFFFFC618                                 S19Get24BitAddress:
FFFFFFFFFFFFCCF8                                 S19Get24BitAddress:
FFFFFFFFFFFFC618        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFCCF8        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFC61C        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFCCFC        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFC620        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD00        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC624        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD04        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC628        04100809                        or              r2,r1,r0
FFFFFFFFFFFFCD08        04100809                        or              r2,r1,r0
FFFFFFFFFFFFC62C        BE0001CA                        bra             S1932a
FFFFFFFFFFFFCD0C        BE0001CA                        bra             S1932a
 
 
FFFFFFFFFFFFC630                                 S19Get32BitAddress:
FFFFFFFFFFFFCD10                                 S19Get32BitAddress:
FFFFFFFFFFFFC630        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFCD10        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFC634        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFCD14        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFC638        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD18        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC63C        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD1C        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC640        04100809                        or              r2,r1,r0
FFFFFFFFFFFFCD20        04100809                        or              r2,r1,r0
FFFFFFFFFFFFC644        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD24        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC648        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD28        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC64C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCD2C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC650        04110809                        or              r2,r1,r2
FFFFFFFFFFFFCD30        04110809                        or              r2,r1,r2
FFFFFFFFFFFFC654        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD34        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC658        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD38        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC65C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCD3C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC660        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCD40        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC664                                 S1932a:
FFFFFFFFFFFFCD44                                 S1932a:
FFFFFFFFFFFFC664        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD44        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC668        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD48        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC66C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCD4C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC670        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCD50        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC674        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD54        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC678        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD58        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC67C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCD5C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC680        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCD60        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC684                                 S1932b:
FFFFFFFFFFFFCD64                                 S1932b:
FFFFFFFFFFFFC684        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD64        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC688        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD68        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC68C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCD6C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC690        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCD70        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC694        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD74        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC698        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD78        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC69C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCD7C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC6A0        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCD80        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC6A4        31FFF1B2                        call    sGetChar
FFFFFFFFFFFFCD84        31FFF36A                        call    sGetChar
FFFFFFFFFFFFC6A8        31FFF130                        call    AsciiToHexNybble
FFFFFFFFFFFFCD88        31FFF2E8                        call    AsciiToHexNybble
FFFFFFFFFFFFC6AC        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFCD8C        06210800                        shli    r2,r2,#4
FFFFFFFFFFFFC6B0        04208809                        or              r2,r2,r1
FFFFFFFFFFFFCD90        04208809                        or              r2,r2,r1
FFFFFFFFFFFFC6B4        0442100A                        xor             r4,r4,r4
FFFFFFFFFFFFCD94        0442100A                        xor             r4,r4,r4
FFFFFFFFFFFFC6B8        04201409                        or              r5,r2,r0
FFFFFFFFFFFFCD98        04201409                        or              r5,r2,r0
FFFFFFFFFFFFC6BC        47EF8000                        lw              r31,[sp]
FFFFFFFFFFFFCD9C        47EF8000                        lw              r31,[sp]
FFFFFFFFFFFFC6C0        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFCDA0        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFC6C4        37EF8000                        ret
FFFFFFFFFFFFCDA4        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; Get a character from auxillary input, checking the keyboard status for a
                                                 ; Get a character from auxillary input, checking the keyboard status for a
                                                 ; CTRL-C
                                                 ; CTRL-C
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC6C8                                 sGetChar:
FFFFFFFFFFFFCDA8                                 sGetChar:
FFFFFFFFFFFFC6C8        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFCDA8        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFC6CC        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFCDAC        67EF8000                        sw              r31,[sp]
FFFFFFFFFFFFC6D0                                 sgc2:
FFFFFFFFFFFFCDB0                                 sgc2:
FFFFFFFFFFFFC6D0        31FFEE1D                        call    KeybdCheckForKey
FFFFFFFFFFFFCDB0        31FFEF1C                        call    KeybdCheckForKey
FFFFFFFFFFFFC6D4        BE106908                        beq             r1,r0,sgc1
FFFFFFFFFFFFCDB4        BE103C08                        beq             r1,r0,sgc1
FFFFFFFFFFFFC6D8        31FFEE08                        call    KeybdGetchar
FFFFFFFFFFFFCDB8        31FFEF07                        call    KeybdGetchar
FFFFFFFFFFFFC6DC        B01EDF00                        beqi    r1,#CRTLC,Monitor
FFFFFFFFFFFFCDBC        B01E9B00                        beqi    r1,#CRTLC,Monitor
FFFFFFFFFFFFC6E0                                 sgc1:
FFFFFFFFFFFFCDC0                                 sgc1:
FFFFFFFFFFFFC6E0        31FFF95C                        call    AUXIN
FFFFFFFFFFFFCDC0        31FFFD9D                        call    AUXIN
FFFFFFFFFFFFC6E4        BE107F62                        ble             r1,r0,sgc2
FFFFFFFFFFFFCDC4        BE107F62                        ble             r1,r0,sgc2
FFFFFFFFFFFFC6E8        47EF8000                        lw              r31,[sp]
FFFFFFFFFFFFCDC8        47EF8000                        lw              r31,[sp]
FFFFFFFFFFFFC6EC        37EF8008                        ret             #8
FFFFFFFFFFFFCDCC        37EF8008                        ret             #8
 
 
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ; Draw random lines on the bitmap screen.
                                                 ; Draw random lines on the bitmap screen.
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
FFFFFFFFFFFFC6F0                                 RandomLines:
                                                 ;
FFFFFFFFFFFFC6F0        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFCDD0                                 RandomLines:
FFFFFFFFFFFFC6F4        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFCDD0        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFC6F8        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFCDD4        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC6FC        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFCDD8        67E18008                        sw              r3,8[sp]
FFFFFFFFFFFFC700                                 rl5:
FFFFFFFFFFFFCDDC        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFC700        00000050                        gran
FFFFFFFFFFFFCDE0        660020E8                        sw              r0,ctx3start    ; prevent restarting context over and over again
FFFFFFFFFFFFC704        020088A8                        mfspr   r1,rand                 ; select a random color
FFFFFFFFFFFFCDE4                                 rl5:
FFFFFFFFFFFFC708        E69AE000                ; SETLO
FFFFFFFFFFFFCDE4        00000050                        gran
FFFFFFFFFFFFC70C        EE800003                ; SETMID
FFFFFFFFFFFFCDE8        020088A8                        mfspr   r1,rand                 ; select a random color
FFFFFFFFFFFFC710        6A0D042A                        outh    r1,GACCEL
FFFFFFFFFFFFCDEC        E69AE000                ; SETLO
FFFFFFFFFFFFC714                                 rl1:                                           ; random X0
FFFFFFFFFFFFCDF0        EE800003                ; SETMID
FFFFFFFFFFFFC714        00000050                        gran
FFFFFFFFFFFFCDF4        6A0D042A                        outh    r1,GACCEL
FFFFFFFFFFFFC718        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFCDF8                                 rl1:                                           ; random X0
FFFFFFFFFFFFC71C        16018554                        lw              r3,#1364
FFFFFFFFFFFFCDF8        00000050                        gran
FFFFFFFFFFFFC720        0411841C                        mod             r1,r1,r3
FFFFFFFFFFFFCDFC        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFC724        E69AE008                ; SETLO
FFFFFFFFFFFFCE00        16018554                        lw              r3,#1364
FFFFFFFFFFFFC728        EE800003                ; SETMID
FFFFFFFFFFFFCE04        0411841C                        modu    r1,r1,r3
FFFFFFFFFFFFC72C        6A0D042A                        outh    r1,GACCEL+8
FFFFFFFFFFFFCE08        E69AE008                ; SETLO
FFFFFFFFFFFFC730                                 rl2:                                           ; random X1
FFFFFFFFFFFFCE0C        EE800003                ; SETMID
FFFFFFFFFFFFC730        00000050                        gran
FFFFFFFFFFFFCE10        6A0D042A                        outh    r1,GACCEL+8
FFFFFFFFFFFFC734        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFCE14                                 rl2:                                           ; random X1
FFFFFFFFFFFFC738        16018554                        lw              r3,#1364
FFFFFFFFFFFFCE14        00000050                        gran
FFFFFFFFFFFFC73C        0411841C                        mod             r1,r1,r3
FFFFFFFFFFFFCE18        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFC740        E69AE010                ; SETLO
FFFFFFFFFFFFCE1C        16018554                        lw              r3,#1364
FFFFFFFFFFFFC744        EE800003                ; SETMID
FFFFFFFFFFFFCE20        0411841C                        modu    r1,r1,r3
FFFFFFFFFFFFC748        6A0D042A                        outh    r1,GACCEL+16
FFFFFFFFFFFFCE24        E69AE010                ; SETLO
FFFFFFFFFFFFC74C                                 rl3:                                           ; random Y0
FFFFFFFFFFFFCE28        EE800003                ; SETMID
FFFFFFFFFFFFC74C        00000050                        gran
FFFFFFFFFFFFCE2C        6A0D042A                        outh    r1,GACCEL+16
FFFFFFFFFFFFC750        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFCE30                                 rl3:                                           ; random Y0
FFFFFFFFFFFFC754        16018300                        lw              r3,#768
FFFFFFFFFFFFCE30        00000050                        gran
FFFFFFFFFFFFC758        0411841C                        mod             r1,r1,r3
FFFFFFFFFFFFCE34        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFC75C        E69AE00C                ; SETLO
FFFFFFFFFFFFCE38        16018300                        lw              r3,#768
FFFFFFFFFFFFC760        EE800003                ; SETMID
FFFFFFFFFFFFCE3C        0411841C                        modu    r1,r1,r3
FFFFFFFFFFFFC764        6A0D042A                        outh    r1,GACCEL+12
FFFFFFFFFFFFCE40        E69AE00C                ; SETLO
FFFFFFFFFFFFC768                                 rl4:                                           ; random Y1
FFFFFFFFFFFFCE44        EE800003                ; SETMID
FFFFFFFFFFFFC768        00000050                        gran
FFFFFFFFFFFFCE48        6A0D042A                        outh    r1,GACCEL+12
FFFFFFFFFFFFC76C        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFCE4C                                 rl4:                                           ; random Y1
FFFFFFFFFFFFC770        16018300                        lw              r3,#768
FFFFFFFFFFFFCE4C        00000050                        gran
FFFFFFFFFFFFC774        0411841C                        mod             r1,r1,r3
FFFFFFFFFFFFCE50        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFC778        E69AE014                ; SETLO
FFFFFFFFFFFFCE54        16018300                        lw              r3,#768
FFFFFFFFFFFFC77C        EE800003                ; SETMID
FFFFFFFFFFFFCE58        0411841C                        modu    r1,r1,r3
FFFFFFFFFFFFC780        6A0D042A                        outh    r1,GACCEL+20
FFFFFFFFFFFFCE5C        E69AE014                ; SETLO
FFFFFFFFFFFFC784        E0400002                        setlo   r1,#2                   ; draw line command
FFFFFFFFFFFFCE60        EE800003                ; SETMID
FFFFFFFFFFFFC788        E69AE03C                ; SETLO
FFFFFFFFFFFFCE64        6A0D042A                        outh    r1,GACCEL+20
FFFFFFFFFFFFC78C        EE800003                ; SETMID
FFFFFFFFFFFFCE68        E0400002                        setlo   r1,#2                   ; draw line command
FFFFFFFFFFFFC790        6A0D042A                        outh    r1,GACCEL+60
FFFFFFFFFFFFCE6C        E69AE03C                ; SETLO
FFFFFFFFFFFFC794                                 rl8:
FFFFFFFFFFFFCE70        EE800003                ; SETMID
FFFFFFFFFFFFC794        31FFEE08                        call    KeybdGetChar
FFFFFFFFFFFFCE74        6A0D042A                        outh    r1,GACCEL+60
FFFFFFFFFFFFC798        B0100303                        beqi    r1,#CTRLC,rl7
FFFFFFFFFFFFCE78                                 rl8:
FFFFFFFFFFFFC79C        B01FD972                        beqi    r1,#'r',rl5
                                                 ;      call    KeybdGetChar
FFFFFFFFFFFFC7A0        BE007FAA                        bra             rl8
                                                 ;      beqi    r1,#CTRLC,rl7
FFFFFFFFFFFFC7A4                                 rl7:
FFFFFFFFFFFFCE78        E69AE038                ; SETLO
FFFFFFFFFFFFC7A4        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFCE7C        EE800003                ; SETMID
FFFFFFFFFFFFC7A8        47E18008                        lw              r3,8[sp]
FFFFFFFFFFFFCE80        6A0D0421                        inch    r1,GACCEL+56    ; ensure controller is in IDLE state
FFFFFFFFFFFFC7AC        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFCE84        BE107FA9                        bne             r1,r0,rl8
FFFFFFFFFFFFC7B0        37EF8018                        ret             #24
FFFFFFFFFFFFCE88        BE007AEA                        bra             rl5
 
FFFFFFFFFFFFCE8C                                 rl7:
 
FFFFFFFFFFFFCE8C        47EF8010                        lw              lr,16[sp]
 
FFFFFFFFFFFFCE90        47E18008                        lw              r3,8[sp]
 
FFFFFFFFFFFFCE94        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFCE98        37EF8018                        ret             #24
 
 
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ; Initialize sprite image caches with random data.
                                                 ; Initialize sprite image caches with random data.
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
FFFFFFFFFFFFC7B4                                 RandomizeSprram:
FFFFFFFFFFFFCE9C                                 RandomizeSprram:
FFFFFFFFFFFFC7B4        E6980000                ; SETLO
FFFFFFFFFFFFCE9C        E6980000                ; SETLO
FFFFFFFFFFFFC7B8        EE800003                ; SETMID
FFFFFFFFFFFFCEA0        EE800003                ; SETMID
FFFFFFFFFFFFC7BC        6A0D082D                        lea             r2,SPRRAM
FFFFFFFFFFFFCEA4        6A0D082D                        lea             r2,SPRRAM
FFFFFFFFFFFFC7C0        E10037FF                        setlo   r4,#14335               ; number of chars to initialize
FFFFFFFFFFFFCEA8        E10037FF                        setlo   r4,#14335               ; number of chars to initialize
FFFFFFFFFFFFC7C4                                 rsr1:
FFFFFFFFFFFFCEAC                                 rsr1:
FFFFFFFFFFFFC7C4        00000050                        gran
FFFFFFFFFFFFCEAC        00000050                        gran
FFFFFFFFFFFFC7C8        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFCEB0        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFC7CC        92208000                        outc    r1,[r2]
FFFFFFFFFFFFCEB4        92208000                        outc    r1,[r2]
FFFFFFFFFFFFC7D0        0A210002                        addui   r2,r2,#2
FFFFFFFFFFFFCEB8        0A210002                        addui   r2,r2,#2
FFFFFFFFFFFFC7D4        BE027F8F                        loop    r4,rsr1
FFFFFFFFFFFFCEBC        BE027F8F                        loop    r4,rsr1
FFFFFFFFFFFFC7D8        37EF8000                        ret
FFFFFFFFFFFFCEC0        37EF8000                        ret
 
 
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ; Setup the AC97/LM4550 audio controller. Check keyboard for a CTRL-C
                                                 ; Setup the AC97/LM4550 audio controller. Check keyboard for a CTRL-C
                                                 ; interrupt which may be necessary if the audio controller isn't
                                                 ; interrupt which may be necessary if the audio controller isn't
                                                 ; responding.
                                                 ; responding.
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC7DC                                 SetupAC97:
FFFFFFFFFFFFCEC4                                 SetupAC97:
FFFFFFFFFFFFC7DC        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFCEC4        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFC7E0        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFCEC8        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC7E4        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFCECC        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFC7E8                                 sac974:
FFFFFFFFFFFFCED0                                 sac974:
FFFFFFFFFFFFC7E8        E69C1026                ; SETLO
FFFFFFFFFFFFCED0        E69C1026                ; SETLO
FFFFFFFFFFFFC7EC        EE800003                ; SETMID
FFFFFFFFFFFFCED4        EE800003                ; SETMID
FFFFFFFFFFFFC7F0        6A0D0029                        outc    r0,AC97+0x26    ; trigger a read of register 26 (status reg)
FFFFFFFFFFFFCED8        6A0D0029                        outc    r0,AC97+0x26    ; trigger a read of register 26 (status reg)
FFFFFFFFFFFFC7F4                                 sac971:                                                ; wait for status to register 0xF (all ready)
FFFFFFFFFFFFCEDC                                 sac971:                                                ; wait for status to register 0xF (all ready)
FFFFFFFFFFFFC7F4        31FFEE08                        call    KeybdGetChar    ; see if we needed to CTRL-C
FFFFFFFFFFFFCEDC        31FFEF07                        call    KeybdGetChar    ; see if we needed to CTRL-C
FFFFFFFFFFFFC7F8        B0100A03                        beqi    r1,#CTRLC,sac973
FFFFFFFFFFFFCEE0        B0100A03                        beqi    r1,#CTRLC,sac973
FFFFFFFFFFFFC7FC        E69C1068                ; SETLO
FFFFFFFFFFFFCEE4        E69C1068                ; SETLO
FFFFFFFFFFFFC800        EE800003                ; SETMID
FFFFFFFFFFFFCEE8        EE800003                ; SETMID
FFFFFFFFFFFFC804        6A0D0429                        outc    r1,AC97+0x68    ; wait for dirty bit to clear
FFFFFFFFFFFFCEEC        6A0D0421                        inch    r1,AC97+0x68    ; wait for dirty bit to clear
FFFFFFFFFFFFC808        BE107F69                        bne             r1,r0,sac971
FFFFFFFFFFFFCEF0        BE107F69                        bne             r1,r0,sac971
FFFFFFFFFFFFC80C        E69C1026                ; SETLO
FFFFFFFFFFFFCEF4        E69C1026                ; SETLO
FFFFFFFFFFFFC810        EE800003                ; SETMID
FFFFFFFFFFFFCEF8        EE800003                ; SETMID
FFFFFFFFFFFFC814        6A0D0429                        outc    r1,AC97+0x26    ; check status at reg h26, wait for
FFFFFFFFFFFFCEFC        6A0D0421                        inch    r1,AC97+0x26    ; check status at reg h26, wait for
FFFFFFFFFFFFC818        1410800F                        andi    r1,r1,#0x0F             ; analogue to be ready
FFFFFFFFFFFFCF00        1410800F                        andi    r1,r1,#0x0F             ; analogue to be ready
FFFFFFFFFFFFC81C        B21FF30F                        bnei    r1,#0x0F,sac974
FFFFFFFFFFFFCF04        B21FF30F                        bnei    r1,#0x0F,sac974
FFFFFFFFFFFFC820                                 sac973:
FFFFFFFFFFFFCF08                                 sac973:
FFFFFFFFFFFFC820        E69C1002                ; SETLO
FFFFFFFFFFFFCF08        E69C1002                ; SETLO
FFFFFFFFFFFFC824        EE800003                ; SETMID
FFFFFFFFFFFFCF0C        EE800003                ; SETMID
FFFFFFFFFFFFC828        6A0D0029                        outc    r0,AC97+2               ; master volume, 0db attenuation, mute off
FFFFFFFFFFFFCF10        6A0D0029                        outc    r0,AC97+2               ; master volume, 0db attenuation, mute off
FFFFFFFFFFFFC82C        E69C1004                ; SETLO
FFFFFFFFFFFFCF14        E69C1004                ; SETLO
FFFFFFFFFFFFC830        EE800003                ; SETMID
FFFFFFFFFFFFCF18        EE800003                ; SETMID
FFFFFFFFFFFFC834        6A0D0029                        outc    r0,AC97+4               ; headphone volume, 0db attenuation, mute off
FFFFFFFFFFFFCF1C        6A0D0029                        outc    r0,AC97+4               ; headphone volume, 0db attenuation, mute off
FFFFFFFFFFFFC838        E69C1018                ; SETLO
FFFFFFFFFFFFCF20        E69C1018                ; SETLO
FFFFFFFFFFFFC83C        EE800003                ; SETMID
FFFFFFFFFFFFCF24        EE800003                ; SETMID
FFFFFFFFFFFFC840        6A0D0029                        outc    r0,AC97+0x18    ; PCM gain (mixer) mute off, no attenuation
FFFFFFFFFFFFCF28        6A0D0029                        outc    r0,AC97+0x18    ; PCM gain (mixer) mute off, no attenuation
FFFFFFFFFFFFC844        E69C100A                ; SETLO
FFFFFFFFFFFFCF2C        E69C100A                ; SETLO
FFFFFFFFFFFFC848        EE800003                ; SETMID
FFFFFFFFFFFFCF30        EE800003                ; SETMID
FFFFFFFFFFFFC84C        6A0D0029                        outc    r0,AC97+0x0A    ; mute PC beep
FFFFFFFFFFFFCF34        6A0D0029                        outc    r0,AC97+0x0A    ; mute PC beep
FFFFFFFFFFFFC850        E07F8000                        setlo   r1,#0x8000              ; bypass 3D sound
FFFFFFFFFFFFCF38        E07F8000                        setlo   r1,#0x8000              ; bypass 3D sound
FFFFFFFFFFFFC854        E69C1020                ; SETLO
FFFFFFFFFFFFCF3C        E69C1020                ; SETLO
FFFFFFFFFFFFC858        EE800003                ; SETMID
FFFFFFFFFFFFCF40        EE800003                ; SETMID
FFFFFFFFFFFFC85C        6A0D0429                        outc    r1,AC97+0x20
FFFFFFFFFFFFCF44        6A0D0429                        outc    r1,AC97+0x20
FFFFFFFFFFFFC860                                 sac972:
FFFFFFFFFFFFCF48                                 sac972:
FFFFFFFFFFFFC860        31FFEE08                        call    KeybdGetChar
FFFFFFFFFFFFCF48        31FFEF07                        call    KeybdGetChar
FFFFFFFFFFFFC864        B0100503                        beqi    r1,#CTRLC,sac975
FFFFFFFFFFFFCF4C        B0100503                        beqi    r1,#CTRLC,sac975
FFFFFFFFFFFFC868        E69C1068                ; SETLO
FFFFFFFFFFFFCF50        E69C1068                ; SETLO
FFFFFFFFFFFFC86C        EE800003                ; SETMID
FFFFFFFFFFFFCF54        EE800003                ; SETMID
FFFFFFFFFFFFC870        6A0D0429                        outc    r1,AC97+0x68    ; wait for dirty bits to clear
FFFFFFFFFFFFCF58        6A0D0421                        inch    r1,AC97+0x68    ; wait for dirty bits to clear
FFFFFFFFFFFFC874        BE107F69                        bne             r1,r0,sac972    ; wait a while for the settings to take effect
FFFFFFFFFFFFCF5C        BE107F69                        bne             r1,r0,sac972    ; wait a while for the settings to take effect
FFFFFFFFFFFFC878                                 sac975:
FFFFFFFFFFFFCF60                                 sac975:
FFFFFFFFFFFFC878        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFCF60        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFC87C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFCF64        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC880        37EF8010                        ret             #16
FFFFFFFFFFFFCF68        37EF8010                        ret             #16
 
 
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ; Sound a 800 Hz beep
                                                 ; Sound a 800 Hz beep
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC884                                 Beep:
FFFFFFFFFFFFCF6C                                 Beep:
FFFFFFFFFFFFC884        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFCF6C        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFC888        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFCF70        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC88C        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFCF74        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFC890        E0400008                        setlo   r1,#8
FFFFFFFFFFFFCF78        E0400008                        setlo   r1,#8
FFFFFFFFFFFFC894        E69C0600                ; SETLO
FFFFFFFFFFFFCF7C        E69C0600                ; SETLO
FFFFFFFFFFFFC898        EE800003                ; SETMID
FFFFFFFFFFFFCF80        EE800003                ; SETMID
FFFFFFFFFFFFC89C        6A0D0428                        outb    r1,LED
FFFFFFFFFFFFCF84        6A0D0428                        outb    r1,LED
FFFFFFFFFFFFC8A0        1600800F                        ori             r1,r0,#15               ; master volume to max
FFFFFFFFFFFFCF88        1600800F                        ori             r1,r0,#15               ; master volume to max
FFFFFFFFFFFFC8A4        E6950080                ; SETLO
FFFFFFFFFFFFCF8C        E6950080                ; SETLO
FFFFFFFFFFFFC8A8        EE800003                ; SETMID
FFFFFFFFFFFFCF90        EE800003                ; SETMID
FFFFFFFFFFFFC8AC        6A0D0429                        outc    r1,PSG+128
FFFFFFFFFFFFCF94        6A0D0429                        outc    r1,PSG+128
FFFFFFFFFFFFC8B0        1600B46E                        ori             r1,r0,#13422    ; 800Hz
FFFFFFFFFFFFCF98        1600B46E                        ori             r1,r0,#13422    ; 800Hz
FFFFFFFFFFFFC8B4        E6950000                ; SETLO
FFFFFFFFFFFFCF9C        E6950000                ; SETLO
FFFFFFFFFFFFC8B8        EE800003                ; SETMID
FFFFFFFFFFFFCFA0        EE800003                ; SETMID
FFFFFFFFFFFFC8BC        6A0D0429                        outc    r1,PSGFREQ0
FFFFFFFFFFFFCFA4        6A0D0429                        outc    r1,PSGFREQ0
FFFFFFFFFFFFC8C0        E0400009                        setlo   r1,#9
FFFFFFFFFFFFCFA8        E0400009                        setlo   r1,#9
FFFFFFFFFFFFC8C4        E69C0600                ; SETLO
FFFFFFFFFFFFCFAC        E69C0600                ; SETLO
FFFFFFFFFFFFC8C8        EE800003                ; SETMID
FFFFFFFFFFFFCFB0        EE800003                ; SETMID
FFFFFFFFFFFFC8CC        6A0D0428                        outb    r1,LED
FFFFFFFFFFFFCFB4        6A0D0428                        outb    r1,LED
                                                        ; decay  (16.384 ms)2
                                                        ; decay  (16.384 ms)2
                                                        ; attack (8.192 ms)1
                                                        ; attack (8.192 ms)1
                                                        ; release (1.024 s)A
                                                        ; release (1.024 s)A
                                                        ; sustain level C
                                                        ; sustain level C
FFFFFFFFFFFFC8D0        E07FCA12                        setlo   r1,#0xCA12
FFFFFFFFFFFFCFB8        E07FCA12                        setlo   r1,#0xCA12
FFFFFFFFFFFFC8D4        E6950006                ; SETLO
FFFFFFFFFFFFCFBC        E6950006                ; SETLO
FFFFFFFFFFFFC8D8        EE800003                ; SETMID
FFFFFFFFFFFFCFC0        EE800003                ; SETMID
FFFFFFFFFFFFC8DC        6A0D0429                        outc    r1,PSGADSR0
FFFFFFFFFFFFCFC4        6A0D0429                        outc    r1,PSGADSR0
FFFFFFFFFFFFC8E0        16009104                        ori             r1,r0,#0x1104   ; gate, output enable, triangle waveform
FFFFFFFFFFFFCFC8        16009104                        ori             r1,r0,#0x1104   ; gate, output enable, triangle waveform
FFFFFFFFFFFFC8E4        E6950004                ; SETLO
FFFFFFFFFFFFCFCC        E6950004                ; SETLO
FFFFFFFFFFFFC8E8        EE800003                ; SETMID
FFFFFFFFFFFFCFD0        EE800003                ; SETMID
FFFFFFFFFFFFC8EC        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFCFD4        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFC8F0        E6BD7840                ; SETLO
FFFFFFFFFFFFCFD8        E6A625A0                ; SETLO
FFFFFFFFFFFFC8F4        EE800005                ; SETMID
FFFFFFFFFFFFCFDC        EE800000                ; SETMID
FFFFFFFFFFFFC8F8        040D0409                        ori             r1,r0,#25000000 ; delay about 1s
FFFFFFFFFFFFCFE0        040D0409                        ori             r1,r0,#2500000  ; delay about 1s
FFFFFFFFFFFFC8FC                                 beep1:
FFFFFFFFFFFFCFE4                                 beep1:
FFFFFFFFFFFFC8FC        BE00800F                        loop    r1,beep1
FFFFFFFFFFFFCFE4        BE00800F                        loop    r1,beep1
FFFFFFFFFFFFC900        E040000D                        setlo   r1,#13
FFFFFFFFFFFFCFE8        E040000D                        setlo   r1,#13
FFFFFFFFFFFFC904        E69C0600                ; SETLO
FFFFFFFFFFFFCFEC        E69C0600                ; SETLO
FFFFFFFFFFFFC908        EE800003                ; SETMID
FFFFFFFFFFFFCFF0        EE800003                ; SETMID
FFFFFFFFFFFFC90C        6A0D0428                        outb    r1,LED
FFFFFFFFFFFFCFF4        6A0D0428                        outb    r1,LED
FFFFFFFFFFFFC910        16008104                        ori             r1,r0,#0x0104   ; gate off, output enable, triangle waveform
FFFFFFFFFFFFCFF8        16008104                        ori             r1,r0,#0x0104   ; gate off, output enable, triangle waveform
FFFFFFFFFFFFC914        E6950004                ; SETLO
FFFFFFFFFFFFCFFC        E6950004                ; SETLO
FFFFFFFFFFFFC918        EE800003                ; SETMID
FFFFFFFFFFFFD000        EE800003                ; SETMID
FFFFFFFFFFFFC91C        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFD004        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFC920        E6BD7840                ; SETLO
FFFFFFFFFFFFD008        E6A625A0                ; SETLO
FFFFFFFFFFFFC924        EE800005                ; SETMID
FFFFFFFFFFFFD00C        EE800000                ; SETMID
FFFFFFFFFFFFC928        040D0409                        ori             r1,r0,#25000000 ; delay about 1s
FFFFFFFFFFFFD010        040D0409                        ori             r1,r0,#2500000  ; delay about 1s
FFFFFFFFFFFFC92C                                 beep2:
FFFFFFFFFFFFD014                                 beep2:
FFFFFFFFFFFFC92C        BE00800F                        loop    r1,beep2
FFFFFFFFFFFFD014        BE00800F                        loop    r1,beep2
FFFFFFFFFFFFC930        E0400010                        setlo   r1,#16
FFFFFFFFFFFFD018        E0400010                        setlo   r1,#16
FFFFFFFFFFFFC934        E69C0600                ; SETLO
FFFFFFFFFFFFD01C        E69C0600                ; SETLO
FFFFFFFFFFFFC938        EE800003                ; SETMID
FFFFFFFFFFFFD020        EE800003                ; SETMID
FFFFFFFFFFFFC93C        6A0D0428                        outb    r1,LED
FFFFFFFFFFFFD024        6A0D0428                        outb    r1,LED
FFFFFFFFFFFFC940        16008000                        ori             r1,r0,#0x0000   ; gate off, output enable off, no waveform
FFFFFFFFFFFFD028        16008000                        ori             r1,r0,#0x0000   ; gate off, output enable off, no waveform
FFFFFFFFFFFFC944        E6950004                ; SETLO
FFFFFFFFFFFFD02C        E6950004                ; SETLO
FFFFFFFFFFFFC948        EE800003                ; SETMID
FFFFFFFFFFFFD030        EE800003                ; SETMID
FFFFFFFFFFFFC94C        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFD034        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFC950        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFD038        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFC954        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFD03C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFC958        37EF8010                        ret             #16
FFFFFFFFFFFFD040        37EF8010                        ret             #16
 
 
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ;--------------------------------------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFC95C                                 Piano:
FFFFFFFFFFFFD044                                 Piano:
FFFFFFFFFFFFC95C        1600800F                        ori             r1,r0,#15               ; master volume to max
FFFFFFFFFFFFD044        1600800F                        ori             r1,r0,#15               ; master volume to max
FFFFFFFFFFFFC960        E6950080                ; SETLO
FFFFFFFFFFFFD048        E6950080                ; SETLO
FFFFFFFFFFFFC964        EE800003                ; SETMID
FFFFFFFFFFFFD04C        EE800003                ; SETMID
FFFFFFFFFFFFC968        6A0D0429                        outc    r1,PSG+128
FFFFFFFFFFFFD050        6A0D0429                        outc    r1,PSG+128
FFFFFFFFFFFFC96C                                 playnt:
FFFFFFFFFFFFD054                                 playnt:
FFFFFFFFFFFFC96C        31FFEE08                        call    KeybdGetChar
FFFFFFFFFFFFD054        31FFEF07                        call    KeybdGetChar
FFFFFFFFFFFFC970        B01E3A03                        beqi    r1,#CTRLC,Monitor
FFFFFFFFFFFFD058        B01DF403                        beqi    r1,#CTRLC,Monitor
FFFFFFFFFFFFC974        B0100861                        beqi    r1,#'a',playnt1a
FFFFFFFFFFFFD05C        B0100861                        beqi    r1,#'a',playnt1a
FFFFFFFFFFFFC978        B0100A62                        beqi    r1,#'b',playnt1b
FFFFFFFFFFFFD060        B0100A62                        beqi    r1,#'b',playnt1b
FFFFFFFFFFFFC97C        B0100C63                        beqi    r1,#'c',playnt1c
FFFFFFFFFFFFD064        B0100C63                        beqi    r1,#'c',playnt1c
FFFFFFFFFFFFC980        B0100E64                        beqi    r1,#'d',playnt1d
FFFFFFFFFFFFD068        B0100E64                        beqi    r1,#'d',playnt1d
FFFFFFFFFFFFC984        B0101065                        beqi    r1,#'e',playnt1e
FFFFFFFFFFFFD06C        B0101065                        beqi    r1,#'e',playnt1e
FFFFFFFFFFFFC988        B0101266                        beqi    r1,#'f',playnt1f
FFFFFFFFFFFFD070        B0101266                        beqi    r1,#'f',playnt1f
FFFFFFFFFFFFC98C        B0101467                        beqi    r1,#'g',playnt1g
FFFFFFFFFFFFD074        B0101467                        beqi    r1,#'g',playnt1g
FFFFFFFFFFFFC990        BE007EEA                        bra             playnt
FFFFFFFFFFFFD078        BE007EEA                        bra             playnt
 
 
FFFFFFFFFFFFC994                                 playnt1a:
FFFFFFFFFFFFD07C                                 playnt1a:
FFFFFFFFFFFFC994        E0401C31                        setlo   r1,#7217
FFFFFFFFFFFFD07C        E0401C31                        setlo   r1,#7217
FFFFFFFFFFFFC998        31FFF27A                        call    Tone
FFFFFFFFFFFFD080        31FFF434                        call    Tone
FFFFFFFFFFFFC99C        BE007E8A                        bra             playnt
FFFFFFFFFFFFD084        BE007E8A                        bra             playnt
FFFFFFFFFFFFC9A0                                 playnt1b:
FFFFFFFFFFFFD088                                 playnt1b:
FFFFFFFFFFFFC9A0        E0401FA5                        setlo   r1,#8101
FFFFFFFFFFFFD088        E0401FA5                        setlo   r1,#8101
FFFFFFFFFFFFC9A4        31FFF27A                        call    Tone
FFFFFFFFFFFFD08C        31FFF434                        call    Tone
FFFFFFFFFFFFC9A8        BE007E2A                        bra             playnt
FFFFFFFFFFFFD090        BE007E2A                        bra             playnt
FFFFFFFFFFFFC9AC                                 playnt1c:
FFFFFFFFFFFFD094                                 playnt1c:
FFFFFFFFFFFFC9AC        E04010C3                        setlo   r1,#4291
FFFFFFFFFFFFD094        E04010C3                        setlo   r1,#4291
FFFFFFFFFFFFC9B0        31FFF27A                        call    Tone
FFFFFFFFFFFFD098        31FFF434                        call    Tone
FFFFFFFFFFFFC9B4        BE007DCA                        bra             playnt
FFFFFFFFFFFFD09C        BE007DCA                        bra             playnt
FFFFFFFFFFFFC9B8                                 playnt1d:
FFFFFFFFFFFFD0A0                                 playnt1d:
FFFFFFFFFFFFC9B8        E04012D1                        setlo   r1,#4817
FFFFFFFFFFFFD0A0        E04012D1                        setlo   r1,#4817
FFFFFFFFFFFFC9BC        31FFF27A                        call    Tone
FFFFFFFFFFFFD0A4        31FFF434                        call    Tone
FFFFFFFFFFFFC9C0        BE007D6A                        bra             playnt
FFFFFFFFFFFFD0A8        BE007D6A                        bra             playnt
FFFFFFFFFFFFC9C4                                 playnt1e:
FFFFFFFFFFFFD0AC                                 playnt1e:
FFFFFFFFFFFFC9C4        E040151F                        setlo   r1,#5407
FFFFFFFFFFFFD0AC        E040151F                        setlo   r1,#5407
FFFFFFFFFFFFC9C8        31FFF27A                        call    Tone
FFFFFFFFFFFFD0B0        31FFF434                        call    Tone
FFFFFFFFFFFFC9CC        BE007D0A                        bra             playnt
FFFFFFFFFFFFD0B4        BE007D0A                        bra             playnt
FFFFFFFFFFFFC9D0                                 playnt1f:
FFFFFFFFFFFFD0B8                                 playnt1f:
FFFFFFFFFFFFC9D0        E0401660                        setlo   r1,#5728
FFFFFFFFFFFFD0B8        E0401660                        setlo   r1,#5728
FFFFFFFFFFFFC9D4        31FFF27A                        call    Tone
FFFFFFFFFFFFD0BC        31FFF434                        call    Tone
FFFFFFFFFFFFC9D8        BE007CAA                        bra             playnt
FFFFFFFFFFFFD0C0        BE007CAA                        bra             playnt
FFFFFFFFFFFFC9DC                                 playnt1g:
FFFFFFFFFFFFD0C4                                 playnt1g:
FFFFFFFFFFFFC9DC        E040191E                        setlo   r1,#6430
FFFFFFFFFFFFD0C4        E040191E                        setlo   r1,#6430
FFFFFFFFFFFFC9E0        31FFF27A                        call    Tone
FFFFFFFFFFFFD0C8        31FFF434                        call    Tone
FFFFFFFFFFFFC9E4        BE007C4A                        bra             playnt
FFFFFFFFFFFFD0CC        BE007C4A                        bra             playnt
 
 
FFFFFFFFFFFFC9E8                                 Tone:
FFFFFFFFFFFFD0D0                                 Tone:
FFFFFFFFFFFFC9E8        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFD0D0        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFC9EC        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFD0D4        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFC9F0        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFD0D8        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFC9F4        E6950000                ; SETLO
FFFFFFFFFFFFD0DC        E6950000                ; SETLO
FFFFFFFFFFFFC9F8        EE800003                ; SETMID
FFFFFFFFFFFFD0E0        EE800003                ; SETMID
FFFFFFFFFFFFC9FC        6A0D0429                        outc    r1,PSGFREQ0
FFFFFFFFFFFFD0E4        6A0D0429                        outc    r1,PSGFREQ0
                                                        ; decay  (16.384 ms)2
                                                        ; decay  (16.384 ms)2
                                                        ; attack (8.192 ms)1
                                                        ; attack (8.192 ms)1
                                                        ; release (1.024 s)A
                                                        ; release (1.024 s)A
                                                        ; sustain level C
                                                        ; sustain level C
FFFFFFFFFFFFCA00        E07FCA12                        setlo   r1,#0xCA12
FFFFFFFFFFFFD0E8        E07FCA12                        setlo   r1,#0xCA12
FFFFFFFFFFFFCA04        E6950006                ; SETLO
FFFFFFFFFFFFD0EC        E6950006                ; SETLO
FFFFFFFFFFFFCA08        EE800003                ; SETMID
FFFFFFFFFFFFD0F0        EE800003                ; SETMID
FFFFFFFFFFFFCA0C        6A0D0429                        outc    r1,PSGADSR0
FFFFFFFFFFFFD0F4        6A0D0429                        outc    r1,PSGADSR0
FFFFFFFFFFFFCA10        16009104                        ori             r1,r0,#0x1104   ; gate, output enable, triangle waveform
FFFFFFFFFFFFD0F8        16009104                        ori             r1,r0,#0x1104   ; gate, output enable, triangle waveform
FFFFFFFFFFFFCA14        E6950004                ; SETLO
FFFFFFFFFFFFD0FC        E6950004                ; SETLO
FFFFFFFFFFFFCA18        EE800003                ; SETMID
FFFFFFFFFFFFD100        EE800003                ; SETMID
FFFFFFFFFFFFCA1C        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFD104        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFCA20        E683D090                ; SETLO
FFFFFFFFFFFFD108        E683D090                ; SETLO
FFFFFFFFFFFFCA24        040D0409                        ori             r1,r0,#250000   ; delay about 10ms
FFFFFFFFFFFFD10C        040D0409                        ori             r1,r0,#250000   ; delay about 10ms
FFFFFFFFFFFFCA28                                 tone1:
FFFFFFFFFFFFD110                                 tone1:
FFFFFFFFFFFFCA28        BE00800F                        loop    r1,tone1
FFFFFFFFFFFFD110        BE00800F                        loop    r1,tone1
FFFFFFFFFFFFCA2C        16008104                        ori             r1,r0,#0x0104   ; gate off, output enable, triangle waveform
FFFFFFFFFFFFD114        16008104                        ori             r1,r0,#0x0104   ; gate off, output enable, triangle waveform
FFFFFFFFFFFFCA30        E6950004                ; SETLO
FFFFFFFFFFFFD118        E6950004                ; SETLO
FFFFFFFFFFFFCA34        EE800003                ; SETMID
FFFFFFFFFFFFD11C        EE800003                ; SETMID
FFFFFFFFFFFFCA38        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFD120        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFCA3C        E683D090                ; SETLO
FFFFFFFFFFFFD124        E683D090                ; SETLO
FFFFFFFFFFFFCA40        040D0409                        ori             r1,r0,#250000   ; delay about 10ms
FFFFFFFFFFFFD128        040D0409                        ori             r1,r0,#250000   ; delay about 10ms
FFFFFFFFFFFFCA44                                 tone2:
FFFFFFFFFFFFD12C                                 tone2:
FFFFFFFFFFFFCA44        BE00800F                        loop    r1,tone2
FFFFFFFFFFFFD12C        BE00800F                        loop    r1,tone2
FFFFFFFFFFFFCA48        16008000                        ori             r1,r0,#0x0000   ; gate off, output enable off, no waveform
FFFFFFFFFFFFD130        16008000                        ori             r1,r0,#0x0000   ; gate off, output enable off, no waveform
FFFFFFFFFFFFCA4C        E6950004                ; SETLO
FFFFFFFFFFFFD134        E6950004                ; SETLO
FFFFFFFFFFFFCA50        EE800003                ; SETMID
FFFFFFFFFFFFD138        EE800003                ; SETMID
FFFFFFFFFFFFCA54        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFD13C        6A0D0429                        outc    r1,PSGCTRL0
FFFFFFFFFFFFCA58        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFD140        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFCA5C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFD144        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFCA60        37EF8010                        ret             #16
FFFFFFFFFFFFD148        37EF8010                        ret             #16
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;==============================================================================
FFFFFFFFFFFFCA64                                 SetupRasterIRQ:
FFFFFFFFFFFFD14C                                 SetupRasterIRQ:
FFFFFFFFFFFFCA64        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFD14C        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFCA68        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFD150        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFCA6C        E04000C8                        setlo   r1,#200
FFFFFFFFFFFFD154        E04000C8                        setlo   r1,#200
FFFFFFFFFFFFCA70        E69A0100                ; SETLO
FFFFFFFFFFFFD158        E69A0100                ; SETLO
FFFFFFFFFFFFCA74        EE800003                ; SETMID
FFFFFFFFFFFFD15C        EE800003                ; SETMID
FFFFFFFFFFFFCA78        6A0D0429                        outc    r1,RASTERIRQ
FFFFFFFFFFFFD160        6A0D0429                        outc    r1,RASTERIRQ
FFFFFFFFFFFFCA7C        E04000F0                        setlo   r1,#240
FFFFFFFFFFFFD164        E04000F0                        setlo   r1,#240
FFFFFFFFFFFFCA80        E69A0102                ; SETLO
FFFFFFFFFFFFD168        E69A0102                ; SETLO
FFFFFFFFFFFFCA84        EE800003                ; SETMID
FFFFFFFFFFFFD16C        EE800003                ; SETMID
FFFFFFFFFFFFCA88        6A0D0429                        outc    r1,RASTERIRQ+2
FFFFFFFFFFFFD170        6A0D0429                        outc    r1,RASTERIRQ+2
FFFFFFFFFFFFCA8C        E0400118                        setlo   r1,#280
FFFFFFFFFFFFD174        E0400118                        setlo   r1,#280
FFFFFFFFFFFFCA90        E69A0104                ; SETLO
FFFFFFFFFFFFD178        E69A0104                ; SETLO
FFFFFFFFFFFFCA94        EE800003                ; SETMID
FFFFFFFFFFFFD17C        EE800003                ; SETMID
FFFFFFFFFFFFCA98        6A0D0429                        outc    r1,RASTERIRQ+4
FFFFFFFFFFFFD180        6A0D0429                        outc    r1,RASTERIRQ+4
FFFFFFFFFFFFCA9C        E0400140                        setlo   r1,#320
FFFFFFFFFFFFD184        E0400140                        setlo   r1,#320
FFFFFFFFFFFFCAA0        E69A0106                ; SETLO
FFFFFFFFFFFFD188        E69A0106                ; SETLO
FFFFFFFFFFFFCAA4        EE800003                ; SETMID
FFFFFFFFFFFFD18C        EE800003                ; SETMID
FFFFFFFFFFFFCAA8        6A0D0429                        outc    r1,RASTERIRQ+6
FFFFFFFFFFFFD190        6A0D0429                        outc    r1,RASTERIRQ+6
FFFFFFFFFFFFCAAC        E0400168                        setlo   r1,#360
FFFFFFFFFFFFD194        E0400168                        setlo   r1,#360
FFFFFFFFFFFFCAB0        E69A0108                ; SETLO
FFFFFFFFFFFFD198        E69A0108                ; SETLO
FFFFFFFFFFFFCAB4        EE800003                ; SETMID
FFFFFFFFFFFFD19C        EE800003                ; SETMID
FFFFFFFFFFFFCAB8        6A0D0429                        outc    r1,RASTERIRQ+8
FFFFFFFFFFFFD1A0        6A0D0429                        outc    r1,RASTERIRQ+8
FFFFFFFFFFFFCABC        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFD1A4        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFCAC0        37EF8008                        ret             #8
FFFFFFFFFFFFD1A8        37EF8008                        ret             #8
 
 
FFFFFFFFFFFFCAC4                                 RasterIRQfn:
FFFFFFFFFFFFD1AC                                 RasterIRQfn:
FFFFFFFFFFFFCAC4        E69A011E                ; SETLO
FFFFFFFFFFFFD1AC        E69A011E                ; SETLO
FFFFFFFFFFFFCAC8        EE800003                ; SETMID
FFFFFFFFFFFFD1B0        EE800003                ; SETMID
FFFFFFFFFFFFCACC        6A0D0421                        inch    r1,RASTERIRQ+30         ; get the raster compare register # (clears IRQ)
FFFFFFFFFFFFD1B4        6A0D0421                        inch    r1,RASTERIRQ+30         ; get the raster compare register # (clears IRQ)
FFFFFFFFFFFFCAD0        B0100901                        beqi    r1,#1,rirq1
FFFFFFFFFFFFD1B8        B0100901                        beqi    r1,#1,rirq1
FFFFFFFFFFFFCAD4        B0100802                        beqi    r1,#2,rirq2
FFFFFFFFFFFFD1BC        B0100802                        beqi    r1,#2,rirq2
FFFFFFFFFFFFCAD8        B0100703                        beqi    r1,#3,rirq3
FFFFFFFFFFFFD1C0        B0100703                        beqi    r1,#3,rirq3
FFFFFFFFFFFFCADC        B0100604                        beqi    r1,#4,rirq4
FFFFFFFFFFFFD1C4        B0100604                        beqi    r1,#4,rirq4
FFFFFFFFFFFFCAE0        B0100505                        beqi    r1,#5,rirq5
FFFFFFFFFFFFD1C8        B0100505                        beqi    r1,#5,rirq5
FFFFFFFFFFFFCAE4        B0100406                        beqi    r1,#6,rirq6
FFFFFFFFFFFFD1CC        B0100406                        beqi    r1,#6,rirq6
FFFFFFFFFFFFCAE8        B0100307                        beqi    r1,#7,rirq7
FFFFFFFFFFFFD1D0        B0100307                        beqi    r1,#7,rirq7
FFFFFFFFFFFFCAEC        B0100208                        beqi    r1,#8,rirq8
FFFFFFFFFFFFD1D4        B0100208                        beqi    r1,#8,rirq8
FFFFFFFFFFFFCAF0        37EF8000                        ret
FFFFFFFFFFFFD1D8        37EF8000                        ret
FFFFFFFFFFFFCAF4                                 rirq1:
FFFFFFFFFFFFD1DC                                 rirq1:
FFFFFFFFFFFFCAF4                                 rirq2:
FFFFFFFFFFFFD1DC                                 rirq2:
FFFFFFFFFFFFCAF4                                 rirq3:
FFFFFFFFFFFFD1DC                                 rirq3:
FFFFFFFFFFFFCAF4                                 rirq4:
FFFFFFFFFFFFD1DC                                 rirq4:
FFFFFFFFFFFFCAF4                                 rirq5:
FFFFFFFFFFFFD1DC                                 rirq5:
FFFFFFFFFFFFCAF4                                 rirq6:
FFFFFFFFFFFFD1DC                                 rirq6:
FFFFFFFFFFFFCAF4                                 rirq7:
FFFFFFFFFFFFD1DC                                 rirq7:
FFFFFFFFFFFFCAF4                                 rirq8:
FFFFFFFFFFFFD1DC                                 rirq8:
FFFFFFFFFFFFCAF4        1A108028                        mului   r1,r1,#40
FFFFFFFFFFFFD1DC        1A108028                        mului   r1,r1,#40
FFFFFFFFFFFFCAF8        0A1080CC                        addui   r1,r1,#204
FFFFFFFFFFFFD1E0        0A1080CC                        addui   r1,r1,#204
FFFFFFFFFFFFCAFC        E69AD002                ; SETLO
FFFFFFFFFFFFD1E4        E69AD002                ; SETLO
FFFFFFFFFFFFCB00        EE800003                ; SETMID
FFFFFFFFFFFFD1E8        EE800003                ; SETMID
FFFFFFFFFFFFCB04        6A0D0429                        outc    r1,SPRITEREGS+2
FFFFFFFFFFFFD1EC        6A0D0429                        outc    r1,SPRITEREGS+2
FFFFFFFFFFFFCB08        E69AD012                ; SETLO
FFFFFFFFFFFFD1F0        E69AD012                ; SETLO
FFFFFFFFFFFFCB0C        EE800003                ; SETMID
FFFFFFFFFFFFD1F4        EE800003                ; SETMID
FFFFFFFFFFFFCB10        6A0D0429                        outc    r1,SPRITEREGS+18
FFFFFFFFFFFFD1F8        6A0D0429                        outc    r1,SPRITEREGS+18
FFFFFFFFFFFFCB14        E69AD022                ; SETLO
FFFFFFFFFFFFD1FC        E69AD022                ; SETLO
FFFFFFFFFFFFCB18        EE800003                ; SETMID
FFFFFFFFFFFFD200        EE800003                ; SETMID
FFFFFFFFFFFFCB1C        6A0D0429                        outc    r1,SPRITEREGS+34
FFFFFFFFFFFFD204        6A0D0429                        outc    r1,SPRITEREGS+34
FFFFFFFFFFFFCB20        E69AD032                ; SETLO
FFFFFFFFFFFFD208        E69AD032                ; SETLO
FFFFFFFFFFFFCB24        EE800003                ; SETMID
FFFFFFFFFFFFD20C        EE800003                ; SETMID
FFFFFFFFFFFFCB28        6A0D0429                        outc    r1,SPRITEREGS+50
FFFFFFFFFFFFD210        6A0D0429                        outc    r1,SPRITEREGS+50
FFFFFFFFFFFFCB2C        E69AD042                ; SETLO
FFFFFFFFFFFFD214        E69AD042                ; SETLO
FFFFFFFFFFFFCB30        EE800003                ; SETMID
FFFFFFFFFFFFD218        EE800003                ; SETMID
FFFFFFFFFFFFCB34        6A0D0429                        outc    r1,SPRITEREGS+66
FFFFFFFFFFFFD21C        6A0D0429                        outc    r1,SPRITEREGS+66
FFFFFFFFFFFFCB38        E69AD052                ; SETLO
FFFFFFFFFFFFD220        E69AD052                ; SETLO
FFFFFFFFFFFFCB3C        EE800003                ; SETMID
FFFFFFFFFFFFD224        EE800003                ; SETMID
FFFFFFFFFFFFCB40        6A0D0429                        outc    r1,SPRITEREGS+82
FFFFFFFFFFFFD228        6A0D0429                        outc    r1,SPRITEREGS+82
FFFFFFFFFFFFCB44        E69AD062                ; SETLO
FFFFFFFFFFFFD22C        E69AD062                ; SETLO
FFFFFFFFFFFFCB48        EE800003                ; SETMID
FFFFFFFFFFFFD230        EE800003                ; SETMID
FFFFFFFFFFFFCB4C        6A0D0429                        outc    r1,SPRITEREGS+98
FFFFFFFFFFFFD234        6A0D0429                        outc    r1,SPRITEREGS+98
FFFFFFFFFFFFCB50        E69AD072                ; SETLO
FFFFFFFFFFFFD238        E69AD072                ; SETLO
FFFFFFFFFFFFCB54        EE800003                ; SETMID
FFFFFFFFFFFFD23C        EE800003                ; SETMID
FFFFFFFFFFFFCB58        6A0D0429                        outc    r1,SPRITEREGS+114
FFFFFFFFFFFFD240        6A0D0429                        outc    r1,SPRITEREGS+114
FFFFFFFFFFFFCB5C        37EF8000                        ret
FFFFFFFFFFFFD244        37EF8000                        ret
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
FFFFFFFFFFFFCB60                                 DisplayDatetime:
FFFFFFFFFFFFD248                                 DisplayDatetime:
FFFFFFFFFFFFCB60        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFD248        0FEF0030                        subui   sp,sp,#48
FFFFFFFFFFFFCB64        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFD24C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFCB68        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFD250        67E10008                        sw              r2,8[sp]
FFFFFFFFFFFFCB6C        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFD254        67E18010                        sw              r3,16[sp]
FFFFFFFFFFFFCB70        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFD258        67E20018                        sw              r4,24[sp]
FFFFFFFFFFFFCB74        31FFEEBA                        call    CursorOff
FFFFFFFFFFFFD25C        67E28020                        sw              r5,32[sp]
FFFFFFFFFFFFCB78        42011416                        lc              r2,CursorRow
FFFFFFFFFFFFD260        67EF8018                        sw              lr,24[sp]
FFFFFFFFFFFFCB7C        42019418                        lc              r3,CursorCol
FFFFFFFFFFFFD264        31FFEFF2                        call    CursorOff
FFFFFFFFFFFFCB80        E69C0418                ; SETLO
FFFFFFFFFFFFD268        16008003                        lw              r1,#3                           ; get cursor position
FFFFFFFFFFFFCB84        EE800003                ; SETMID
FFFFFFFFFFFFD26C        0181CD17                        syscall #410
FFFFFFFFFFFFCB88        6A0D002B                        outw    r0,DATETIME+24          ; trigger a snapshot
FFFFFFFFFFFFD270        02120009                        mov             r4,r1                           ; r4 = row
FFFFFFFFFFFFCB8C        1600802E                        lw              r1,#46                          ; move cursor down to last display line
FFFFFFFFFFFFD274        02228009                        mov             r5,r2                           ; r5 = col
FFFFFFFFFFFFCB90        62009416                        sc              r1,CursorRow
FFFFFFFFFFFFD278        16008002                        lw              r1,#2                           ; set cursor position
FFFFFFFFFFFFCB94        16008040                        lw              r1,#64
FFFFFFFFFFFFD27C        1601002E                        lw              r2,#46                          ; move cursor down to last display line
FFFFFFFFFFFFCB98        62009418                        sc              r1,CursorCol
FFFFFFFFFFFFD280        16018040                        lw              r3,#64
FFFFFFFFFFFFCB9C        E69C0400                ; SETLO
FFFFFFFFFFFFD284        0181CD17                        syscall #410
FFFFFFFFFFFFCBA0        EE800003                ; SETMID
FFFFFFFFFFFFD288        16008001                        lw              r1,#1                           ; get the snapshotted date and time
FFFFFFFFFFFFCBA4        6A0D0423                        inw             r1,DATETIME                     ; get the snapshotted date and time
FFFFFFFFFFFFD28C        0181D017                        syscall #416
FFFFFFFFFFFFCBA8        31FFF019                        call    DisplayWord                     ; display on screen
FFFFFFFFFFFFD290        31FFF169                        call    DisplayWord                     ; display on screen
FFFFFFFFFFFFCBAC        62011416                        sc              r2,CursorRow            ; restore cursor position
FFFFFFFFFFFFD294        16008002                        lw              r1,#2                           ; restore cursor position
FFFFFFFFFFFFCBB0        62019418                        sc              r3,CursorCol
FFFFFFFFFFFFD298        02410009                        mov             r2,r4                           ; r2 = row
FFFFFFFFFFFFCBB4        31FFEF37                        call    CalcScreenLoc
FFFFFFFFFFFFD29C        02518009                        mov             r3,r5                           ; r3 = col
FFFFFFFFFFFFCBB8        31FFEEBF                        call    CursorOn
FFFFFFFFFFFFD2A0        0181CD17                        syscall #410
FFFFFFFFFFFFCBBC        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFD2A4        31FFEFF7                        call    CursorOn
FFFFFFFFFFFFCBC0        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFD2A8        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFCBC4        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFD2AC        47E18010                        lw              r3,16[sp]
FFFFFFFFFFFFCBC8        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFD2B0        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFCBCC        37EF8020                        ret             #32
FFFFFFFFFFFFD2B4        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFD2B8        47E20018                        lw              r4,24[sp]
 
FFFFFFFFFFFFD2BC        47E28020                        lw              r5,32[sp]
 
FFFFFFFFFFFFD2C0        37EF8030                        ret             #48
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;==============================================================================
FFFFFFFFFFFFCBD0                                 InitializeGame:
FFFFFFFFFFFFD2C4                                 InitializeGame:
FFFFFFFFFFFFCBD0        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFD2C4        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFCBD4        27F40000004                     sm              [sp],r3/lr
FFFFFFFFFFFFD2C8        27F40000004                     sm              [sp],r3/lr
FFFFFFFFFFFFCBD8        E0C00140                        setlo   r3,#320
FFFFFFFFFFFFD2CC        E0C00140                        setlo   r3,#320
FFFFFFFFFFFFCBDC        62019508                        sc              r3,Manpos
FFFFFFFFFFFFD2D0        62019508                        sc              r3,Manpos
FFFFFFFFFFFFCBE0        62001500                        sc              r0,Score
FFFFFFFFFFFFD2D4        62001500                        sc              r0,Score
FFFFFFFFFFFFCBE4        60001510                        sb              r0,MissileActive
FFFFFFFFFFFFD2D8        60001510                        sb              r0,MissileActive
FFFFFFFFFFFFCBE8        62001512                        sc              r0,MissileX
FFFFFFFFFFFFD2DC        62001512                        sc              r0,MissileX
FFFFFFFFFFFFCBEC        62001514                        sc              r0,MissileY
FFFFFFFFFFFFD2E0        62001514                        sc              r0,MissileY
FFFFFFFFFFFFCBF0        27740000004                     lm              [sp],r3/lr
FFFFFFFFFFFFD2E4        27740000004                     lm              [sp],r3/lr
FFFFFFFFFFFFCBF4        37EF8010                        ret             #16
FFFFFFFFFFFFD2E8        37EF8010                        ret             #16
 
 
FFFFFFFFFFFFCBF8                                 DrawScore:
FFFFFFFFFFFFD2EC                                 DrawScore:
FFFFFFFFFFFFCBF8        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFD2EC        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFCBFC        27F40000005                     sm              [sp],r1/r3/lr
FFFFFFFFFFFFD2F0        27F40000005                     sm              [sp],r1/r3/lr
FFFFFFFFFFFFCC00        E0C00001                        setlo   r3,#1
FFFFFFFFFFFFD2F4        E0C00001                        setlo   r3,#1
FFFFFFFFFFFFCC04        60019416                        sb              r3,CursorRow
FFFFFFFFFFFFD2F8        60019417                        sb              r3,CursorRow
FFFFFFFFFFFFCC08        E0C00028                        setlo   r3,#40
FFFFFFFFFFFFD2FC        E0C00028                        setlo   r3,#40
FFFFFFFFFFFFCC0C        60019418                        sb              r3,CursorCol
FFFFFFFFFFFFD300        60019418                        sb              r3,CursorCol
FFFFFFFFFFFFCC10        40009500                        lb              r1,Score
FFFFFFFFFFFFD304        40009500                        lb              r1,Score
FFFFFFFFFFFFCC14        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD308        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCC18        40009501                        lb              r1,Score+1
FFFFFFFFFFFFD30C        40009501                        lb              r1,Score+1
FFFFFFFFFFFFCC1C        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD310        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCC20        27740000005                     lm              [sp],r1/r3/lr
FFFFFFFFFFFFD314        27740000005                     lm              [sp],r1/r3/lr
FFFFFFFFFFFFCC24        37EF8018                        ret             #24
FFFFFFFFFFFFD318        37EF8018                        ret             #24
 
 
FFFFFFFFFFFFCC28                                 DrawMissile:
FFFFFFFFFFFFD31C                                 DrawMissile:
FFFFFFFFFFFFCC28        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFD31C        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFCC2C        27F40000001                     sm              [sp],r1/lr
FFFFFFFFFFFFD320        27F40000001                     sm              [sp],r1/lr
FFFFFFFFFFFFCC30        42009514                        lc              r1,MissileY
FFFFFFFFFFFFD324        42009514                        lc              r1,MissileY
FFFFFFFFFFFFCC34        AC101402                        bleu    r1,#2,MissileOff
FFFFFFFFFFFFD328        AC101402                        bleu    r1,#2,MissileOff
FFFFFFFFFFFFCC38        42009512                        lc              r1,MissileX
FFFFFFFFFFFFD32C        42009512                        lc              r1,MissileX
FFFFFFFFFFFFCC3C        06108601                        shrui   r1,r1,#3
FFFFFFFFFFFFD330        06108601                        shrui   r1,r1,#3
FFFFFFFFFFFFCC40        60009418                        sb              r1,CursorCol
FFFFFFFFFFFFD334        60009418                        sb              r1,CursorCol
FFFFFFFFFFFFCC44        42009514                        lc              r1,MissileY
FFFFFFFFFFFFD338        42009514                        lc              r1,MissileY
FFFFFFFFFFFFCC48        60009416                        sb              r1,CursorRow
FFFFFFFFFFFFD33C        60009417                        sb              r1,CursorRow
FFFFFFFFFFFFCC4C        0E108001                        subui   r1,r1,#1
FFFFFFFFFFFFD340        0E108001                        subui   r1,r1,#1
FFFFFFFFFFFFCC50        62009514                        sc              r1,MissileY
FFFFFFFFFFFFD344        62009514                        sc              r1,MissileY
FFFFFFFFFFFFCC54        E040005E                        setlo   r1,#'^'
FFFFFFFFFFFFD348        E040005E                        setlo   r1,#'^'
FFFFFFFFFFFFCC58        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFD34C        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFCC5C        40009418                        lb              r1,CursorCol
FFFFFFFFFFFFD350        40009418                        lb              r1,CursorCol
FFFFFFFFFFFFCC60        0E108001                        subui   r1,r1,#1
FFFFFFFFFFFFD354        0E108001                        subui   r1,r1,#1
FFFFFFFFFFFFCC64        60009418                        sb              r1,CursorCol
FFFFFFFFFFFFD358        60009418                        sb              r1,CursorCol
FFFFFFFFFFFFCC68        40009416                        lb              r1,CursorRow
FFFFFFFFFFFFD35C        40009417                        lb              r1,CursorRow
FFFFFFFFFFFFCC6C        0E108001                        subui   r1,r1,#1
FFFFFFFFFFFFD360        0E108001                        subui   r1,r1,#1
FFFFFFFFFFFFCC70        60009416                        sb              r1,CursorRow
FFFFFFFFFFFFD364        60009417                        sb              r1,CursorRow
FFFFFFFFFFFFCC74        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD368        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCC78        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFD36C        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFCC7C        27740000001                     lm              [sp],r1/lr
FFFFFFFFFFFFD370        27740000001                     lm              [sp],r1/lr
FFFFFFFFFFFFCC80        37EF8010                        ret             #16
FFFFFFFFFFFFD374        37EF8010                        ret             #16
FFFFFFFFFFFFCC84                                 MissileOff:
FFFFFFFFFFFFD378                                 MissileOff:
FFFFFFFFFFFFCC84        60001510                        sb              r0,MissileActive
FFFFFFFFFFFFD378        60001510                        sb              r0,MissileActive
FFFFFFFFFFFFCC88        42009512                        lc              r1,MissileX
FFFFFFFFFFFFD37C        42009512                        lc              r1,MissileX
FFFFFFFFFFFFCC8C        06108601                        shrui   r1,r1,#3
FFFFFFFFFFFFD380        06108601                        shrui   r1,r1,#3
FFFFFFFFFFFFCC90        60009418                        sb              r1,CursorCol
FFFFFFFFFFFFD384        60009418                        sb              r1,CursorCol
FFFFFFFFFFFFCC94        42009514                        lc              r1,MissileY
FFFFFFFFFFFFD388        42009514                        lc              r1,MissileY
FFFFFFFFFFFFCC98        60009416                        sb              r1,CursorRow
FFFFFFFFFFFFD38C        60009417                        sb              r1,CursorRow
FFFFFFFFFFFFCC9C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD390        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCCA0        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFD394        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFCCA4        27740000001                     lm              [sp],r1/lr
FFFFFFFFFFFFD398        27740000001                     lm              [sp],r1/lr
FFFFFFFFFFFFCCA8        37EF8010                        ret             #16
FFFFFFFFFFFFD39C        37EF8010                        ret             #16
 
 
FFFFFFFFFFFFCCAC                                 DrawMan:
FFFFFFFFFFFFD3A0                                 DrawMan:
FFFFFFFFFFFFCCAC        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFD3A0        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFCCB0        27F40000005                     sm              [sp],r1/r3/lr
FFFFFFFFFFFFD3A4        27F40000005                     sm              [sp],r1/r3/lr
FFFFFFFFFFFFCCB4        E0C0002E                        setlo   r3,#46
FFFFFFFFFFFFD3A8        E0C0002E                        setlo   r3,#46
FFFFFFFFFFFFCCB8        60019416                        sb              r3,CursorRow
FFFFFFFFFFFFD3AC        60019417                        sb              r3,CursorRow
FFFFFFFFFFFFCCBC        42019508                        lc              r3,Manpos
FFFFFFFFFFFFD3B0        42019508                        lc              r3,Manpos
FFFFFFFFFFFFCCC0        06318601                        shrui   r3,r3,#3
FFFFFFFFFFFFD3B4        06318601                        shrui   r3,r3,#3
FFFFFFFFFFFFCCC4        60019418                        sb              r3,CursorCol
FFFFFFFFFFFFD3B8        60019418                        sb              r3,CursorCol
FFFFFFFFFFFFCCC8        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD3BC        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCCCC        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFD3C0        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFCCD0        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFD3C4        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFCCD4        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFD3C8        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFCCD8        E0400041                        setlo   r1,#'A'
FFFFFFFFFFFFD3CC        E0400041                        setlo   r1,#'A'
FFFFFFFFFFFFCCDC        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFD3D0        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFCCE0        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFD3D4        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFCCE4        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFD3D8        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFCCE8        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD3DC        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCCEC        31FFEF47                        call    DisplayChar
FFFFFFFFFFFFD3E0        31FFF07F                        call    DisplayChar
FFFFFFFFFFFFCCF0        27740000005                     lm              [sp],r1/r3/lr
FFFFFFFFFFFFD3E4        27740000005                     lm              [sp],r1/r3/lr
FFFFFFFFFFFFCCF4        37EF8018                        ret             #24
FFFFFFFFFFFFD3E8        37EF8018                        ret             #24
 
 
FFFFFFFFFFFFCCF8                                 DrawInvader:
FFFFFFFFFFFFD3EC                                 DrawInvader:
FFFFFFFFFFFFCCF8        46018000                        lw              r3,InvaderPos
FFFFFFFFFFFFD3EC        46018000                        lw              r3,InvaderPos
FFFFFFFFFFFFCCFC        160080E9                        lw              r1,#233
FFFFFFFFFFFFD3F0        160080E9                        lw              r1,#233
FFFFFFFFFFFFCD00        62308000                        sc              r1,[r3]
FFFFFFFFFFFFD3F4        62308000                        sc              r1,[r3]
FFFFFFFFFFFFCD04        160080F2                        lw              r1,#242
FFFFFFFFFFFFD3F8        160080F2                        lw              r1,#242
FFFFFFFFFFFFCD08        62308001                        sc              r1,1[r3]
FFFFFFFFFFFFD3FC        62308001                        sc              r1,1[r3]
FFFFFFFFFFFFCD0C        160080DF                        lw              r1,#223
FFFFFFFFFFFFD400        160080DF                        lw              r1,#223
FFFFFFFFFFFFCD10        62308002                        sc              r1,2[r3]
FFFFFFFFFFFFD404        62308002                        sc              r1,2[r3]
FFFFFFFFFFFFCD14        37EF8000                        ret
FFFFFFFFFFFFD408        37EF8000                        ret
 
 
FFFFFFFFFFFFCD18                                 DrawInvaders:
FFFFFFFFFFFFD40C                                 DrawInvaders:
FFFFFFFFFFFFCD18        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFD40C        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFCD1C        27F4000000F                     sm              [sp],r1/r2/r3/r4/lr
FFFFFFFFFFFFD410        27F4000000F                     sm              [sp],r1/r2/r3/r4/lr
FFFFFFFFFFFFCD20        42009520                        lc              r1,InvadersRow1
FFFFFFFFFFFFD414        42009520                        lc              r1,InvadersRow1
FFFFFFFFFFFFCD24        42021570                        lc              r4,InvadersColpos
FFFFFFFFFFFFD418        42021570                        lc              r4,InvadersColpos
FFFFFFFFFFFFCD28        14110001                        andi    r2,r1,#1
FFFFFFFFFFFFD41C        14110001                        andi    r2,r1,#1
FFFFFFFFFFFFCD2C        BE2003A8                        beq             r2,r0,dinv1
FFFFFFFFFFFFD420        BE2003A8                        beq             r2,r0,dinv1
FFFFFFFFFFFFCD30        40019571                        lb              r3,InvadersRowpos
FFFFFFFFFFFFD424        40019571                        lb              r3,InvadersRowpos
FFFFFFFFFFFFCD34        60019416                        sb              r3,CursorRow
FFFFFFFFFFFFD428        60019417                        sb              r3,CursorRow
FFFFFFFFFFFFCD38        60021418                        sb              r4,CursorCol
FFFFFFFFFFFFD42C        60021418                        sb              r4,CursorCol
FFFFFFFFFFFFCD3C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD430        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCD40        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD434        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD44        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFD438        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFCD48        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD43C        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD4C        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFD440        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFCD50        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD444        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD54        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFD448        E0400023                        setlo   r1,#'#'
FFFFFFFFFFFFCD58        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD44C        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD5C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD450        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCD60        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD454        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD64        40009416                        lb              r1,CursorRow
FFFFFFFFFFFFD458        40009417                        lb              r1,CursorRow
FFFFFFFFFFFFCD68        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFD45C        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFCD6C        60009416                        sb              r1,CursorRow
FFFFFFFFFFFFD460        60009417                        sb              r1,CursorRow
FFFFFFFFFFFFCD70        40009418                        lb              r1,CursorCol
FFFFFFFFFFFFD464        40009418                        lb              r1,CursorCol
FFFFFFFFFFFFCD74        0E108005                        subui   r1,r1,#5
FFFFFFFFFFFFD468        0E108005                        subui   r1,r1,#5
FFFFFFFFFFFFCD78        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD46C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCD7C        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD470        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD80        E0400058                        setlo   r1,#'X'
FFFFFFFFFFFFD474        E0400058                        setlo   r1,#'X'
FFFFFFFFFFFFCD84        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD478        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD88        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD47C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCD8C        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD480        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD90        E0400058                        setlo   r1,#'X'
FFFFFFFFFFFFD484        E0400058                        setlo   r1,#'X'
FFFFFFFFFFFFCD94        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD488        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCD98        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFD48C        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFCD9C        31FFF00F                        call    DisplayByte
FFFFFFFFFFFFD490        31FFF14B                        call    DisplayByte
FFFFFFFFFFFFCDA0                                 dinv1:
FFFFFFFFFFFFD494                                 dinv1:
FFFFFFFFFFFFCDA0        2774000000F                     lm              [sp],r1/r2/r3/r4/lr
FFFFFFFFFFFFD494        2774000000F                     lm              [sp],r1/r2/r3/r4/lr
FFFFFFFFFFFFCDA4        37EF8028                        ret             #40
FFFFFFFFFFFFD498        37EF8028                        ret             #40
FFFFFFFFFFFFCDA8                                 DrawBombs:
FFFFFFFFFFFFD49C                                 DrawBombs:
FFFFFFFFFFFFCDA8        37EF8000                        ret
FFFFFFFFFFFFD49C        37EF8000                        ret
 
 
FFFFFFFFFFFFCDAC                                 Invaders:
FFFFFFFFFFFFD4A0                                 Invaders:
FFFFFFFFFFFFCDAC        FFFFFFFFFFFF0000                        subui   sp,#240
FFFFFFFFFFFFD4A0        FFFFFFFFFFFF0000                        subui   sp,#240
FFFFFFFFFFFFCDB0        27F4000000F                     sm              [sp],r1/r2/r3/r4/lr
FFFFFFFFFFFFD4A4        27F4000000F                     sm              [sp],r1/r2/r3/r4/lr
FFFFFFFFFFFFCDB4        31FFF2F4                        call    InitializeGame
FFFFFFFFFFFFD4A8        31FFF4B1                        call    InitializeGame
FFFFFFFFFFFFCDB8                                 InvadersLoop:
FFFFFFFFFFFFD4AC                                 InvadersLoop:
FFFFFFFFFFFFCDB8        31FFF2FE                        call    DrawScore
FFFFFFFFFFFFD4AC        31FFF4BB                        call    DrawScore
FFFFFFFFFFFFCDBC        31FFF346                        call    DrawInvaders
FFFFFFFFFFFFD4B0        31FFF503                        call    DrawInvaders
FFFFFFFFFFFFCDC0        31FFF36A                        call    DrawBombs
FFFFFFFFFFFFD4B4        31FFF527                        call    DrawBombs
FFFFFFFFFFFFCDC4        31FFF30A                        call    DrawMissile
FFFFFFFFFFFFD4B8        31FFF4C7                        call    DrawMissile
FFFFFFFFFFFFCDC8        31FFF32B                        call    DrawMan
FFFFFFFFFFFFD4BC        31FFF4E8                        call    DrawMan
FFFFFFFFFFFFCDCC                                 TestMoveMan:
FFFFFFFFFFFFD4C0                                 TestMoveMan:
FFFFFFFFFFFFCDCC        31FFEE08                        call    KeybdGetChar
FFFFFFFFFFFFD4C0        31FFEF07                        call    KeybdGetChar
FFFFFFFFFFFFCDD0        B010046B                        beqi    r1,#'k',MoveManRight
FFFFFFFFFFFFD4C4        B010046B                        beqi    r1,#'k',MoveManRight
FFFFFFFFFFFFCDD4        B010096A                        beqi    r1,#'j',MoveManLeft
FFFFFFFFFFFFD4C8        B010096A                        beqi    r1,#'j',MoveManLeft
FFFFFFFFFFFFCDD8        B0100D20                        beqi    r1,#' ',FireMissile
FFFFFFFFFFFFD4CC        B0100D20                        beqi    r1,#' ',FireMissile
FFFFFFFFFFFFCDDC        BE0002AA                        bra             Invaders1
FFFFFFFFFFFFD4D0        BE0002AA                        bra             Invaders1
FFFFFFFFFFFFCDE0                                 MoveManRight:
FFFFFFFFFFFFD4D4                                 MoveManRight:
FFFFFFFFFFFFCDE0        42011508                        lc              r2,Manpos
FFFFFFFFFFFFD4D4        42011508                        lc              r2,Manpos
FFFFFFFFFFFFCDE4        E6800280                ; SETLO
FFFFFFFFFFFFD4D8        E6800280                ; SETLO
FFFFFFFFFFFFCDE8        BE2D0247                        bgtu    r2,#640,Invaders1
FFFFFFFFFFFFD4DC        BE2D0247                        bgtu    r2,#640,Invaders1
FFFFFFFFFFFFCDEC        0A210008                        addui   r2,r2,#8
FFFFFFFFFFFFD4E0        0A210008                        addui   r2,r2,#8
FFFFFFFFFFFFCDF0        62011508                        sc              r2,Manpos
FFFFFFFFFFFFD4E4        62011508                        sc              r2,Manpos
FFFFFFFFFFFFCDF4        BE0001EA                        bra             Invaders1
FFFFFFFFFFFFD4E8        BE0001EA                        bra             Invaders1
FFFFFFFFFFFFCDF8                                 MoveManLeft:
FFFFFFFFFFFFD4EC                                 MoveManLeft:
FFFFFFFFFFFFCDF8        42011508                        lc              r2,Manpos
FFFFFFFFFFFFD4EC        42011508                        lc              r2,Manpos
FFFFFFFFFFFFCDFC        BE2001A2                        ble             r2,r0,Invaders1
FFFFFFFFFFFFD4F0        BE2001A2                        ble             r2,r0,Invaders1
FFFFFFFFFFFFCE00        0E210008                        subui   r2,r2,#8
FFFFFFFFFFFFD4F4        0E210008                        subui   r2,r2,#8
FFFFFFFFFFFFCE04        62011508                        sc              r2,Manpos
FFFFFFFFFFFFD4F8        62011508                        sc              r2,Manpos
FFFFFFFFFFFFCE08        BE00014A                        bra             Invaders1
FFFFFFFFFFFFD4FC        BE00014A                        bra             Invaders1
FFFFFFFFFFFFCE0C                                 FireMissile:
FFFFFFFFFFFFD500                                 FireMissile:
FFFFFFFFFFFFCE0C        40011510                        lb              r2,MissileActive
FFFFFFFFFFFFD500        40011510                        lb              r2,MissileActive
FFFFFFFFFFFFCE10        BE200109                        bne             r2,r0,Invaders1
FFFFFFFFFFFFD504        BE200109                        bne             r2,r0,Invaders1
FFFFFFFFFFFFCE14        E0800001                        setlo   r2,#1
FFFFFFFFFFFFD508        E0800001                        setlo   r2,#1
FFFFFFFFFFFFCE18        60011510                        sb              r2,MissileActive
FFFFFFFFFFFFD50C        60011510                        sb              r2,MissileActive
FFFFFFFFFFFFCE1C        42011508                        lc              r2,Manpos
FFFFFFFFFFFFD510        42011508                        lc              r2,Manpos
FFFFFFFFFFFFCE20        62011512                        sc              r2,MissileX
FFFFFFFFFFFFD514        62011512                        sc              r2,MissileX
FFFFFFFFFFFFCE24        E080002E                        setlo   r2,#46
FFFFFFFFFFFFD518        E080002E                        setlo   r2,#46
FFFFFFFFFFFFCE28        62011514                        sc              r2,MissileY
FFFFFFFFFFFFD51C        62011514                        sc              r2,MissileY
FFFFFFFFFFFFCE2C        BE00002A                        bra             Invaders1
FFFFFFFFFFFFD520        BE00002A                        bra             Invaders1
FFFFFFFFFFFFCE30                                 Invaders1:
FFFFFFFFFFFFD524                                 Invaders1:
FFFFFFFFFFFFCE30        B0100203                        beqi    r1,#CTRLC,InvadersEnd
FFFFFFFFFFFFD524        B0100203                        beqi    r1,#CTRLC,InvadersEnd
FFFFFFFFFFFFCE34        BE007C2A                        bra             InvadersLoop
FFFFFFFFFFFFD528        BE007C2A                        bra             InvadersLoop
FFFFFFFFFFFFCE38                                 InvadersEnd:
FFFFFFFFFFFFD52C                                 InvadersEnd:
FFFFFFFFFFFFCE38        2774000000F                     lm              [sp],r1/r2/r3/r4/lr
FFFFFFFFFFFFD52C        2774000000F                     lm              [sp],r1/r2/r3/r4/lr
FFFFFFFFFFFFCE3C        0BEF00F0                        addui   sp,sp,#240
FFFFFFFFFFFFD530        0BEF00F0                        addui   sp,sp,#240
FFFFFFFFFFFFCE40        BE0020CA                        bra             Monitor
FFFFFFFFFFFFD534        BE0017AA                        bra             Monitor
 
 
 
                                                 ;==============================================================================
 
                                                 ;==============================================================================
 
                                                 ;
 
                                                 ; Initialize the SD card
 
                                                 ; Returns
 
                                                 ; r = 0 if successful, 1 otherwise
 
                                                 ;
 
FFFFFFFFFFFFD538                                 spi_init:
 
FFFFFFFFFFFFD538        0FEF0018                        subui   sp,sp,#24
 
FFFFFFFFFFFFD53C        67EF8000                        sw              lr,[sp]
 
FFFFFFFFFFFFD540        67E10008                        sw              r2,8[sp]
 
FFFFFFFFFFFFD544        67E18010                        sw              r3,16[sp]
 
FFFFFFFFFFFFD548        E69C0500                ; SETLO
 
FFFFFFFFFFFFD54C        EE800003                ; SETMID
 
FFFFFFFFFFFFD550        6A0D0C2D                        lea             r3,SPIMASTER
 
FFFFFFFFFFFFD554        16008001                        lw              r1,#SPI_INIT_SD
 
FFFFFFFFFFFFD558        90308002                        outb    r1,SPI_TRANS_TYPE_REG[r3]
 
FFFFFFFFFFFFD55C        16008001                        lw              r1,#SPI_TRANS_START
 
FFFFFFFFFFFFD560        90308003                        outb    r1,SPI_TRANS_CTRL_REG[r3]
 
FFFFFFFFFFFFD564        DE000000                        nop
 
FFFFFFFFFFFFD568                                 spi_init1:
 
FFFFFFFFFFFFD568        80308004                        inb             r1,SPI_TRANS_STATUS_REG[r3]
 
FFFFFFFFFFFFD56C        02110009                        mov             r2,r1                                                   ; note: some time needs to be wasted
 
FFFFFFFFFFFFD570        02208009                        mov             r1,r2                                                   ; between status reads.
 
FFFFFFFFFFFFD574        B01FFD01                        beqi    r1,#SPI_TRANS_BUSY,spi_init1
 
FFFFFFFFFFFFD578        80308005                        inb             r1,SPI_TRANS_ERROR_REG[r3]
 
FFFFFFFFFFFFD57C        2A108204                        bfext   r1,r1,#1,#0
 
FFFFFFFFFFFFD580        B2100500                        bne             r1,#SPI_INIT_NO_ERROR,spi_error
 
FFFFFFFFFFFFD584        9A00D946                        lea             r1,spi_init_ok_msg
 
FFFFFFFFFFFFD588        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFD58C        0410840A                        xor             r1,r1,r1
 
FFFFFFFFFFFFD590        BE0000AA                        bra             spi_init_exit
 
FFFFFFFFFFFFD594                                 spi_error:
 
FFFFFFFFFFFFD594        31FFF14B                        call    DisplayByte
 
FFFFFFFFFFFFD598        9A00D960                        lea             r1,spi_init_error_msg
 
FFFFFFFFFFFFD59C        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFD5A0        16008001                        lw              r1,#1
 
FFFFFFFFFFFFD5A4                                 spi_init_exit:
 
FFFFFFFFFFFFD5A4        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFD5A8        47E10008                        lw              r2,8[sp]
 
FFFFFFFFFFFFD5AC        47E18010                        lw              r3,16[sp]
 
FFFFFFFFFFFFD5B0        37EF8018                        ret             #24
 
 
 
 
 
                                                 ; SPI read sector
 
                                                 ;
 
                                                 ; r1= sector number to read
 
                                                 ; r2= address to place read data
 
                                                 ; Returns:
 
                                                 ; r1 = 0 if successful
 
                                                 ;
 
FFFFFFFFFFFFD5B4                                 spi_read_sector:
 
FFFFFFFFFFFFD5B4        0FEF0028                        subui   sp,sp,#40
 
FFFFFFFFFFFFD5B8        67EF8000                        sw              lr,[sp]
 
FFFFFFFFFFFFD5BC        67E28008                        sw              r5,8[sp]
 
FFFFFFFFFFFFD5C0        67E10010                        sw              r2,16[sp]
 
FFFFFFFFFFFFD5C4        67E18018                        sw              r3,24[sp]
 
FFFFFFFFFFFFD5C8        67E20020                        sw              r4,32[sp]
 
FFFFFFFFFFFFD5CC        E69C0500                ; SETLO
 
FFFFFFFFFFFFD5D0        EE800003                ; SETMID
 
FFFFFFFFFFFFD5D4        6A0D0C2D                        lea             r3,SPIMASTER
 
 
 
                                                        ; spi master wants a byte address, so we multiply the sector number
 
                                                        ; by 512.
 
FFFFFFFFFFFFD5D8        06109206                        shlui   r1,r1,#9
 
FFFFFFFFFFFFD5DC        90308007                        outb    r1,SPI_SD_ADDR_7_0_REG[r3]
 
FFFFFFFFFFFFD5E0        06109001                        shrui   r1,r1,#8
 
FFFFFFFFFFFFD5E4        90308008                        outb    r1,SPI_SD_ADDR_15_8_REG[r3]
 
FFFFFFFFFFFFD5E8        06109001                        shrui   r1,r1,#8
 
FFFFFFFFFFFFD5EC        90308009                        outb    r1,SPI_SD_ADDR_23_16_REG[r3]
 
FFFFFFFFFFFFD5F0        06109001                        shrui   r1,r1,#8
 
FFFFFFFFFFFFD5F4        9030800A                        outb    r1,SPI_SD_ADDR_31_24_REG[r3]
 
 
 
                                                        ; Force the reciever fifo to be empty, in case a prior error leaves it
 
                                                        ; in an unknown state.
 
FFFFFFFFFFFFD5F8        16008001                        lw              r1,#1
 
FFFFFFFFFFFFD5FC        90308014                        outb    r1,SPI_RX_FIFO_CTRL_REG[r3]
 
 
 
FFFFFFFFFFFFD600        16008002                        lw              r1,#RW_READ_SD_BLOCK
 
FFFFFFFFFFFFD604        90308002                        outb    r1,SPI_TRANS_TYPE_REG[r3]
 
FFFFFFFFFFFFD608        16008001                        lw              r1,#SPI_TRANS_START
 
FFFFFFFFFFFFD60C        90308003                        outb    r1,SPI_TRANS_CTRL_REG[r3]
 
FFFFFFFFFFFFD610        DE000000                        nop
 
FFFFFFFFFFFFD614                                 spi_read_sect1:
 
FFFFFFFFFFFFD614        80308004                        inb             r1,SPI_TRANS_STATUS_REG[r3]
 
FFFFFFFFFFFFD618        02120009                        mov             r4,r1                                                   ; just a delay between consecutive status reg reads
 
FFFFFFFFFFFFD61C        02408009                        mov             r1,r4
 
FFFFFFFFFFFFD620        B01FFD01                        beqi    r1,#SPI_TRANS_BUSY,spi_read_sect1
 
FFFFFFFFFFFFD624        80308005                        inb             r1,SPI_TRANS_ERROR_REG[r3]
 
FFFFFFFFFFFFD628        2A108614                        bfext   r1,r1,#3,#2
 
FFFFFFFFFFFFD62C        B2100800                        bnei    r1,#SPI_READ_NO_ERROR,spi_read_error
 
FFFFFFFFFFFFD630        16020200                        lw              r4,#512         ; read 512 bytes from fifo
 
FFFFFFFFFFFFD634                                 spi_read_sect2:
 
FFFFFFFFFFFFD634        80308010                        inb             r1,SPI_RX_FIFO_DATA_REG[r3]
 
FFFFFFFFFFFFD638        60208000                        sb              r1,[r2]
 
FFFFFFFFFFFFD63C        0A210001                        addui   r2,r2,#1
 
FFFFFFFFFFFFD640        BE027FAF                        loop    r4,spi_read_sect2
 
FFFFFFFFFFFFD644        0410840A                        xor             r1,r1,r1
 
FFFFFFFFFFFFD648        BE0000AA                        bra             spi_read_ret
 
FFFFFFFFFFFFD64C                                 spi_read_error:
 
FFFFFFFFFFFFD64C        31FFF14B                        call    DisplayByte
 
FFFFFFFFFFFFD650        9A00D99E                        lea             r1,spi_read_error_msg
 
FFFFFFFFFFFFD654        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFD658        16008001                        lw              r1,#1
 
FFFFFFFFFFFFD65C                                 spi_read_ret:
 
FFFFFFFFFFFFD65C        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFD660        47E28008                        lw              r5,8[sp]
 
FFFFFFFFFFFFD664        47E10010                        lw              r2,16[sp]
 
FFFFFFFFFFFFD668        47E18018                        lw              r3,24[sp]
 
FFFFFFFFFFFFD66C        47E20020                        lw              r4,32[sp]
 
FFFFFFFFFFFFD670        37EF8028                        ret             #40
 
 
 
                                                 ; Read the boot sector from the disk.
 
                                                 ; Must find it first by looking for the signature bytes 'EB' and '55AA'.
 
                                                 ;
 
FFFFFFFFFFFFD674                                 spi_read_boot:
 
FFFFFFFFFFFFD674        0FEF0020                        subui   sp,sp,#32
 
FFFFFFFFFFFFD678        67EF8000                        sw              lr,[sp]
 
FFFFFFFFFFFFD67C        67E10008                        sw              r2,8[sp]
 
FFFFFFFFFFFFD680        67E18010                        sw              r3,16[sp]
 
FFFFFFFFFFFFD684        67E28018                        sw              r5,24[sp]
 
FFFFFFFFFFFFD688        660030F8                        sw              r0,startSector                                  ; default starting sector
 
FFFFFFFFFFFFD68C        160181F4                        lw              r3,#500 ;1934720                                                ; number of sectors to read (up to 1GB)
 
FFFFFFFFFFFFD690        16028000                        lw              r5,#0                                                   ; r5 = starting address
 
FFFFFFFFFFFFD694                                 spi_read_boot1:
 
FFFFFFFFFFFFD694        02508009                        mov             r1,r5                                                   ; r1 = sector number
 
FFFFFFFFFFFFD698        16010008                        lw              r2,#8                                                   ; eight digits
 
FFFFFFFFFFFFD69C        60001418                        sb              r0,CursorCol
 
FFFFFFFFFFFFD6A0        31FFF13F                        call    DisplayNum                                              ; Display the sector number being checked
 
FFFFFFFFFFFFD6A4        02508009                        mov             r1,r5                                                   ; r1 = sector number
 
FFFFFFFFFFFFD6A8        E6800000                ; SETLO
 
FFFFFFFFFFFFD6AC        EE800402                ; SETMID
 
FFFFFFFFFFFFD6B0        040D0809                        lw              r2,#0x100800000                                 ; r2 = target address
 
FFFFFFFFFFFFD6B4        31FFF56D                        call    spi_read_sector
 
 
 
                                                 ; The following displays the contents of the sector
 
                                                 ;      lw              r1,#0x10
 
                                                 ;      lw              r2,#0x3800
 
                                                 ;spi_read_boot5:
 
                                                 ;      call    DisplayMemB
 
                                                 ;      loop    r1,spi_read_boot5
 
 
 
FFFFFFFFFFFFD6B8        0A528001                        addui   r5,r5,#1                                                ; move to next sector
 
FFFFFFFFFFFFD6BC        E6800000                ; SETLO
 
FFFFFFFFFFFFD6C0        EE800402                ; SETMID
 
FFFFFFFFFFFFD6C4        6A0D0405                        lbu             r1,0x100800000
 
FFFFFFFFFFFFD6C8        121100EB                        cmpui   r2,r1,#0xEB
 
FFFFFFFFFFFFD6CC        BE200088                        beq             r2,r0,spi_read_boot2
 
FFFFFFFFFFFFD6D0                                 spi_read_boot3:
 
FFFFFFFFFFFFD6D0        BE01FE2F                        loop    r3,spi_read_boot1
 
FFFFFFFFFFFFD6D4        16008001                        lw              r1,#1                                                   ; r1 = 1 for error
 
FFFFFFFFFFFFD6D8        BE0001EA                        bra             spi_read_boot4
 
FFFFFFFFFFFFD6DC                                 spi_read_boot2:
 
FFFFFFFFFFFFD6DC        9A00D728                        lea             r1,msgFoundEB
 
FFFFFFFFFFFFD6E0        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFD6E4        E68001FE                ; SETLO
 
FFFFFFFFFFFFD6E8        EE800402                ; SETMID
 
FFFFFFFFFFFFD6EC        6A0D0405                        lbu             r1,0x1008001FE                                  ; check for 0x55AA signature
 
FFFFFFFFFFFFD6F0        B21FF855                        bnei    r1,#0x55,spi_read_boot3
 
FFFFFFFFFFFFD6F4        E68001FF                ; SETLO
 
FFFFFFFFFFFFD6F8        EE800402                ; SETMID
 
FFFFFFFFFFFFD6FC        6A0D0405                        lbu             r1,0x1008001FF
 
FFFFFFFFFFFFD700        E68000AA                ; SETLO
 
FFFFFFFFFFFFD704        BE1D7E69                        bnei    r1,#0xAA,spi_read_boot3
 
FFFFFFFFFFFFD708        0E508001                        subui   r1,r5,#1
 
FFFFFFFFFFFFD70C        6600B0F8                        sw              r1,startSector
 
FFFFFFFFFFFFD710        0410840A                        xor             r1,r1,r1                                                ; r1 = 0, for okay status
 
FFFFFFFFFFFFD714                                 spi_read_boot4:
 
FFFFFFFFFFFFD714        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFD718        47E10008                        lw              r2,8[sp]
 
FFFFFFFFFFFFD71C        47E18010                        lw              r3,16[sp]
 
FFFFFFFFFFFFD720        47E28018                        lw              r5,24[sp]
 
FFFFFFFFFFFFD724        37EF8020                        ret             #32
 
 
 
FFFFFFFFFFFFD728                                 msgFoundEB:
 
FFFFFFFFFFFFD728 424520646E756F46               db      "Found EB code.",CR,LF,0
 
FFFFFFFFFFFFD730 0A0D2E65646F6320
 
FFFFFFFFFFFFD73C                                        .align 4
 
 
 
                                                 ; Load the FAT tables into memory
 
                                                 ;
 
FFFFFFFFFFFFD73C                                 loadFAT:
 
FFFFFFFFFFFFD73C        0FEF0008                        subui   sp,sp,#8
 
FFFFFFFFFFFFD740        67EF8000                        sw              lr,[sp]
 
FFFFFFFFFFFFD744        E6800016                ; SETLO
 
FFFFFFFFFFFFD748        EE800402                ; SETMID
 
FFFFFFFFFFFFD74C        6A0D0C06                        lcu             r3,0x100800016                                  ; sectors per FAT
 
FFFFFFFFFFFFD750        E6800010                ; SETLO
 
FFFFFFFFFFFFD754        EE800402                ; SETMID
 
FFFFFFFFFFFFD758        6A0D0805                        lbu             r2,0x100800010                                  ; number of FATs
 
FFFFFFFFFFFFD75C        04310C18                        mulu    r3,r3,r2                                                ; offset
 
FFFFFFFFFFFFD760        E6800200                ; SETLO
 
FFFFFFFFFFFFD764        EE800402                ; SETMID
 
FFFFFFFFFFFFD768        6A0D082D                        lea             r2,0x100800200                                  ; where to place FAT
 
FFFFFFFFFFFFD76C        E680000E                ; SETLO
 
FFFFFFFFFFFFD770        EE800402                ; SETMID
 
FFFFFFFFFFFFD774        6A0D1406                        lcu             r5,0x10080000E                                  ; r5 = # reserved sectors before FAT
 
FFFFFFFFFFFFD778        460330F8                        lw              r6,startSector
 
FFFFFFFFFFFFD77C        04531403                        addu    r5,r5,r6
 
FFFFFFFFFFFFD780                                 loadFAT1:
 
FFFFFFFFFFFFD780        02508009                        mov             r1,r5                                                   ; r1 = sector #
 
FFFFFFFFFFFFD784        31FFF56D                        call    spi_read_sector
 
FFFFFFFFFFFFD788        0A528001                        addui   r5,r5,#1
 
FFFFFFFFFFFFD78C        0A210200                        addui   r2,r2,#512                                              ; advance 512 bytes
 
FFFFFFFFFFFFD790        BE01FF8F                        loop    r3,loadFAT1
 
FFFFFFFFFFFFD794        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFD798        37EF8008                        ret             #8
 
 
 
                                                 ; Load the root directory from disk
 
                                                 ; r2 = where to place root directory in memory
 
                                                 ;
 
FFFFFFFFFFFFD79C                                 loadRootDirectory:
 
FFFFFFFFFFFFD79C        E6800016                ; SETLO
 
FFFFFFFFFFFFD7A0        EE800402                ; SETMID
 
FFFFFFFFFFFFD7A4        6A0D0C06                        lcu             r3,0x100800016                                  ; sectors per FAT
 
FFFFFFFFFFFFD7A8        E6800010                ; SETLO
 
FFFFFFFFFFFFD7AC        EE800402                ; SETMID
 
FFFFFFFFFFFFD7B0        6A0D1005                        lbu             r4,0x100800010                                  ; number of FATs
 
FFFFFFFFFFFFD7B4        04320C18                        mulu    r3,r3,r4                                                ; offset
 
FFFFFFFFFFFFD7B8        E680000E                ; SETLO
 
FFFFFFFFFFFFD7BC        EE800402                ; SETMID
 
FFFFFFFFFFFFD7C0        6A0D1006                        lcu             r4,0x10080000E                                  ; r2 = # reserved sectors before FAT
 
FFFFFFFFFFFFD7C4        04320C03                        addu    r3,r3,r4                                                ; r3 = root directory sector number
 
FFFFFFFFFFFFD7C8        460330F8                        lw              r6,startSector
 
FFFFFFFFFFFFD7CC        04331403                        addu    r5,r3,r6                                                ; r5 = root directory sector number
 
                                                        ; we have to use two byte loads here because the number is at an unaligned data address
 
FFFFFFFFFFFFD7D0        E6800011                ; SETLO
 
FFFFFFFFFFFFD7D4        EE800402                ; SETMID
 
FFFFFFFFFFFFD7D8        6A0D1C05                        lbu             r7,0x100800011                                  ; r7 <= number of root directory entries
 
FFFFFFFFFFFFD7DC        E6800012                ; SETLO
 
FFFFFFFFFFFFD7E0        EE800402                ; SETMID
 
FFFFFFFFFFFFD7E4        6A0D2005                        lbu             r8,0x100800012
 
FFFFFFFFFFFFD7E8        06841006                        shlui   r8,r8,#8
 
FFFFFFFFFFFFD7EC        04741C09                        or              r7,r7,r8
 
FFFFFFFFFFFFD7F0        02740009                        mov             r8,r7                                                   ; r8 = number of root directory entries
 
FFFFFFFFFFFFD7F4        06738A06                        shlui   r7,r7,#5                                                ; r7 *=32 = size of root directory table (bytes)
 
FFFFFFFFFFFFD7F8        06739201                        shrui   r7,r7,#9                                                ; r7 /= 512 = number of sectors in root directory
 
FFFFFFFFFFFFD7FC        02718009                        mov             r3,r7
 
FFFFFFFFFFFFD800                                 loadRootDir1:
 
FFFFFFFFFFFFD800        02508009                        mov             r1,r5
 
FFFFFFFFFFFFD804        31FFF56D                        call    spi_read_sector
 
FFFFFFFFFFFFD808        0A528001                        addui   r5,r5,#1
 
FFFFFFFFFFFFD80C        0A210200                        addui   r2,r2,#512
 
FFFFFFFFFFFFD810        BE01FF8F                        loop    r3,loadRootDir1
 
 
 
FFFFFFFFFFFFD814                                 loadBootFile:
 
                                                        ; For now we cheat and just go directly to sector 512.
 
FFFFFFFFFFFFD814        BE0004AA                        bra             loadBootFileTmp
 
 
 
FFFFFFFFFFFFD818        E6800016                ; SETLO
 
FFFFFFFFFFFFD81C        EE800402                ; SETMID
 
FFFFFFFFFFFFD820        6A0D0C06                        lcu             r3,0x100800016                                  ; sectors per FAT
 
FFFFFFFFFFFFD824        E6800010                ; SETLO
 
FFFFFFFFFFFFD828        EE800402                ; SETMID
 
FFFFFFFFFFFFD82C        6A0D0805                        lbu             r2,0x100800010                                  ; number of FATs
 
FFFFFFFFFFFFD830        04310C18                        mulu    r3,r3,r2                                                ; offset
 
FFFFFFFFFFFFD834        E680000E                ; SETLO
 
FFFFFFFFFFFFD838        EE800402                ; SETMID
 
FFFFFFFFFFFFD83C        6A0D0806                        lcu             r2,0x10080000E                                  ; r2 = # reserved sectors before FAT
 
FFFFFFFFFFFFD840        04310C03                        addu    r3,r3,r2                                                ; r3 = root directory sector number
 
                                                        ; we have to use two byte loads here because the number is at an unaligned data address
 
FFFFFFFFFFFFD844        E6800011                ; SETLO
 
FFFFFFFFFFFFD848        EE800402                ; SETMID
 
FFFFFFFFFFFFD84C        6A0D1C05                        lbu             r7,0x100800011                                  ; r7 <= number of root directory entries
 
FFFFFFFFFFFFD850        E6800012                ; SETLO
 
FFFFFFFFFFFFD854        EE800402                ; SETMID
 
FFFFFFFFFFFFD858        6A0D2005                        lbu             r8,0x100800012
 
FFFFFFFFFFFFD85C        06841006                        shlui   r8,r8,#8
 
FFFFFFFFFFFFD860        04741C09                        or              r7,r7,r8
 
FFFFFFFFFFFFD864        02740009                        mov             r8,r7                                                   ; r8 = number of root directory entries
 
FFFFFFFFFFFFD868        06738A06                        shlui   r7,r7,#5                                                ; r7 *=32 = size of root directory table (bytes)
 
FFFFFFFFFFFFD86C        06739201                        shrui   r7,r7,#9                                                ; r7 /= 512 = number of sectors in root directory
 
 
 
                                                 ; now we need to fetch the sectors of the root directory and put them somewhere in
 
                                                 ; memory
 
                                                 ;
 
FFFFFFFFFFFFD870                                 loadBootFile4:
 
FFFFFFFFFFFFD870        46308000                        lw              r1,[r3]                                                 ; get filename
 
FFFFFFFFFFFFD874        E68F4F42                ; SETLO
 
FFFFFFFFFFFFD878        EEA51951                ; SETMID
 
FFFFFFFFFFFFD87C        F68454C4                ; SETHI
 
FFFFFFFFFFFFD880        041D0407                        cmpui   r1,r1,#0x454C4946544F4F42               ; "BOOTFILE"
 
FFFFFFFFFFFFD884        BE100068                        beq             r1,r0,loadBootFile5
 
FFFFFFFFFFFFD888                                 loadBootFile3:
 
FFFFFFFFFFFFD888        0A318020                        addui   r3,r3,#32                                               ; move to next directory entry
 
FFFFFFFFFFFFD88C        BE03FF2F                        loop    r7,loadBootFile4
 
                                                 ; boot file not found
 
 
 
                                                 ; here we found the file in the directory
 
                                                 ;
 
FFFFFFFFFFFFD890                                 loadBootFile5:
 
FFFFFFFFFFFFD890        4C31001A                        lcu             r2,0x1a[r3]                                             ; get starting cluster
 
FFFFFFFFFFFFD894        E6800011                ; SETLO
 
FFFFFFFFFFFFD898        EE800402                ; SETMID
 
FFFFFFFFFFFFD89C        6A0D1C06                        lcu             r7,0x100800011                                  ; r7 = number of root directory entries
 
FFFFFFFFFFFFD8A0        06738A06                        shlui   r7,r7,#5                                                ; r7 *=32 = size of root directory table (bytes)
 
FFFFFFFFFFFFD8A4        06739201                        shrui   r7,r7,#9                                                ; r7 /= 512 = number of sectors in root directory
 
 
 
FFFFFFFFFFFFD8A8                                 loadBootFileTmp:
 
                                                        ; We load the number of sectors per cluster, then load a single cluster of the file.
 
                                                        ; This is 16kib
 
FFFFFFFFFFFFD8A8        E680000D                ; SETLO
 
FFFFFFFFFFFFD8AC        EE800402                ; SETMID
 
FFFFFFFFFFFFD8B0        6A0D0C05                        lbu             r3,0x10080000D                                  ; sectors per cluster
 
FFFFFFFFFFFFD8B4        E6800200                ; SETLO
 
FFFFFFFFFFFFD8B8        EE800402                ; SETMID
 
FFFFFFFFFFFFD8BC        6A0D082D                        lea             r2,0x100800200                                  ; where to place FAT in memory
 
FFFFFFFFFFFFD8C0        4602B0F8                        lw              r5,startSector                                  ; r5=start sector of disk
 
FFFFFFFFFFFFD8C4        0A528200                        addui   r5,r5,#512                                              ; r5= sector 512
 
FFFFFFFFFFFFD8C8                                 loadBootFile1:
 
FFFFFFFFFFFFD8C8        02508009                        mov             r1,r5                                                   ; r1=sector to read
 
FFFFFFFFFFFFD8CC        31FFF56D                        call    spi_read_sector
 
FFFFFFFFFFFFD8D0        0A528001                        addui   r5,r5,#1                                                ; r5 = next sector
 
FFFFFFFFFFFFD8D4        0A210200                        addui   r2,r2,#512
 
FFFFFFFFFFFFD8D8        BE01FF8F                        loop    r3,loadBootFile1
 
FFFFFFFFFFFFD8DC        E6800200                ; SETLO
 
FFFFFFFFFFFFD8E0        EE800402                ; SETMID
 
FFFFFFFFFFFFD8E4        6A0D0407                        lhu             r1,0x100800200                                  ; make sure it's bootable
 
FFFFFFFFFFFFD8E8        E68F4F42                ; SETLO
 
FFFFFFFFFFFFD8EC        EE800151                ; SETMID
 
FFFFFFFFFFFFD8F0        BE1D0129                        bnei    r1,#0x544F4F42,loadBootFile2
 
FFFFFFFFFFFFD8F4        16008016                        lw              r1,#0x16
 
FFFFFFFFFFFFD8F8        9A00D920                        lea             r1,msgJumpingToBoot
 
FFFFFFFFFFFFD8FC        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFD900        E6800204                ; SETLO
 
FFFFFFFFFFFFD904        EE800402                ; SETMID
 
FFFFFFFFFFFFD908        040D0409                        lw              r1,#0x100800204
 
FFFFFFFFFFFFD90C        341F8000                        jal             lr,[r1]
 
FFFFFFFFFFFFD910        33FFF20A                        jmp             Monitor
 
FFFFFFFFFFFFD914                                 loadBootFile2:
 
FFFFFFFFFFFFD914        9A00D930                        lea             r1,msgNotBootable
 
FFFFFFFFFFFFD918        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFD91C        33FFF20A                        jmp             Monitor
 
 
 
FFFFFFFFFFFFD920                                 msgJumpingToBoot:
 
FFFFFFFFFFFFD920 20676E69706D754A               db      "Jumping to boot",0
 
FFFFFFFFFFFFD928 00746F6F62206F74
 
FFFFFFFFFFFFD930                                 msgNotBootable:
 
FFFFFFFFFFFFD930 2064726163204453               db      "SD card not bootable.",0
 
FFFFFFFFFFFFD938 746F6F6220746F6E
 
FFFFFFFFFFFFD946                                 spi_init_ok_msg:
 
FFFFFFFFFFFFD940 4453002E656C6261               db "SD card initialized okay.",0
 
FFFFFFFFFFFFD948 6E69206472616320
 
FFFFFFFFFFFFD950 657A696C61697469
 
FFFFFFFFFFFFD958 002E79616B6F2064
 
FFFFFFFFFFFFD960                                 spi_init_error_msg:
 
FFFFFFFFFFFFD960 20726F727265203A               db      ": error occurred initializing the SD card.",0
 
FFFFFFFFFFFFD968 646572727563636F
 
FFFFFFFFFFFFD970 6C616974696E6920
 
FFFFFFFFFFFFD978 687420676E697A69
 
FFFFFFFFFFFFD980 7261632044532065
 
FFFFFFFFFFFFD98B                                 spi_boot_error_msg:
 
FFFFFFFFFFFFD988 6163204453002E64               db      "SD card boot error",0
 
FFFFFFFFFFFFD990 20746F6F62206472
 
FFFFFFFFFFFFD99E                                 spi_read_error_msg:
 
FFFFFFFFFFFFD998 445300726F727265               db      "SD card read error",0
 
FFFFFFFFFFFFD9A0 6572206472616320
 
FFFFFFFFFFFFD9A8 726F727265206461
 
 
 
FFFFFFFFFFFFD9B4                                        .align  4
 
 
 
                                                 ;==============================================================================
 
                                                 ; Ethernet
 
                                                 ;==============================================================================
 
                                                 my_MAC1        EQU     0x00
 
                                                 my_MAC2        EQU     0xFF
 
                                                 my_MAC3        EQU     0xEE
 
                                                 my_MAC4        EQU     0xF0
 
                                                 my_MAC5        EQU     0xDA
 
                                                 my_MAC6        EQU     0x42
 
 
 
FFFFFFFFFFFFD9B4                                        .bss
 
FFFFFFFFFFFFD9B4 0000000000000000        eth_unique_id  dw              0
 
 
 
FFFFFFFFFFFFD9BC                                        .code
 
 
 
                                                 ; Initialize the ethmac controller.
 
                                                 ; Supply a MAC address, set MD clock
 
                                                 ;
 
FFFFFFFFFFFFD9BC                                 eth_init:
 
FFFFFFFFFFFFD9BC        E69C2000                ; SETLO
 
FFFFFFFFFFFFD9C0        EE800003                ; SETMID
 
FFFFFFFFFFFFD9C4        6A0D0C2D                        lea             r3,ETHMAC
 
FFFFFFFFFFFFD9C8        16008064                        lw              r1,#0x64                        ; 100
 
FFFFFFFFFFFFD9CC        64308028                        sh              r1,MIIMODER[r3]
 
FFFFFFFFFFFFD9D0        16008007                        lw              r1,#7                           ; PHY address
 
FFFFFFFFFFFFD9D4        64308030                        sh              r1,MIIADDRESS[r3]
 
FFFFFFFFFFFFD9D8        E6B0DA42                ; SETLO
 
FFFFFFFFFFFFD9DC        EEBFFFBB                ; SETMID
 
FFFFFFFFFFFFD9E0        040D0409                        lw              r1,#0xEEF0DA42
 
FFFFFFFFFFFFD9E4        64308040                        sh              r1,0x40[r3]                     ; MAC0
 
FFFFFFFFFFFFD9E8        160080FF                        lw              r1,#0x00FF
 
FFFFFFFFFFFFD9EC        64308044                        sh              r1,0x44[r3]                     ; MAC1
 
FFFFFFFFFFFFD9F0        37EF8000                        ret
 
 
 
                                                 ; Request a packet and display on screen
 
                                                 ; r1 = address where to put packet
 
                                                 ;
 
FFFFFFFFFFFFD9F4                                 eth_request_packet:
 
FFFFFFFFFFFFD9F4        0FEF0018                        subui   sp,sp,#24
 
FFFFFFFFFFFFD9F8        67E18000                        sw              r3,[sp]
 
FFFFFFFFFFFFD9FC        67E10008                        sw              r2,8[sp]
 
FFFFFFFFFFFFDA00        67E20010                        sw              r4,16[sp]
 
FFFFFFFFFFFFDA04        E69C2000                ; SETLO
 
FFFFFFFFFFFFDA08        EE800003                ; SETMID
 
FFFFFFFFFFFFDA0C        6A0D0C2D                        lea             r3,ETHMAC
 
FFFFFFFFFFFFDA10        16010004                        lw              r2,#4                           ; clear rx interrupt
 
FFFFFFFFFFFFDA14        64310004                        sh              r2,4[r3]
 
FFFFFFFFFFFFDA18        64308604                        sh              r1,0x604[r3]            ; storage address
 
FFFFFFFFFFFFDA1C        16016000                        lw              r2,#0xe000                      ; enable interrupt
 
FFFFFFFFFFFFDA20        64310600                        sh              r2,0x600[r3]
 
FFFFFFFFFFFFDA24                                 eth1:
 
FFFFFFFFFFFFDA24        DE000000                        nop
 
FFFFFFFFFFFFDA28        84310004                        inh             r2,4[r3]
 
FFFFFFFFFFFFDA2C        2A210414                        bfext   r2,r2,#2,#2                     ; get bit #2
 
FFFFFFFFFFFFDA30        BE207FA8                        beq             r2,r0,eth1
 
FFFFFFFFFFFFDA34        84310600                        inh             r2,0x600[r3]            ; get from descriptor
 
FFFFFFFFFFFFDA38        06212001                        shrui   r2,r2,#16
 
FFFFFFFFFFFFDA3C        16018000                        lw              r3,#0
 
FFFFFFFFFFFFDA40        E6901D88                ; SETLO
 
FFFFFFFFFFFFDA44        EE800003                ; SETMID
 
FFFFFFFFFFFFDA48        6A0D102D                        lea             r4,TEXTSCR+7560         ; second last line of screen
 
FFFFFFFFFFFFDA4C                                 eth20:
 
FFFFFFFFFFFFDA4C        6A118805                        lbu             r2,[r1+r3]                      ; get byte
 
FFFFFFFFFFFFDA50        6A418911                        sc              r2,[r4+r3*2]            ; store to screen
 
FFFFFFFFFFFFDA54        0A318001                        addui   r3,r3,#1
 
FFFFFFFFFFFFDA58        12310053                        cmpui   r2,r3,#83
 
FFFFFFFFFFFFDA5C        BE207F89                        bne             r2,r0,eth20
 
FFFFFFFFFFFFDA60        47E18000                        lw              r3,[sp]
 
FFFFFFFFFFFFDA64        47E10008                        lw              r2,8[sp]
 
FFFFFFFFFFFFDA68        47E20010                        lw              r4,16[sp]
 
FFFFFFFFFFFFDA6C        37EF8018                        ret             #24
 
 
 
                                                 ; r1 = packet address
 
                                                 ;
 
FFFFFFFFFFFFDA70                                 eth_interpret_packet:
 
FFFFFFFFFFFFDA70        0FEF0010                        subui   sp,sp,#16
 
FFFFFFFFFFFFDA74        67E18000                        sw              r3,[sp]
 
FFFFFFFFFFFFDA78        67E10008                        sw              r2,8[sp]
 
FFFFFFFFFFFFDA7C        4A11000C                        lbu             r2,12[r1]
 
FFFFFFFFFFFFDA80        4A11800D                        lbu             r3,13[r1]
 
FFFFFFFFFFFFDA84        B2200608                        bnei    r2,#8,eth2                      ; 0x806 ?
 
FFFFFFFFFFFFDA88        B2300506                        bnei    r3,#6,eth2
 
FFFFFFFFFFFFDA8C        16008002                        lw              r1,#2                           ; return r1 = 2 for ARP
 
FFFFFFFFFFFFDA90                                 eth5:
 
FFFFFFFFFFFFDA90        47E18000                        lw              r3,[sp]
 
FFFFFFFFFFFFDA94        47E10008                        lw              r2,8[sp]
 
FFFFFFFFFFFFDA98        37EF8010                        ret             #16
 
FFFFFFFFFFFFDA9C                                 eth2:
 
FFFFFFFFFFFFDA9C        B2200C08                        bnei    r2,#8,eth3                      ; 0x800 ?
 
FFFFFFFFFFFFDAA0        B2300B00                        bnei    r3,#0,eth3
 
FFFFFFFFFFFFDAA4        4A110017                        lbu             r2,23[r1]
 
FFFFFFFFFFFFDAA8        B2200301                        bnei    r2,#1,eth4
 
FFFFFFFFFFFFDAAC        16008001                        lw              r1,#1
 
FFFFFFFFFFFFDAB0        BE007F0A                        bra             eth5                            ; return 1 ICMP
 
FFFFFFFFFFFFDAB4                                 eth4:
 
FFFFFFFFFFFFDAB4        B2200311                        bnei    r2,#0x11,eth6
 
FFFFFFFFFFFFDAB8        16008003                        lw              r1,#3                           ; return 3 for UDP
 
FFFFFFFFFFFFDABC        BE007EAA                        bra             eth5
 
FFFFFFFFFFFFDAC0                                 eth6:
 
FFFFFFFFFFFFDAC0        B2200306                        bnei    r2,#6,eth7
 
FFFFFFFFFFFFDAC4        16008004                        lw              r1,#4                           ; return 4 for TCP
 
FFFFFFFFFFFFDAC8        BE007E4A                        bra             eth5
 
FFFFFFFFFFFFDACC                                 eth7:
 
FFFFFFFFFFFFDACC                                 eth3:
 
FFFFFFFFFFFFDACC        0410840A                        xor             r1,r1,r1                        ; return zero for unknown
 
FFFFFFFFFFFFDAD0        47E18000                        lw              r3,[sp]
 
FFFFFFFFFFFFDAD4        47E10008                        lw              r2,8[sp]
 
FFFFFFFFFFFFDAD8        37EF8010                        ret             #16
 
 
 
                                                 ; r1 = address of packet to send
 
                                                 ; r2 = packet length
 
                                                 ;
 
FFFFFFFFFFFFDADC                                 eth_send_packet:
 
FFFFFFFFFFFFDADC        0FEF0010                        subui   sp,sp,#16
 
FFFFFFFFFFFFDAE0        67E18000                        sw              r3,[sp]
 
FFFFFFFFFFFFDAE4        67E20008                        sw              r4,8[sp]
 
FFFFFFFFFFFFDAE8        E69C2000                ; SETLO
 
FFFFFFFFFFFFDAEC        EE800003                ; SETMID
 
FFFFFFFFFFFFDAF0        6A0D0C2D                        lea             r3,ETHMAC
 
                                                        ; wait for tx buffer to be clear
 
FFFFFFFFFFFFDAF4                                 eth8:
 
FFFFFFFFFFFFDAF4        84320400                        inh             r4,0x400[r3]
 
FFFFFFFFFFFFDAF8        2A421E7C                        bfext   r4,r4,#15,#15
 
FFFFFFFFFFFFDAFC        B04FFE01                        beqi    r4,#1,eth8
 
FFFFFFFFFFFFDB00        16020001                        lw              r4,#1                   ; clear tx interrupt
 
FFFFFFFFFFFFDB04        64320004                        sh              r4,4[r3]
 
                                                        ; set address
 
FFFFFFFFFFFFDB08        64308404                        sh              r1,0x404[r3]
 
                                                        ; set the packet length field and enable interrupts
 
FFFFFFFFFFFFDB0C        06212006                        shlui   r2,r2,#16
 
FFFFFFFFFFFFDB10        16217000                        ori             r2,r2,#0xF000
 
FFFFFFFFFFFFDB14        64310400                        sh              r2,0x400[r3]
 
FFFFFFFFFFFFDB18        47E20008                        lw              r4,8[sp]
 
FFFFFFFFFFFFDB1C        47E18000                        lw              r3,[sp]
 
FFFFFFFFFFFFDB20        37EF8010                        ret             #16
 
 
 
                                                 ; Only for IP type packets (not ARP)
 
                                                 ; r1 = rx buffer address
 
                                                 ; r2 = swap flag
 
                                                 ; Returns:
 
                                                 ; r1 = data start index
 
                                                 ;
 
FFFFFFFFFFFFDB24                                 eth_build_packet:
 
FFFFFFFFFFFFDB24        0FEF0040                        subui   sp,sp,#64
 
FFFFFFFFFFFFDB28        67E18000                        sw              r3,[sp]
 
FFFFFFFFFFFFDB2C        67E20008                        sw              r4,8[sp]
 
FFFFFFFFFFFFDB30        67E28010                        sw              r5,16[sp]
 
FFFFFFFFFFFFDB34        67E30018                        sw              r6,24[sp]
 
FFFFFFFFFFFFDB38        67E38020                        sw              r7,32[sp]
 
FFFFFFFFFFFFDB3C        67E40028                        sw              r8,40[sp]
 
FFFFFFFFFFFFDB40        67E48030                        sw              r9,48[sp]
 
FFFFFFFFFFFFDB44        67E50038                        sw              r10,56[sp]
 
FFFFFFFFFFFFDB48        4A118006                        lbu             r3,6[r1]
 
FFFFFFFFFFFFDB4C        4A120007                        lbu             r4,7[r1]
 
FFFFFFFFFFFFDB50        4A128008                        lbu             r5,8[r1]
 
FFFFFFFFFFFFDB54        4A130009                        lbu             r6,9[r1]
 
FFFFFFFFFFFFDB58        4A13800A                        lbu             r7,10[r1]
 
FFFFFFFFFFFFDB5C        4A14000B                        lbu             r8,11[r1]
 
                                                        ; write to destination header
 
FFFFFFFFFFFFDB60        60118000                        sb              r3,[r1]
 
FFFFFFFFFFFFDB64        60120001                        sb              r4,1[r1]
 
FFFFFFFFFFFFDB68        60128002                        sb              r5,2[r1]
 
FFFFFFFFFFFFDB6C        60130003                        sb              r6,3[r1]
 
FFFFFFFFFFFFDB70        60138004                        sb              r7,4[r1]
 
FFFFFFFFFFFFDB74        60140005                        sb              r8,5[r1]
 
                                                        ; write to source header
 
FFFFFFFFFFFFDB78        16018000                        lw              r3,#my_MAC1
 
FFFFFFFFFFFFDB7C        60118006                        sb              r3,6[r1]
 
FFFFFFFFFFFFDB80        160180FF                        lw              r3,#my_MAC2
 
FFFFFFFFFFFFDB84        60118007                        sb              r3,7[r1]
 
FFFFFFFFFFFFDB88        160180EE                        lw              r3,#my_MAC3
 
FFFFFFFFFFFFDB8C        60118008                        sb              r3,8[r1]
 
FFFFFFFFFFFFDB90        160180F0                        lw              r3,#my_MAC4
 
FFFFFFFFFFFFDB94        60118009                        sb              r3,9[r1]
 
FFFFFFFFFFFFDB98        160180DA                        lw              r3,#my_MAC5
 
FFFFFFFFFFFFDB9C        6011800A                        sb              r3,10[r1]
 
FFFFFFFFFFFFDBA0        16018042                        lw              r3,#my_MAC6
 
FFFFFFFFFFFFDBA4        6011800B                        sb              r3,11[r1]
 
FFFFFFFFFFFFDBA8        B2201101                        bnei    r2,#1,eth16                     // if (swap)
 
FFFFFFFFFFFFDBAC        4A11801A                        lbu             r3,26[r1]
 
FFFFFFFFFFFFDBB0        4A12001B                        lbu             r4,27[r1]
 
FFFFFFFFFFFFDBB4        4A12801C                        lbu             r5,28[r1]
 
FFFFFFFFFFFFDBB8        4A13001D                        lbu             r6,29[r1]
 
                                                        ; read destination
 
FFFFFFFFFFFFDBBC        4A13801E                        lbu             r7,30[r1]
 
FFFFFFFFFFFFDBC0        4A14001F                        lbu             r8,31[r1]
 
FFFFFFFFFFFFDBC4        4A148020                        lbu             r9,32[r1]
 
FFFFFFFFFFFFDBC8        4A150021                        lbu             r10,33[r1]
 
                                                        ; write to sender
 
FFFFFFFFFFFFDBCC        6013801A                        sb              r7,26[r1]
 
FFFFFFFFFFFFDBD0        6014001B                        sb              r8,27[r1]
 
FFFFFFFFFFFFDBD4        6014801C                        sb              r9,28[r1]
 
FFFFFFFFFFFFDBD8        6015001D                        sb              r10,29[r1]
 
                                                        ; write destination
 
FFFFFFFFFFFFDBDC        6011801E                        sb              r3,30[r1]
 
FFFFFFFFFFFFDBE0        6012001F                        sb              r4,31[r1]
 
FFFFFFFFFFFFDBE4        60128020                        sb              r5,32[r1]
 
FFFFFFFFFFFFDBE8        60130021                        sb              r6,33[r1]
 
FFFFFFFFFFFFDBEC                                 eth16:
 
FFFFFFFFFFFFDBEC        4601D9B4                        lw              r3,eth_unique_id
 
FFFFFFFFFFFFDBF0        0A318001                        addui   r3,r3,#1
 
FFFFFFFFFFFFDBF4        6601D9B4                        sw              r3,eth_unique_id
 
FFFFFFFFFFFFDBF8        60118013                        sb              r3,19[r1]
 
FFFFFFFFFFFFDBFC        06319001                        shrui   r3,r3,#8
 
FFFFFFFFFFFFDC00        60118012                        sb              r3,18[r1]
 
FFFFFFFFFFFFDC04        4A11800E                        lbu             r3,14[r1]
 
FFFFFFFFFFFFDC08        1431800F                        andi    r3,r3,#0xF
 
FFFFFFFFFFFFDC0C        06318406                        shlui   r3,r3,#2                ; *4
 
FFFFFFFFFFFFDC10        0A30800E                        addui   r1,r3,#14               ; return datastart in r1
 
FFFFFFFFFFFFDC14        47E18000                        lw              r3,[sp]
 
FFFFFFFFFFFFDC18        47E20008                        lw              r4,8[sp]
 
FFFFFFFFFFFFDC1C        47E28010                        lw              r5,16[sp]
 
FFFFFFFFFFFFDC20        47E30018                        lw              r6,24[sp]
 
FFFFFFFFFFFFDC24        47E38020                        lw              r7,32[sp]
 
FFFFFFFFFFFFDC28        47E40028                        lw              r8,40[sp]
 
FFFFFFFFFFFFDC2C        47E48030                        lw              r9,48[sp]
 
FFFFFFFFFFFFDC30        47E50038                        lw              r10,56[sp]
 
FFFFFFFFFFFFDC34        37EF8040                        ret             #64
 
 
 
                                                 ; Compute IPv4 checksum of header
 
                                                 ; r1 = packet address
 
                                                 ; r2 = data start
 
                                                 ;
 
FFFFFFFFFFFFDC38                                 eth_checksum:
 
FFFFFFFFFFFFDC38        0FEF0018                        subui   sp,sp,#24
 
FFFFFFFFFFFFDC3C        67E18000                        sw              r3,[sp]
 
FFFFFFFFFFFFDC40        67E20008                        sw              r4,8[sp]
 
FFFFFFFFFFFFDC44        67E28010                        sw              r5,16[sp]
 
                                                        ; set checksum to zero
 
FFFFFFFFFFFFDC48        60100018                        sb              r0,24[r1]
 
FFFFFFFFFFFFDC4C        60100019                        sb              r0,25[r1]
 
FFFFFFFFFFFFDC50        04318C0A                        xor             r3,r3,r3                ; r3 = sum = zero
 
FFFFFFFFFFFFDC54        1602000E                        lw              r4,#14
 
FFFFFFFFFFFFDC58                                 eth15:
 
FFFFFFFFFFFFDC58        02228009                        mov             r5,r2
 
FFFFFFFFFFFFDC5C        0E528001                        subui   r5,r5,#1                ; r5 = datastart - 1
 
FFFFFFFFFFFFDC60        BE428101                        bge             r4,r5,eth14
 
FFFFFFFFFFFFDC64        6A121405                        lbu             r5,[r1+r4]              ; shi = [rx_addr+i]
 
FFFFFFFFFFFFDC68        6A121845                        lbu             r6,1[r1+r4]             ; slo = [rx_addr+i+1]
 
FFFFFFFFFFFFDC6C        06529006                        shlui   r5,r5,#8
 
FFFFFFFFFFFFDC70        04531409                        or              r5,r5,r6                ; shilo
 
FFFFFFFFFFFFDC74        04328C03                        addu    r3,r3,r5                ; sum = sum + shilo
 
FFFFFFFFFFFFDC78        0A420002                        addui   r4,r4,#2                ; i = i + 2
 
FFFFFFFFFFFFDC7C        BE007EEA                        bra             eth15
 
FFFFFFFFFFFFDC80                                 eth14:
 
FFFFFFFFFFFFDC80        02328009                        mov             r5,r3                   ; r5 = sum
 
FFFFFFFFFFFFDC84        1431FFFF                        andi    r3,r3,#0xffff
 
FFFFFFFFFFFFDC88        0652A001                        shrui   r5,r5,#16
 
FFFFFFFFFFFFDC8C        04328C03                        addu    r3,r3,r5
 
FFFFFFFFFFFFDC90        02318004                        com             r3,r3
 
FFFFFFFFFFFFDC94        60118019                        sb              r3,25[r1]               ; low byte
 
FFFFFFFFFFFFDC98        06319001                        shrui   r3,r3,#8
 
FFFFFFFFFFFFDC9C        60118018                        sb              r3,24[r1]               ; high byte
 
FFFFFFFFFFFFDCA0        67E18000                        sw              r3,[sp]
 
FFFFFFFFFFFFDCA4        67E20008                        sw              r4,8[sp]
 
FFFFFFFFFFFFDCA8        67E28010                        sw              r5,16[sp]
 
FFFFFFFFFFFFDCAC        37EF8018                        ret             #24
 
 
 
                                                 ; r1 = packet address
 
                                                 ; returns r1 = 1 if this IP
 
                                                 ;
 
FFFFFFFFFFFFDCB0                                 eth_verifyIP:
 
FFFFFFFFFFFFDCB0        0FEF0020                        subui   sp,sp,#32
 
FFFFFFFFFFFFDCB4        67E10000                        sw              r2,[sp]
 
FFFFFFFFFFFFDCB8        67E18008                        sw              r3,8[sp]
 
FFFFFFFFFFFFDCBC        67E20010                        sw              r4,16[sp]
 
FFFFFFFFFFFFDCC0        67E28018                        sw              r5,24[sp]
 
FFFFFFFFFFFFDCC4        4A11001E                        lbu             r2,30[r1]
 
FFFFFFFFFFFFDCC8        4A11801F                        lbu             r3,31[r1]
 
FFFFFFFFFFFFDCCC        4A120020                        lbu             r4,32[r1]
 
FFFFFFFFFFFFDCD0        4A128021                        lbu             r5,33[r1]
 
                                                        ; Check for general broadcast
 
FFFFFFFFFFFFDCD4        E68000FF                ; SETLO
 
FFFFFFFFFFFFDCD8        BE2D01A9                        bnei    r2,#0xFF,eth11
 
FFFFFFFFFFFFDCDC        E68000FF                ; SETLO
 
FFFFFFFFFFFFDCE0        BE3D0169                        bnei    r3,#0xFF,eth11
 
FFFFFFFFFFFFDCE4        E68000FF                ; SETLO
 
FFFFFFFFFFFFDCE8        BE4D0129                        bnei    r4,#0xFF,eth11
 
FFFFFFFFFFFFDCEC        E68000FF                ; SETLO
 
FFFFFFFFFFFFDCF0        BE5D00E9                        bnei    r5,#0xFF,eth11
 
FFFFFFFFFFFFDCF4                                 eth12:
 
FFFFFFFFFFFFDCF4        16008001                        lw              r1,#1
 
FFFFFFFFFFFFDCF8                                 eth13:
 
FFFFFFFFFFFFDCF8        47E10000                        lw              r2,[sp]
 
FFFFFFFFFFFFDCFC        47E18008                        lw              r3,8[sp]
 
FFFFFFFFFFFFDD00        47E20010                        lw              r4,16[sp]
 
FFFFFFFFFFFFDD04        47E28018                        lw              r5,24[sp]
 
FFFFFFFFFFFFDD08        37EF8020                        ret             #32
 
FFFFFFFFFFFFDD0C                                 eth11:
 
FFFFFFFFFFFFDD0C        02208009                        mov             r1,r2
 
FFFFFFFFFFFFDD10        06109006                        shlui   r1,r1,#8
 
FFFFFFFFFFFFDD14        04118409                        or              r1,r1,r3
 
FFFFFFFFFFFFDD18        06109006                        shlui   r1,r1,#8
 
FFFFFFFFFFFFDD1C        04120409                        or              r1,r1,r4
 
FFFFFFFFFFFFDD20        06109006                        shlui   r1,r1,#8
 
FFFFFFFFFFFFDD24        04128409                        or              r1,r1,r5
 
FFFFFFFFFFFFDD28        E6A8012A                ; SETLO
 
FFFFFFFFFFFFDD2C        EEBFFF02                ; SETMID
 
FFFFFFFFFFFFDD30        BE1D7E28                        beqi    r1,#0xC0A8012A,eth12
 
FFFFFFFFFFFFDD34        0410840A                        xor             r1,r1,r1
 
FFFFFFFFFFFFDD38        BE007E0A                        bra             eth13
 
 
 
 
 
FFFFFFFFFFFFDD3C                                 eth_main:
 
FFFFFFFFFFFFDD3C        31FFF66F                        call    eth_init
 
FFFFFFFFFFFFDD40                                 eth_loop:
 
FFFFFFFFFFFFDD40        0410840A                        xor             r1,r1,r1
 
FFFFFFFFFFFFDD44        E6800000                ; SETLO
 
FFFFFFFFFFFFDD48        EE800400                ; SETMID
 
FFFFFFFFFFFFDD4C        040D0409                        lw              r1,#0x1_00000000                ; memory address zero
 
FFFFFFFFFFFFDD50        31FFF67D                        call    eth_request_packet
 
FFFFFFFFFFFFDD54        31FFF69C                        call    eth_interpret_packet    ; r1 = packet type
 
 
 
FFFFFFFFFFFFDD58        B2102801                        bnei    r1,#1,eth10
 
FFFFFFFFFFFFDD5C        02110009                        mov             r2,r1                                   ; save off r1, r2 = packet type
 
FFFFFFFFFFFFDD60        E6800000                ; SETLO
 
FFFFFFFFFFFFDD64        EE800400                ; SETMID
 
FFFFFFFFFFFFDD68        040D0409                        lw              r1,#0x1_00000000                ; memory address zero
 
FFFFFFFFFFFFDD6C        31FFF72C                        call    eth_verifyIP
 
FFFFFFFFFFFFDD70        02118009                        mov     r3,r1
 
FFFFFFFFFFFFDD74        02208009                        mov     r1,r2                                   ; r1 = packet type again
 
FFFFFFFFFFFFDD78        B2302001                        bnei    r3,#1,eth10
 
 
 
FFFFFFFFFFFFDD7C        E6800000                ; SETLO
 
FFFFFFFFFFFFDD80        EE800400                ; SETMID
 
FFFFFFFFFFFFDD84        040D0409                        lw              r1,#0x1_00000000                ; memory address zero
 
FFFFFFFFFFFFDD88        16010001                        lw              r2,#1
 
FFFFFFFFFFFFDD8C        31FFF6C9                        call    eth_build_packet
 
FFFFFFFFFFFFDD90        02118009                        mov             r3,r1                                   ; r3 = icmpstart
 
FFFFFFFFFFFFDD94        E6800000                ; SETLO
 
FFFFFFFFFFFFDD98        EE800400                ; SETMID
 
FFFFFFFFFFFFDD9C        040D0409                        lw              r1,#0x1_00000000                ; memory address zero
 
FFFFFFFFFFFFDDA0        6A118010                        sb              r0,[r1+r3]                              ; [rx_addr+icmpstart] = 0
 
FFFFFFFFFFFFDDA4        4A110011                        lbu             r2,17[r1]
 
FFFFFFFFFFFFDDA8        0A21000E                        addui   r2,r2,#14                               ; r2 = len
 
FFFFFFFFFFFFDDAC        02230009                        mov             r6,r2                                   ; r6 = len
 
FFFFFFFFFFFFDDB0        6A119085                        lbu             r4,2[r1+r3]                             ; shi
 
FFFFFFFFFFFFDDB4        6A1194C5                        lbu             r5,3[r1+r3]                             ; slo
 
FFFFFFFFFFFFDDB8        06421006                        shlui   r4,r4,#8
 
FFFFFFFFFFFFDDBC        04429009                        or              r4,r4,r5                                ; sum = {shi,slo};
 
FFFFFFFFFFFFDDC0        02420004                        com             r4,r4                                   ; sum = ~sum
 
FFFFFFFFFFFFDDC4        0E420800                        subui   r4,r4,#0x800                    ; sum = sum - 0x800
 
FFFFFFFFFFFFDDC8        02420004                        com             r4,r4                                   ; sum = ~sum
 
FFFFFFFFFFFFDDCC        6A1190D0                        sb              r4,3[r1+r3]
 
FFFFFFFFFFFFDDD0        06421001                        shrui   r4,r4,#8
 
FFFFFFFFFFFFDDD4        6A119090                        sb              r4,2[r1+r3]
 
FFFFFFFFFFFFDDD8        02310009                        mov             r2,r3
 
FFFFFFFFFFFFDDDC        31FFF70E                        call    eth_checksum
 
FFFFFFFFFFFFDDE0        E6800000                ; SETLO
 
FFFFFFFFFFFFDDE4        EE800400                ; SETMID
 
FFFFFFFFFFFFDDE8        040D0409                        lw              r1,#0x1_00000000                ; memory address zero
 
FFFFFFFFFFFFDDEC        02610009                        mov             r2,r6
 
FFFFFFFFFFFFDDF0        31FFF6B7                        call    eth_send_packet
 
FFFFFFFFFFFFDDF4        33FFF750                        jmp             eth_loop
 
FFFFFFFFFFFFDDF8                                 eth10:
 
                                                        ; r2 = rx_addr
 
FFFFFFFFFFFFDDF8        B21FD202                        bnei    r1,#2,eth_loop          ; Do we have ARP ?
 
                                                 ;      xor             r2,r2,r2                        ; memory address zero
 
FFFFFFFFFFFFDDFC        E6B5E100                ; SETLO
 
FFFFFFFFFFFFDE00        EE800017                ; SETMID
 
FFFFFFFFFFFFDE04        040D0809                        lw              r2,#1_00000000
 
                                                        ; get the opcode
 
FFFFFFFFFFFFDE08        4A268015                        lbu             r13,21[r2]
 
FFFFFFFFFFFFDE0C        B2DFCD01                        bnei    r13,#1,eth_loop         ; ARP request
 
                                                        ; get destination IP address
 
FFFFFFFFFFFFDE10        4A248026                        lbu             r9,38[r2]
 
FFFFFFFFFFFFDE14        4A250027                        lbu             r10,39[r2]
 
FFFFFFFFFFFFDE18        4A258028                        lbu             r11,40[r2]
 
FFFFFFFFFFFFDE1C        4A260029                        lbu             r12,41[r2]
 
                                                        ; set r15 = destination IP
 
FFFFFFFFFFFFDE20        02978009                        mov             r15,r9
 
FFFFFFFFFFFFDE24        06F79006                        shlui   r15,r15,#8
 
FFFFFFFFFFFFDE28        04F53C09                        or              r15,r15,r10
 
FFFFFFFFFFFFDE2C        06F79006                        shlui   r15,r15,#8
 
FFFFFFFFFFFFDE30        04F5BC09                        or              r15,r15,r11
 
FFFFFFFFFFFFDE34        06F79006                        shlui   r15,r15,#8
 
FFFFFFFFFFFFDE38        04F63C09                        or              r15,r15,r12
 
                                                        ; Is it our IP ?
 
FFFFFFFFFFFFDE3C        E6A8012A                ; SETLO
 
FFFFFFFFFFFFDE40        EEBFFF02                ; SETMID
 
FFFFFFFFFFFFDE44        BEFD77E9                        bnei    r15,#0xC0A8012A,eth_loop; //192.168.1.42
 
                                                        ; get source IP address
 
FFFFFFFFFFFFDE48        4A22801C                        lbu             r5,28[r2]
 
FFFFFFFFFFFFDE4C        4A23001D                        lbu             r6,29[r2]
 
FFFFFFFFFFFFDE50        4A23801E                        lbu             r7,30[r2]
 
FFFFFFFFFFFFDE54        4A24001F                        lbu             r8,31[r2]
 
                                                        ; set r14 = source IP
 
FFFFFFFFFFFFDE58        02570009                        mov             r14,r5
 
FFFFFFFFFFFFDE5C        06E71006                        shlui   r14,r14,#8
 
FFFFFFFFFFFFDE60        04E33809                        or              r14,r14,r6
 
FFFFFFFFFFFFDE64        06E71006                        shlui   r14,r14,#8
 
FFFFFFFFFFFFDE68        04E3B809                        or              r14,r14,r7
 
FFFFFFFFFFFFDE6C        06E71006                        shlui   r14,r14,#8
 
FFFFFFFFFFFFDE70        04E43809                        or              r14,r14,r8
 
                                                        ; Get the source MAC address
 
FFFFFFFFFFFFDE74        4A280016                        lbu             r16,22[r2]
 
FFFFFFFFFFFFDE78        4A288017                        lbu             r17,23[r2]
 
FFFFFFFFFFFFDE7C        4A290018                        lbu             r18,24[r2]
 
FFFFFFFFFFFFDE80        4A298019                        lbu             r19,25[r2]
 
FFFFFFFFFFFFDE84        4A2A001A                        lbu             r20,26[r2]
 
FFFFFFFFFFFFDE88        4A2A801B                        lbu             r21,27[r2]
 
                                                        ; write to destination header
 
FFFFFFFFFFFFDE8C        60280000                        sb              r16,[r2]
 
FFFFFFFFFFFFDE90        60288001                        sb              r17,1[r2]
 
FFFFFFFFFFFFDE94        60290002                        sb              r18,2[r2]
 
FFFFFFFFFFFFDE98        60298003                        sb              r19,3[r2]
 
FFFFFFFFFFFFDE9C        602A0004                        sb              r20,4[r2]
 
FFFFFFFFFFFFDEA0        602A8005                        sb              r21,5[r2]
 
                                                        ; and write to ARP destination
 
FFFFFFFFFFFFDEA4        60280020                        sb              r16,32[r2]
 
FFFFFFFFFFFFDEA8        60288021                        sb              r17,33[r2]
 
FFFFFFFFFFFFDEAC        60290022                        sb              r18,34[r2]
 
FFFFFFFFFFFFDEB0        60298023                        sb              r19,35[r2]
 
FFFFFFFFFFFFDEB4        602A0024                        sb              r20,36[r2]
 
FFFFFFFFFFFFDEB8        602A8025                        sb              r21,37[r2]
 
                                                        ; write to source header
 
                                                 ;      stbc    #0x00,6[r2]
 
                                                 ;      stbc    #0xFF,7[r2]
 
                                                 ;      stbc    #0xEE,8[r2]
 
                                                 ;      stbc    #0xF0,9[r2]
 
                                                 ;      stbc    #0xDA,10[r2]
 
                                                 ;      stbc    #0x42,11[r2]
 
FFFFFFFFFFFFDEBC        60200006                        sb              r0,6[r2]
 
FFFFFFFFFFFFDEC0        160080FF                        lw              r1,#0xFF
 
FFFFFFFFFFFFDEC4        60208007                        sb              r1,7[r2]
 
FFFFFFFFFFFFDEC8        160080EE                        lw              r1,#0xEE
 
FFFFFFFFFFFFDECC        60208008                        sb              r1,8[r2]
 
FFFFFFFFFFFFDED0        160080F0                        lw              r1,#0xF0
 
FFFFFFFFFFFFDED4        60208009                        sb              r1,9[r2]
 
FFFFFFFFFFFFDED8        160080DA                        lw              r1,#0xDA
 
FFFFFFFFFFFFDEDC        6020800A                        sb              r1,10[r2]
 
FFFFFFFFFFFFDEE0        16008042                        lw              r1,#0x42
 
FFFFFFFFFFFFDEE4        6020800B                        sb              r1,11[r2]
 
                                                        ; write to ARP source
 
                                                 ;      stbc    #0x00,22[r2]
 
                                                 ;      stbc    #0xFF,23[r2]
 
                                                 ;      stbc    #0xEE,24[r2]
 
                                                 ;      stbc    #0xF0,25[r2]
 
                                                 ;      stbc    #0xDA,26[r2]
 
                                                 ;      stbc    #0x42,27[r2]
 
FFFFFFFFFFFFDEE8        60200016                        sb              r0,22[r2]
 
FFFFFFFFFFFFDEEC        160080FF                        lw              r1,#0xFF
 
FFFFFFFFFFFFDEF0        60208017                        sb              r1,23[r2]
 
FFFFFFFFFFFFDEF4        160080EE                        lw              r1,#0xEE
 
FFFFFFFFFFFFDEF8        60208018                        sb              r1,24[r2]
 
FFFFFFFFFFFFDEFC        160080F0                        lw              r1,#0xF0
 
FFFFFFFFFFFFDF00        60208019                        sb              r1,25[r2]
 
FFFFFFFFFFFFDF04        160080DA                        lw              r1,#0xDA
 
FFFFFFFFFFFFDF08        6020801A                        sb              r1,26[r2]
 
FFFFFFFFFFFFDF0C        16008042                        lw              r1,#0x42
 
FFFFFFFFFFFFDF10        6020801B                        sb              r1,27[r2]
 
                                                        ; swap sender / destination IP
 
                                                        ; write sender
 
FFFFFFFFFFFFDF14        6024801C                        sb              r9,28[r2]
 
FFFFFFFFFFFFDF18        6025001D                        sb              r10,29[r2]
 
FFFFFFFFFFFFDF1C        6025801E                        sb              r11,30[r2]
 
FFFFFFFFFFFFDF20        6026001F                        sb              r12,31[r2]
 
                                                        ; write destination
 
FFFFFFFFFFFFDF24        60228026                        sb              r5,38[r2]
 
FFFFFFFFFFFFDF28        60230027                        sb              r6,39[r2]
 
FFFFFFFFFFFFDF2C        60238028                        sb              r7,40[r2]
 
FFFFFFFFFFFFDF30        60240029                        sb              r8,41[r2]
 
                                                        ; change request to reply
 
                                                 ;      stbc    #2,21[r2]
 
FFFFFFFFFFFFDF34        16008002                        lw              r1,#2
 
FFFFFFFFFFFFDF38        60208015                        sb              r1,21[r2]
 
FFFFFFFFFFFFDF3C        02208009                        mov             r1,r2                   ; r1 = packet address
 
FFFFFFFFFFFFDF40        1601002A                        lw              r2,#0x2A                ; r2 = packet length
 
FFFFFFFFFFFFDF44        31FFF6B7                        call    eth_send_packet
 
FFFFFFFFFFFFDF48        33FFF750                        jmp             eth_loop
 
 
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;****************************************************************;
                                                 ;****************************************************************;
                                                 ;                                                                ;
                                                 ;                                                                ;
Line 2843... Line 4419...
 
 
                                                 ;
                                                 ;
                                                 ; Standard jump table. You can change these addresses if you are
                                                 ; Standard jump table. You can change these addresses if you are
                                                 ; customizing this interpreter for a different environment.
                                                 ; customizing this interpreter for a different environment.
                                                 ;
                                                 ;
FFFFFFFFFFFFCE44                                 GOSTART:
FFFFFFFFFFFFDF4C                                 GOSTART:
FFFFFFFFFFFFCE44        33FFF39C                                jmp     CSTART  ;       Cold Start entry point
FFFFFFFFFFFFDF4C        33FFF7E0                                jmp     CSTART  ;       Cold Start entry point
FFFFFFFFFFFFCE48                                 GOWARM:
FFFFFFFFFFFFDF50                                 GOWARM:
FFFFFFFFFFFFCE48        33FFF3BE                                jmp     WSTART  ;       Warm Start entry point
FFFFFFFFFFFFDF50        33FFF801                                jmp     WSTART  ;       Warm Start entry point
FFFFFFFFFFFFCE4C                                 GOOUT:
FFFFFFFFFFFFDF54                                 GOOUT:
FFFFFFFFFFFFCE4C        33FFF95A                                jmp     OUTC    ;       Jump to character-out routine
FFFFFFFFFFFFDF54        33FFFD9B                                jmp     OUTC    ;       Jump to character-out routine
FFFFFFFFFFFFCE50                                 GOIN:
FFFFFFFFFFFFDF58                                 GOIN:
FFFFFFFFFFFFCE50        33FFF95B                                jmp     INC             ;Jump to character-in routine
FFFFFFFFFFFFDF58        33FFFD9C                                jmp     INC             ;Jump to character-in routine
FFFFFFFFFFFFCE54                                 GOAUXO:
FFFFFFFFFFFFDF5C                                 GOAUXO:
FFFFFFFFFFFFCE54        33FFF962                                jmp     AUXOUT  ;       Jump to auxiliary-out routine
FFFFFFFFFFFFDF5C        33FFFDA3                                jmp     AUXOUT  ;       Jump to auxiliary-out routine
FFFFFFFFFFFFCE58                                 GOAUXI:
FFFFFFFFFFFFDF60                                 GOAUXI:
FFFFFFFFFFFFCE58        33FFF95C                                jmp     AUXIN   ;       Jump to auxiliary-in routine
FFFFFFFFFFFFDF60        33FFFD9D                                jmp     AUXIN   ;       Jump to auxiliary-in routine
FFFFFFFFFFFFCE5C                                 GOBYE:
FFFFFFFFFFFFDF64                                 GOBYE:
FFFFFFFFFFFFCE5C        33FFF9EA                                jmp     BYEBYE  ;       Jump to monitor, DOS, etc.
FFFFFFFFFFFFDF64        33FFFE28                                jmp     BYEBYE  ;       Jump to monitor, DOS, etc.
                                                 ;
                                                 ;
                                                 ; Modifiable system constants:
                                                 ; Modifiable system constants:
                                                 ;
                                                 ;
FFFFFFFFFFFFCE60                                                align   8
FFFFFFFFFFFFDF68                                                align   8
FFFFFFFFFFFFCE60 0000000010060000        TXTBGN dw      0x000000001_00600000    ;TXT            ;beginning of program memory
FFFFFFFFFFFFDF68 0000000010060000        TXTBGN dw      0x000000001_00600000    ;TXT            ;beginning of program memory
FFFFFFFFFFFFCE68 00000000107FFFF8        ENDMEM dw      0x000000001_07FFFFF8    ;       end of available memory
FFFFFFFFFFFFDF70 00000000107FFFF8        ENDMEM dw      0x000000001_07FFFFF8    ;       end of available memory
                                                 ;
                                                 ;
                                                 ; The main interpreter starts here:
                                                 ; The main interpreter starts here:
                                                 ;
                                                 ;
                                                 ; Usage
                                                 ; Usage
                                                 ; r1 = temp
                                                 ; r1 = temp
                                                 ; r8 = text buffer pointer
                                                 ; r8 = text buffer pointer
                                                 ; r12 = end of text in text buffer
                                                 ; r12 = end of text in text buffer
                                                 ;
                                                 ;
FFFFFFFFFFFFCE70                                        align   16
FFFFFFFFFFFFDF78 0000000000000000               align   16
FFFFFFFFFFFFCE70                                 CSTART:
FFFFFFFFFFFFDF80                                        align   16
 
FFFFFFFFFFFFDF80                                 CSTART:
                                                        ; First save off the link register and OS sp value
                                                        ; First save off the link register and OS sp value
FFFFFFFFFFFFCE70        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFDF80        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFCE74        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDF84        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFCE78        660F1088                        sw              sp,OSSP
FFFFFFFFFFFFDF88        660F1088                        sw              sp,OSSP
FFFFFFFFFFFFCE7C        460F4E68                        lw              sp,ENDMEM       ; initialize stack pointer
FFFFFFFFFFFFDF8C        460F5F70                        lw              sp,ENDMEM       ; initialize stack pointer
FFFFFFFFFFFFCE80        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFDF90        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFCE84        67EF8000                        sw      lr,[sp]    ; save off return address
FFFFFFFFFFFFDF94        67EF8000                        sw      lr,[sp]    ; save off return address
FFFFFFFFFFFFCE88        62001416                        sc              r0,CursorRow    ; set screen output
FFFFFFFFFFFFDF98        60001417                        sb              r0,CursorRow    ; set screen output
FFFFFFFFFFFFCE8C        62001418                        sc              r0,CursorCol
FFFFFFFFFFFFDF9C        60001418                        sb              r0,CursorCol
FFFFFFFFFFFFCE90        6000141A                        sb              r0,CursorFlash
FFFFFFFFFFFFDFA0        6000141A                        sb              r0,CursorFlash
FFFFFFFFFFFFCE94        6600103C                        sw              r0,pos
FFFFFFFFFFFFDFA4        6400104C                        sh              r0,pos
FFFFFFFFFFFFCE98        E6800020                ; SETLO
FFFFFFFFFFFFDFA8        E6800020                ; SETLO
FFFFFFFFFFFFCE9C        EE800040                ; SETMID
FFFFFFFFFFFFDFAC        EE800040                ; SETMID
FFFFFFFFFFFFCEA0        040D0809                        lw              r2,#0x10000020  ; black chars, yellow background
FFFFFFFFFFFFDFB0        040D0809                        lw              r2,#0x10000020  ; black chars, yellow background
FFFFFFFFFFFFCEA4        64011040                        sh              r2,charToPrint
                                                 ;      sh              r2,charToPrint
FFFFFFFFFFFFCEA8        31FFEED9                        call    ClearScreen
FFFFFFFFFFFFDFB4        31FFF011                        call    ClearScreen
FFFFFFFFFFFFCEAC        9A00E5C0                        lea             r1,msgInit      ;       tell who we are
FFFFFFFFFFFFDFB8        9A00F6B8                        lea             r1,msgInit      ;       tell who we are
FFFFFFFFFFFFCEB0        31FFF94D                        call    PRMESGAUX
                                                 ;      call    PRMESGAUX
FFFFFFFFFFFFCEB4        9A00E5C0                        lea             r1,msgInit      ;       tell who we are
FFFFFFFFFFFFDFBC        9A00F6B8                        lea             r1,msgInit      ;       tell who we are
FFFFFFFFFFFFCEB8        31FFF940                        call    PRMESG
FFFFFFFFFFFFDFC0        31FFFD81                        call    PRMESG
FFFFFFFFFFFFCEBC        4600CE60                        lw              r1,TXTBGN       ;       init. end-of-program pointer
FFFFFFFFFFFFDFC4        4600DF68                        lw              r1,TXTBGN       ;       init. end-of-program pointer
FFFFFFFFFFFFCEC0        660090D0                        sw              r1,TXTUNF
FFFFFFFFFFFFDFC8        660090D0                        sw              r1,TXTUNF
FFFFFFFFFFFFCEC4        4600CE68                        lw              r1,ENDMEM       ;       get address of end of memory
FFFFFFFFFFFFDFCC        4600DF70                        lw              r1,ENDMEM       ;       get address of end of memory
FFFFFFFFFFFFCEC8        0E108800                        subui   r1,r1,#2048     ;       reserve 2K for the stack
FFFFFFFFFFFFDFD0        0E109000                        subui   r1,r1,#4096     ;       reserve 4K for the stack
FFFFFFFFFFFFCECC        660090F8                        sw              r1,STKBOT
FFFFFFFFFFFFDFD4        660090F8                        sw              r1,STKBOT
FFFFFFFFFFFFCED0        0E10A000                        subui   r1,r1,#8192 ;   1000 vars
FFFFFFFFFFFFDFD8        E6804000                ; SETLO
FFFFFFFFFFFFCED4        660090D8                        sw      r1,VARBGN
FFFFFFFFFFFFDFDC        041D0405                        subui   r1,r1,#16384 ;   1000 vars
FFFFFFFFFFFFCED8        31FFF4C3                        call    clearVars   ; clear the variable area
FFFFFFFFFFFFDFE0        660090D8                        sw      r1,VARBGN
FFFFFFFFFFFFCEDC        460090D8                        lw      r1,VARBGN   ; calculate number of bytes free
FFFFFFFFFFFFDFE4        31FFF905                        call    clearVars   ; clear the variable area
FFFFFFFFFFFFCEE0        460190D0                        lw              r3,TXTUNF
FFFFFFFFFFFFDFE8        460090D8                        lw      r1,VARBGN   ; calculate number of bytes free
FFFFFFFFFFFFCEE4        04118404                        sub     r1,r1,r3
FFFFFFFFFFFFDFEC        460190D0                        lw              r3,TXTUNF
FFFFFFFFFFFFCEE8        E0800000                        setlo   r2,#0
FFFFFFFFFFFFDFF0        04118405                        subu    r1,r1,r3
FFFFFFFFFFFFCEEC        31FFF88D                        call    PRTNUM
FFFFFFFFFFFFDFF4        E0800000                        setlo   r2,#0
FFFFFFFFFFFFCEF0        9A00E668                        lea             r1,msgBytesFree
FFFFFFFFFFFFDFF8        31FFFCCC                        call    PRTNUM
FFFFFFFFFFFFCEF4        31FFF940                        call    PRMESG
FFFFFFFFFFFFDFFC        9A00F760                        lea             r1,msgBytesFree
FFFFFFFFFFFFCEF8                                 WSTART:
FFFFFFFFFFFFE000        31FFFD81                        call    PRMESG
FFFFFFFFFFFFCEF8        660010A8                        sw              r0,LOPVAR   ; initialize internal variables
FFFFFFFFFFFFE004                                 WSTART:
FFFFFFFFFFFFCEFC        66001098                        sw              r0,STKGOS
FFFFFFFFFFFFE004        660010A8                        sw              r0,LOPVAR   ; initialize internal variables
FFFFFFFFFFFFCF00        66001090                        sw              r0,CURRNT       ;       current line number pointer = 0
FFFFFFFFFFFFE008        66001098                        sw              r0,STKGOS
FFFFFFFFFFFFCF04        460F4E68                        lw              sp,ENDMEM       ;       init S.P. again, just in case
FFFFFFFFFFFFE00C        66001090                        sw              r0,CURRNT       ;       current line number pointer = 0
FFFFFFFFFFFFCF08        9A00E676                        lea             r1,msgReady     ;       display "Ready"
FFFFFFFFFFFFE010        460F5F70                        lw              sp,ENDMEM       ;       init S.P. again, just in case
FFFFFFFFFFFFCF0C        31FFF940                        call    PRMESG
FFFFFFFFFFFFE014        9A00F76E                        lea             r1,msgReady     ;       display "Ready"
FFFFFFFFFFFFCF10                                 ST3:
FFFFFFFFFFFFE018        31FFFD81                        call    PRMESG
FFFFFFFFFFFFCF10        E040003E                        setlo   r1,#'>'         ; Prompt with a '>' and
FFFFFFFFFFFFE01C                                 ST3:
FFFFFFFFFFFFCF14        31FFF7D8                        call    GETLN           ; read a line.
FFFFFFFFFFFFE01C        E040003E                        setlo   r1,#'>'         ; Prompt with a '>' and
FFFFFFFFFFFFCF18        31FFF91D                        call    TOUPBUF         ; convert to upper case
FFFFFFFFFFFFE020        31FFFC1A                        call    GETLN           ; read a line.
FFFFFFFFFFFFCF1C        02860009                        mov             r12,r8          ; save pointer to end of line
FFFFFFFFFFFFE024        31FFFD5E                        call    TOUPBUF         ; convert to upper case
FFFFFFFFFFFFCF20        9A04111B                        lea             r8,BUFFER       ; point to the beginning of line
FFFFFFFFFFFFE028        02860009                        mov             r12,r8          ; save pointer to end of line
FFFFFFFFFFFFCF24        31FFF8FF                        call    TSTNUM          ; is there a number there?
FFFFFFFFFFFFE02C        9A04111B                        lea             r8,BUFFER       ; point to the beginning of line
FFFFFFFFFFFFCF28        31FFF914                        call    IGNBLK          ; skip trailing blanks
FFFFFFFFFFFFE030        31FFFD3E                        call    TSTNUM          ; is there a number there?
 
FFFFFFFFFFFFE034        31FFFD55                        call    IGNBLK          ; skip trailing blanks
                                                 ; does line no. exist? (or nonzero?)
                                                 ; does line no. exist? (or nonzero?)
FFFFFFFFFFFFCF2C        BE101728                        beq             r1,r0,DIRECT            ; if not, it's a direct statement
FFFFFFFFFFFFE038        BE101708                        beq             r1,r0,DIRECT            ; if not, it's a direct statement
FFFFFFFFFFFFCF30        AC1003FF                        bleu    r1,#0xFFFF,ST2  ; see if line no. is <= 16 bits
FFFFFFFFFFFFE03C        AC1003FF                        bleu    r1,#0xFFFF,ST2  ; see if line no. is <= 16 bits
FFFFFFFFFFFFCF34        9A00E694                        lea             r1,msgLineRange ; if not, we've overflowed
FFFFFFFFFFFFE040        9A00F78C                        lea             r1,msgLineRange ; if not, we've overflowed
FFFFFFFFFFFFCF38        BE007F4A                        bra             ERROR
FFFFFFFFFFFFE044        BE007F2A                        bra             ERROR
FFFFFFFFFFFFCF3C                                 ST2:
FFFFFFFFFFFFE048                                 ST2:
                                                     ; ugliness - store a character at potentially an
                                                     ; ugliness - store a character at potentially an
                                                     ; odd address (unaligned).
                                                     ; odd address (unaligned).
FFFFFFFFFFFFCF3C        02110009                        mov             r2,r1       ; r2 = line number
FFFFFFFFFFFFE048        02110009                        mov             r2,r1       ; r2 = line number
FFFFFFFFFFFFCF40        60817FFE                        sb              r2,-2[r8]
FFFFFFFFFFFFE04C        60817FFE                        sb              r2,-2[r8]
FFFFFFFFFFFFCF44        06211001                        shrui   r2,r2,#8
FFFFFFFFFFFFE050        06211001                        shrui   r2,r2,#8
FFFFFFFFFFFFCF48        60817FFF                        sb              r2,-1[r8]       ; store the binary line no.
FFFFFFFFFFFFE054        60817FFF                        sb              r2,-1[r8]       ; store the binary line no.
FFFFFFFFFFFFCF4C        0E840002                        subui   r8,r8,#2
FFFFFFFFFFFFE058        0E840002                        subui   r8,r8,#2
FFFFFFFFFFFFCF50        31FFF80C                        call    FNDLN           ; find this line in save area
FFFFFFFFFFFFE05C        31FFFC4E                        call    FNDLN           ; find this line in save area
FFFFFFFFFFFFCF54        02968009                        mov             r13,r9          ; save possible line pointer
FFFFFFFFFFFFE060        02968009                        mov             r13,r9          ; save possible line pointer
FFFFFFFFFFFFCF58        BE1001C8                        beq             r1,r0,ST4       ; if not found, insert
FFFFFFFFFFFFE064        BE1001C8                        beq             r1,r0,ST4       ; if not found, insert
                                                        ; here we found the line, so we're replacing the line
                                                        ; here we found the line, so we're replacing the line
                                                        ; in the text area
                                                        ; in the text area
                                                        ; first step - delete the line
                                                        ; first step - delete the line
FFFFFFFFFFFFCF5C        E0400000                        setlo   r1,#0
FFFFFFFFFFFFE068        E0400000                        setlo   r1,#0
FFFFFFFFFFFFCF60        31FFF820                        call    FNDNXT          ; find the next line (into r9)
FFFFFFFFFFFFE06C        31FFFC62                        call    FNDNXT          ; find the next line (into r9)
FFFFFFFFFFFFCF64        BE100049                        bne             r1,r0,ST7
FFFFFFFFFFFFE070        BE100049                        bne             r1,r0,ST7
FFFFFFFFFFFFCF68        BE900108                        beq             r9,r0,ST6       ; no more lines
FFFFFFFFFFFFE074        BE900108                        beq             r9,r0,ST6       ; no more lines
FFFFFFFFFFFFCF6C                                 ST7:
FFFFFFFFFFFFE078                                 ST7:
FFFFFFFFFFFFCF6C        02908009                        mov             r1,r9           ; r1 = pointer to next line
FFFFFFFFFFFFE078        02908009                        mov             r1,r9           ; r1 = pointer to next line
FFFFFFFFFFFFCF70        02D10009                        mov             r2,r13          ; pointer to line to be deleted
FFFFFFFFFFFFE07C        02D10009                        mov             r2,r13          ; pointer to line to be deleted
FFFFFFFFFFFFCF74        460190D0                        lw              r3,TXTUNF       ; points to top of save area
FFFFFFFFFFFFE080        460190D0                        lw              r3,TXTUNF       ; points to top of save area
FFFFFFFFFFFFCF78        31FFF829                        call    MVUP            ; move up to delete
FFFFFFFFFFFFE084        31FFFC6B                        call    MVUP            ; move up to delete
FFFFFFFFFFFFCF7C        660110D0                        sw              r2,TXTUNF       ; update the end pointer
FFFFFFFFFFFFE088        660110D0                        sw              r2,TXTUNF       ; update the end pointer
                                                        ; we moved the lines of text after the line being
                                                        ; we moved the lines of text after the line being
                                                        ; deleted down, so the pointer to the next line
                                                        ; deleted down, so the pointer to the next line
                                                        ; needs to be reset
                                                        ; needs to be reset
FFFFFFFFFFFFCF80        02D48009                        mov             r9,r13
FFFFFFFFFFFFE08C        02D48009                        mov             r9,r13
FFFFFFFFFFFFCF84        BE00006A                        bra             ST4
FFFFFFFFFFFFE090        BE00006A                        bra             ST4
                                                        ; here there were no more lines, so just move the
                                                        ; here there were no more lines, so just move the
                                                        ; end of text pointer down
                                                        ; end of text pointer down
FFFFFFFFFFFFCF88                                 ST6:
FFFFFFFFFFFFE094                                 ST6:
FFFFFFFFFFFFCF88        660690D0                        sw              r13,TXTUNF
FFFFFFFFFFFFE094        660690D0                        sw              r13,TXTUNF
FFFFFFFFFFFFCF8C        02D48009                        mov             r9,r13
FFFFFFFFFFFFE098        02D48009                        mov             r9,r13
FFFFFFFFFFFFCF90                                 ST4:
FFFFFFFFFFFFE09C                                 ST4:
                                                        ; here we're inserting because the line wasn't found
                                                        ; here we're inserting because the line wasn't found
                                                        ; or it was deleted     from the text area
                                                        ; or it was deleted     from the text area
FFFFFFFFFFFFCF90        02C08009                        mov             r1,r12          ; calculate the length of new line
FFFFFFFFFFFFE09C        02C08009                        mov             r1,r12          ; calculate the length of new line
FFFFFFFFFFFFCF94        04140404                        sub             r1,r1,r8
FFFFFFFFFFFFE0A0        04140404                        sub             r1,r1,r8
FFFFFFFFFFFFCF98        A41FDE03                        blei    r1,#3,ST3       ; is it just a line no. & CR? if so, it was just a delete
FFFFFFFFFFFFE0A4        A41FDE03                        blei    r1,#3,ST3       ; is it just a line no. & CR? if so, it was just a delete
 
 
FFFFFFFFFFFFCF9C        460590D0                        lw              r11,TXTUNF      ; compute new end of text
FFFFFFFFFFFFE0A8        460590D0                        lw              r11,TXTUNF      ; compute new end of text
FFFFFFFFFFFFCFA0        02B50009                        mov             r10,r11         ; r10 = old TXTUNF
FFFFFFFFFFFFE0AC        02B50009                        mov             r10,r11         ; r10 = old TXTUNF
FFFFFFFFFFFFCFA4        04B0AC02                        add             r11,r11,r1              ; r11 = new top of TXTUNF (r1=line length)
FFFFFFFFFFFFE0B0        04B0AC02                        add             r11,r11,r1              ; r11 = new top of TXTUNF (r1=line length)
 
 
FFFFFFFFFFFFCFA8        460090D8                        lw              r1,VARBGN       ; see if there's enough room
FFFFFFFFFFFFE0B4        460090D8                        lw              r1,VARBGN       ; see if there's enough room
FFFFFFFFFFFFCFAC        BEB08064                        bltu    r11,r1,ST5
FFFFFFFFFFFFE0B8        BEB08064                        bltu    r11,r1,ST5
FFFFFFFFFFFFCFB0        9A00E76F                        lea             r1,msgTooBig    ; if not, say so
FFFFFFFFFFFFE0BC        9A00F867                        lea             r1,msgTooBig    ; if not, say so
FFFFFFFFFFFFCFB4        33FFF7C8                        jmp             ERROR
FFFFFFFFFFFFE0C0        33FFFC0A                        jmp             ERROR
 
 
                                                        ; open a space in the text area
                                                        ; open a space in the text area
FFFFFFFFFFFFCFB8                                 ST5:
FFFFFFFFFFFFE0C4                                 ST5:
FFFFFFFFFFFFCFB8        660590D0                        sw              r11,TXTUNF      ; if so, store new end position
FFFFFFFFFFFFE0C4        660590D0                        sw              r11,TXTUNF      ; if so, store new end position
FFFFFFFFFFFFCFBC        02A08009                        mov             r1,r10          ; points to old end of text
FFFFFFFFFFFFE0C8        02A08009                        mov             r1,r10          ; points to old end of text
FFFFFFFFFFFFCFC0        02B10009                        mov             r2,r11          ; points to new end of text
FFFFFFFFFFFFE0CC        02B10009                        mov             r2,r11          ; points to new end of text
FFFFFFFFFFFFCFC4        02918009                        mov             r3,r9       ; points to start of line after insert line
FFFFFFFFFFFFE0D0        02918009                        mov             r3,r9       ; points to start of line after insert line
FFFFFFFFFFFFCFC8        31FFF82F                        call    MVDOWN          ; move things out of the way
FFFFFFFFFFFFE0D4        31FFFC71                        call    MVDOWN          ; move things out of the way
 
 
                                                        ; copy line into text space
                                                        ; copy line into text space
FFFFFFFFFFFFCFCC        02808009                        mov             r1,r8           ; set up to do the insertion; move from buffer
FFFFFFFFFFFFE0D8        02808009                        mov             r1,r8           ; set up to do the insertion; move from buffer
FFFFFFFFFFFFCFD0        02D10009                        mov             r2,r13          ; to vacated space
FFFFFFFFFFFFE0DC        02D10009                        mov             r2,r13          ; to vacated space
FFFFFFFFFFFFCFD4        02C18009                        mov             r3,r12          ; until end of buffer
FFFFFFFFFFFFE0E0        02C18009                        mov             r3,r12          ; until end of buffer
FFFFFFFFFFFFCFD8        31FFF829                        call    MVUP            ; do it
FFFFFFFFFFFFE0E4        31FFFC6B                        call    MVUP            ; do it
FFFFFFFFFFFFCFDC        BE0079AA                        bra             ST3                     ; go back and get another line
FFFFFFFFFFFFE0E8        BE0079AA                        bra             ST3                     ; go back and get another line
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
                                                 ; *** Tables *** DIRECT *** EXEC ***
                                                 ; *** Tables *** DIRECT *** EXEC ***
                                                 ;
                                                 ;
Line 3023... Line 4601...
                                                 ; The end of the character table is a 0 byte which corresponds
                                                 ; The end of the character table is a 0 byte which corresponds
                                                 ; to the default routine in the execution table, which is
                                                 ; to the default routine in the execution table, which is
                                                 ; executed if none of the other table items are matched.
                                                 ; executed if none of the other table items are matched.
                                                 ;
                                                 ;
                                                 ; Character-matching tables:
                                                 ; Character-matching tables:
FFFFFFFFFFFFCFE0                                        align   8
 
FFFFFFFFFFFFCFE0                                 TAB1:
 
FFFFFFFFFFFFCFE0 C4414F4CD453494C               db      "LOA",'D'+0x80
 
FFFFFFFFFFFFCFE8 4153CE5552D7454E               db      "SAV",'E'+0x80
 
FFFFFFFFFFFFCFF2                                 TAB2:
 
FFFFFFFFFFFFCFF0 454CD458454EC556               db      "LE",'T'+0x80
 
FFFFFFFFFFFFCFF8 47CF544F47C649D4               db      "GOSU",'B'+0x80
 
FFFFFFFFFFFFD000 55544552C255534F               db      "RETUR",'N'+0x80
 
FFFFFFFFFFFFD008 D24F46CD4552CE52               db      "FO",'R'+0x80
 
FFFFFFFFFFFFD010 495250D455504E49               db      "PRIN",'T'+0x80
 
FFFFFFFFFFFFD018 50C3454B4F50D44E               db      "POKE",'H'+0x80
 
FFFFFFFFFFFFD020 454B4F50C8454B4F               db      "POKE",'W'+0x80
 
FFFFFFFFFFFFD028 4F5453C54B4F50D7               db      "STO",'P'+0x80
 
FFFFFFFFFFFFD030 43D35953C55942D0               db      "CL",'S'+0x80
 
FFFFFFFFFFFFD038 434452D24C43D34C            db "RDC",'F'+0x80
 
FFFFFFFFFFFFD042                                 TAB4:
 
FFFFFFFFFFFFD040 50C34B45455000C6               db      "PEEK",'H'+0x80        ;Functions
 
FFFFFFFFFFFFD048 4B454550C84B4545               db      "PEEK",'W'+0x80        ;Functions
 
FFFFFFFFFFFFD050 C44E52CB454550D7               db      "RN",'D'+0x80
 
FFFFFFFFFFFFD058 55C55A4953D34241               db  "US",'R'+0x80
 
FFFFFFFFFFFFD063                                 TAB5:
 
FFFFFFFFFFFFD066                                 TAB6:
 
FFFFFFFFFFFFD060 545300CF5400D253               db      "STE",'P'+0x80         ;"STEP" in "FOR"
 
FFFFFFFFFFFFD06B                                 TAB8:
 
FFFFFFFFFFFFD068 BEBE3CBD3E00D045               db      '>'+0x80
 
FFFFFFFFFFFFD075                                 TAB9:
 
FFFFFFFFFFFFD070 C44E4100BCBD3CBD            db  "AN",'D'+0x80
 
FFFFFFFFFFFFD079                                 TAB10:
 
 
 
FFFFFFFFFFFFD080                                        .align  8
FFFFFFFFFFFFE0EC                                 TAB1:
 
FFFFFFFFFFFFE0E8 D453494CBE0079AA               db      "LIS",'T'+0x80        ; Direct commands
 
FFFFFFFFFFFFE0F0 52D7454EC4414F4C               db      "RU",'N'+0x80
 
FFFFFFFFFFFFE0FE                                 TAB2:
 
FFFFFFFFFFFFE0F8 454EC5564153CE55               db      "NEX",'T'+0x80         ; Direct / statement
 
FFFFFFFFFFFFE100 47C649D4454CD458               db      "GOT",'O'+0x80
 
FFFFFFFFFFFFE108 C255534F47CF544F               db      "GOSU",'B'+0x80
 
FFFFFFFFFFFFE110 4552CE5255544552               db      "RE",'M'+0x80
 
FFFFFFFFFFFFE118 55504E49D24F46CD               db      "INPU",'T'+0x80
 
FFFFFFFFFFFFE120 4F50D44E495250D4               db      "POKE",'C'+0x80
 
FFFFFFFFFFFFE128 C8454B4F50C3454B               db      "POKE",'H'+0x80
 
FFFFFFFFFFFFE130 4B4F50D7454B4F50               db      "POK",'E'+0x80
 
FFFFFFFFFFFFE138 C55942D04F5453C5               db      "BY",'E'+0x80
 
FFFFFFFFFFFFE140 4C43D34C43D35953            db  "CL",'R'+0x80
 
FFFFFFFFFFFFE14E                                 TAB4:
 
FFFFFFFFFFFFE148 455000C6434452D2               db      "PEEK",'C'+0x80        ;Functions
 
FFFFFFFFFFFFE150 C84B454550C34B45               db      "PEEK",'H'+0x80        ;Functions
 
FFFFFFFFFFFFE158 454550D74B454550               db      "PEE",'K'+0x80         ;Functions
 
FFFFFFFFFFFFE160 53D34241C44E52CB               db      "SIZ",'E'+0x80
 
FFFFFFFFFFFFE16F                                 TAB5:
 
FFFFFFFFFFFFE168 5400D25355C55A49               db      "T",'O'+0x80           ;"TO" in "FOR"
 
FFFFFFFFFFFFE172                                 TAB6:
 
FFFFFFFFFFFFE177                                 TAB8:
 
FFFFFFFFFFFFE170 3E00D045545300CF               db      '>','='+0x80           ;Relational operators
 
FFFFFFFFFFFFE178 BCBD3CBDBEBE3CBD               db      '<'+0x80
 
FFFFFFFFFFFFE181                                 TAB9:
 
FFFFFFFFFFFFE185                                 TAB10:
 
FFFFFFFFFFFFE180 00D24F00C44E4100            db  0
 
 
 
FFFFFFFFFFFFE188                                        .align  8
 
 
                                                 ;* Execution address tables:
                                                 ;* Execution address tables:
FFFFFFFFFFFFD080                                 TAB1_1:
FFFFFFFFFFFFE188                                 TAB1_1:
FFFFFFFFFFFFD080 FFFFFFFFFFFFD338               dw      LISTX                   ;Direct commands
FFFFFFFFFFFFE188 FFFFFFFFFFFFE440               dw      LISTX                   ;Direct commands
FFFFFFFFFFFFD088 FFFFFFFFFFFFD67C               dw      LOAD
FFFFFFFFFFFFE190 FFFFFFFFFFFFE784               dw      LOAD
FFFFFFFFFFFFD090 FFFFFFFFFFFFD284               dw      NEW
FFFFFFFFFFFFE198 FFFFFFFFFFFFE38C               dw      NEW
FFFFFFFFFFFFD098 FFFFFFFFFFFFD29C               dw      RUN
FFFFFFFFFFFFE1A0 FFFFFFFFFFFFE3A4               dw      RUN
FFFFFFFFFFFFD0A0 FFFFFFFFFFFFD728               dw      SAVE
FFFFFFFFFFFFE1A8 FFFFFFFFFFFFE830               dw      SAVE
FFFFFFFFFFFFD0A8                                 TAB2_1:
FFFFFFFFFFFFE1B0                                 TAB2_1:
FFFFFFFFFFFFD0A8 FFFFFFFFFFFFD508               dw      NEXT            ;       Direct / statement
FFFFFFFFFFFFE1B0 FFFFFFFFFFFFE610               dw      NEXT            ;       Direct / statement
FFFFFFFFFFFFD0B0 FFFFFFFFFFFFD664               dw      LET
FFFFFFFFFFFFE1B8 FFFFFFFFFFFFE76C               dw      LET
FFFFFFFFFFFFD0B8 FFFFFFFFFFFFD578               dw      IF
FFFFFFFFFFFFE1C0 FFFFFFFFFFFFE680               dw      IF
FFFFFFFFFFFFD0C0 FFFFFFFFFFFFD2E4               dw      GOTO
FFFFFFFFFFFFE1C8 FFFFFFFFFFFFE3EC               dw      GOTO
FFFFFFFFFFFFD0C8 FFFFFFFFFFFFD418               dw      GOSUB
FFFFFFFFFFFFE1D0 FFFFFFFFFFFFE520               dw      GOSUB
FFFFFFFFFFFFD0D0 FFFFFFFFFFFFD454               dw      RETURN
FFFFFFFFFFFFE1D8 FFFFFFFFFFFFE55C               dw      RETURN
FFFFFFFFFFFFD0D8 FFFFFFFFFFFFD580               dw      IF2                     ; REM
FFFFFFFFFFFFE1E0 FFFFFFFFFFFFE688               dw      IF2                     ; REM
FFFFFFFFFFFFD0E0 FFFFFFFFFFFFD48C               dw      FOR
FFFFFFFFFFFFE1E8 FFFFFFFFFFFFE594               dw      FOR
FFFFFFFFFFFFD0E8 FFFFFFFFFFFFD5A8               dw      INPUT
FFFFFFFFFFFFE1F0 FFFFFFFFFFFFE6B0               dw      INPUT
FFFFFFFFFFFFD0F0 FFFFFFFFFFFFD380               dw      PRINT
FFFFFFFFFFFFE1F8 FFFFFFFFFFFFE488               dw      PRINT
FFFFFFFFFFFFD0F8 FFFFFFFFFFFFD83C               dw      POKEC
FFFFFFFFFFFFE200 FFFFFFFFFFFFE944               dw      POKEC
FFFFFFFFFFFFD100 FFFFFFFFFFFFD868               dw      POKEH
FFFFFFFFFFFFE208 FFFFFFFFFFFFE970               dw      POKEH
FFFFFFFFFFFFD108 FFFFFFFFFFFFD894               dw      POKEW
FFFFFFFFFFFFE210 FFFFFFFFFFFFE99C               dw      POKEW
FFFFFFFFFFFFD110 FFFFFFFFFFFFD808               dw      POKE
FFFFFFFFFFFFE218 FFFFFFFFFFFFE910               dw      POKE
FFFFFFFFFFFFD118 FFFFFFFFFFFFD294               dw      STOP
FFFFFFFFFFFFE220 FFFFFFFFFFFFE39C               dw      STOP
FFFFFFFFFFFFD120 FFFFFFFFFFFFCE5C               dw      GOBYE
FFFFFFFFFFFFE228 FFFFFFFFFFFFDF64               dw      GOBYE
FFFFFFFFFFFFD128 FFFFFFFFFFFFD8C0               dw      SYSX
FFFFFFFFFFFFE230 FFFFFFFFFFFFE9C8               dw      SYSX
FFFFFFFFFFFFD130 FFFFFFFFFFFFE58C               dw      _cls
FFFFFFFFFFFFE238 FFFFFFFFFFFFF690               dw      _cls
FFFFFFFFFFFFD138 FFFFFFFFFFFFD304               dw  _clr
FFFFFFFFFFFFE240 FFFFFFFFFFFFE40C               dw  _clr
FFFFFFFFFFFFD140 FFFFFFFFFFFFE5A0               dw      _rdcf
FFFFFFFFFFFFE248 FFFFFFFFFFFFF6A4               dw      _rdcf
FFFFFFFFFFFFD148 FFFFFFFFFFFFD65C               dw      DEFLT
FFFFFFFFFFFFE250 FFFFFFFFFFFFE764               dw      DEFLT
FFFFFFFFFFFFD150                                 TAB4_1:
FFFFFFFFFFFFE258                                 TAB4_1:
FFFFFFFFFFFFD150 FFFFFFFFFFFFDD3C               dw  PEEKC
FFFFFFFFFFFFE258 FFFFFFFFFFFFEE44               dw  PEEKC
FFFFFFFFFFFFD158 FFFFFFFFFFFFDD50               dw  PEEKH
FFFFFFFFFFFFE260 FFFFFFFFFFFFEE58               dw  PEEKH
FFFFFFFFFFFFD160 FFFFFFFFFFFFDD64               dw  PEEKW
FFFFFFFFFFFFE268 FFFFFFFFFFFFEE6C               dw  PEEKW
FFFFFFFFFFFFD168 FFFFFFFFFFFFDD2C               dw      PEEK                    ;Functions
FFFFFFFFFFFFE270 FFFFFFFFFFFFEE34               dw      PEEK                    ;Functions
FFFFFFFFFFFFD170 FFFFFFFFFFFFDD94               dw      RND
FFFFFFFFFFFFE278 FFFFFFFFFFFFEE9C               dw      RND
FFFFFFFFFFFFD178 FFFFFFFFFFFFDE2C               dw      ABS
FFFFFFFFFFFFE280 FFFFFFFFFFFFEF34               dw      ABS
FFFFFFFFFFFFD180 FFFFFFFFFFFFDE4C               dw      SIZEX
FFFFFFFFFFFFE288 FFFFFFFFFFFFEF54               dw      SIZEX
FFFFFFFFFFFFD188 FFFFFFFFFFFFDD78               dw  USRX
FFFFFFFFFFFFE290 FFFFFFFFFFFFEE80               dw  USRX
FFFFFFFFFFFFD190 FFFFFFFFFFFFDB50               dw      XP40
FFFFFFFFFFFFE298 FFFFFFFFFFFFEC58               dw      XP40
FFFFFFFFFFFFD198                                 TAB5_1
FFFFFFFFFFFFE2A0                                 TAB5_1
FFFFFFFFFFFFD198 FFFFFFFFFFFFD4A4               dw      FR1                     ;"TO" in "FOR"
FFFFFFFFFFFFE2A0 FFFFFFFFFFFFE5AC               dw      FR1                     ;"TO" in "FOR"
FFFFFFFFFFFFD1A0 FFFFFFFFFFFFDF1C               dw      QWHAT
FFFFFFFFFFFFE2A8 FFFFFFFFFFFFF024               dw      QWHAT
FFFFFFFFFFFFD1A8                                 TAB6_1
FFFFFFFFFFFFE2B0                                 TAB6_1
FFFFFFFFFFFFD1A8 FFFFFFFFFFFFD4B8               dw      FR2                     ;"STEP" in "FOR"
FFFFFFFFFFFFE2B0 FFFFFFFFFFFFE5C0               dw      FR2                     ;"STEP" in "FOR"
FFFFFFFFFFFFD1B0 FFFFFFFFFFFFD4C0               dw      FR3
FFFFFFFFFFFFE2B8 FFFFFFFFFFFFE5C8               dw      FR3
FFFFFFFFFFFFD1B8                                 TAB8_1
FFFFFFFFFFFFE2C0                                 TAB8_1
FFFFFFFFFFFFD1B8 FFFFFFFFFFFFD9D0               dw      XP11    ;>=             Relational operators
FFFFFFFFFFFFE2C0 FFFFFFFFFFFFEAD8               dw      XP11    ;>=             Relational operators
FFFFFFFFFFFFD1C0 FFFFFFFFFFFFD9E0               dw      XP12    ;<>
FFFFFFFFFFFFE2C8 FFFFFFFFFFFFEAE8               dw      XP12    ;<>
FFFFFFFFFFFFD1C8 FFFFFFFFFFFFD9F0               dw      XP13    ;>
FFFFFFFFFFFFE2D0 FFFFFFFFFFFFEAF8               dw      XP13    ;>
FFFFFFFFFFFFD1D0 FFFFFFFFFFFFDA10               dw      XP15    ;=
FFFFFFFFFFFFE2D8 FFFFFFFFFFFFEB18               dw      XP15    ;=
FFFFFFFFFFFFD1D8 FFFFFFFFFFFFDA00               dw      XP14    ;<=
FFFFFFFFFFFFE2E0 FFFFFFFFFFFFEB08               dw      XP14    ;<=
FFFFFFFFFFFFD1E0 FFFFFFFFFFFFDA20               dw      XP16    ;<
FFFFFFFFFFFFE2E8 FFFFFFFFFFFFEB28               dw      XP16    ;<
FFFFFFFFFFFFD1E8 FFFFFFFFFFFFDA48               dw      XP17
FFFFFFFFFFFFE2F0 FFFFFFFFFFFFEB50               dw      XP17
FFFFFFFFFFFFD1F0                                 TAB9_1
FFFFFFFFFFFFE2F8                                 TAB9_1
FFFFFFFFFFFFD1F0 FFFFFFFFFFFFD93C            dw  XP_AND
FFFFFFFFFFFFE2F8 FFFFFFFFFFFFEA44            dw  XP_AND
FFFFFFFFFFFFD1F8 FFFFFFFFFFFFD94C            dw  XP_ANDX
FFFFFFFFFFFFE300 FFFFFFFFFFFFEA54            dw  XP_ANDX
FFFFFFFFFFFFD200                                 TAB10_1
FFFFFFFFFFFFE308                                 TAB10_1
FFFFFFFFFFFFD200 FFFFFFFFFFFFD904            dw  XP_OR
FFFFFFFFFFFFE308 FFFFFFFFFFFFEA0C            dw  XP_OR
FFFFFFFFFFFFD208 FFFFFFFFFFFFD914            dw  XP_ORX
FFFFFFFFFFFFE310 FFFFFFFFFFFFEA1C            dw  XP_ORX
 
 
FFFFFFFFFFFFD210                                        .align  16
FFFFFFFFFFFFE318                                        .align  4
 
 
                                                 ;*
                                                 ;*
                                                 ; r3 = match flag (trashed)
                                                 ; r3 = match flag (trashed)
                                                 ; r9 = text table
                                                 ; r9 = text table
                                                 ; r10 = exec table
                                                 ; r10 = exec table
                                                 ; r11 = trashed
                                                 ; r11 = trashed
FFFFFFFFFFFFD210                                 DIRECT:
FFFFFFFFFFFFE318                                 DIRECT:
FFFFFFFFFFFFD210        9A04CFE0                        lea             r9,TAB1
FFFFFFFFFFFFE318        9A04E0EC                        lea             r9,TAB1
FFFFFFFFFFFFD214        9A055080                        lea             r10,TAB1_1
FFFFFFFFFFFFE31C        9A056188                        lea             r10,TAB1_1
FFFFFFFFFFFFD218                                 EXEC:
FFFFFFFFFFFFE320                                 EXEC:
FFFFFFFFFFFFD218        03F58009                        mov             r11,lr          ; save link reg
FFFFFFFFFFFFE320        03F58009                        mov             r11,lr          ; save link reg
FFFFFFFFFFFFD21C        31FFF914                        call    IGNBLK          ; ignore leading blanks
FFFFFFFFFFFFE324        31FFFD55                        call    IGNBLK          ; ignore leading blanks
FFFFFFFFFFFFD220        02BF8009                        mov             lr,r11          ; restore link reg
FFFFFFFFFFFFE328        02BF8009                        mov             lr,r11          ; restore link reg
FFFFFFFFFFFFD224        02858009                        mov             r11,r8          ; save the pointer
FFFFFFFFFFFFE32C        02858009                        mov             r11,r8          ; save the pointer
FFFFFFFFFFFFD228        E0C00000                        setlo   r3,#0           ; clear match flag
FFFFFFFFFFFFE330        E0C00000                        setlo   r3,#0           ; clear match flag
FFFFFFFFFFFFD22C                                 EXLP:
FFFFFFFFFFFFE334                                 EXLP:
FFFFFFFFFFFFD22C        4A808000                        lbu             r1,[r8]         ; get the program character
FFFFFFFFFFFFE334        4A808000                        lbu             r1,[r8]         ; get the program character
FFFFFFFFFFFFD230        0A840001                        addui   r8,r8,#1
FFFFFFFFFFFFE338        0A840001                        addui   r8,r8,#1
FFFFFFFFFFFFD234        4A910000                        lbu             r2,[r9]         ; get the table character
FFFFFFFFFFFFE33C        4A910000                        lbu             r2,[r9]         ; get the table character
FFFFFFFFFFFFD238        BE200069                        bne             r2,r0,EXNGO             ; If end of table,
FFFFFFFFFFFFE340        BE200069                        bne             r2,r0,EXNGO             ; If end of table,
FFFFFFFFFFFFD23C        02B40009                        mov             r8,r11          ;       restore the text pointer and...
FFFFFFFFFFFFE344        02B40009                        mov             r8,r11          ;       restore the text pointer and...
FFFFFFFFFFFFD240        BE0001EA                        bra             EXGO            ;   execute the default.
FFFFFFFFFFFFE348        BE0001EA                        bra             EXGO            ;   execute the default.
FFFFFFFFFFFFD244                                 EXNGO:
FFFFFFFFFFFFE34C                                 EXNGO:
FFFFFFFFFFFFD244        BE1181C8                        beq             r1,r3,EXGO      ; Else check for period... if so, execute
FFFFFFFFFFFFE34C        BE1181C8                        beq             r1,r3,EXGO      ; Else check for period... if so, execute
FFFFFFFFFFFFD248        1421007F                        andi    r2,r2,#0x7f     ; ignore the table's high bit
FFFFFFFFFFFFE350        1421007F                        andi    r2,r2,#0x7f     ; ignore the table's high bit
FFFFFFFFFFFFD24C        BE208108                        beq             r2,r1,EXMAT;            is there a match?
FFFFFFFFFFFFE354        BE208108                        beq             r2,r1,EXMAT;            is there a match?
FFFFFFFFFFFFD250        0AA50008                        addui   r10,r10,#8      ;if not, try the next entry
FFFFFFFFFFFFE358        0AA50008                        addui   r10,r10,#8      ;if not, try the next entry
FFFFFFFFFFFFD254        02B40009                        mov             r8,r11          ; reset the program pointer
FFFFFFFFFFFFE35C        02B40009                        mov             r8,r11          ; reset the program pointer
FFFFFFFFFFFFD258        E0C00000                        setlo   r3,#0           ; sorry, no match
FFFFFFFFFFFFE360        E0C00000                        setlo   r3,#0           ; sorry, no match
FFFFFFFFFFFFD25C                                 EX1:
FFFFFFFFFFFFE364                                 EX1:
FFFFFFFFFFFFD25C        0A948001                        addui   r9,r9,#1
FFFFFFFFFFFFE364        0A948001                        addui   r9,r9,#1
FFFFFFFFFFFFD260        4090FFFF                        lb              r1,-1[r9]       ; get to the end of the entry
FFFFFFFFFFFFE368        4090FFFF                        lb              r1,-1[r9]       ; get to the end of the entry
FFFFFFFFFFFFD264        BE107FC3                        bgt             r1,r0,EX1
FFFFFFFFFFFFE36C        BE107FC3                        bgt             r1,r0,EX1
FFFFFFFFFFFFD268        BE007E2A                        bra             EXLP            ; back for more matching
FFFFFFFFFFFFE370        BE007E2A                        bra             EXLP            ; back for more matching
FFFFFFFFFFFFD26C                                 EXMAT:
FFFFFFFFFFFFE374                                 EXMAT:
FFFFFFFFFFFFD26C        E0C0002E                        setlo   r3,#'.'         ; we've got a match so far
FFFFFFFFFFFFE374        E0C0002E                        setlo   r3,#'.'         ; we've got a match so far
FFFFFFFFFFFFD270        0A948001                        addui   r9,r9,#1
FFFFFFFFFFFFE378        0A948001                        addui   r9,r9,#1
FFFFFFFFFFFFD274        4090FFFF                        lb              r1,-1[r9]       ; end of table entry?
FFFFFFFFFFFFE37C        4090FFFF                        lb              r1,-1[r9]       ; end of table entry?
FFFFFFFFFFFFD278        BE107DA3                        bgt             r1,r0,EXLP              ; if not, go back for more
FFFFFFFFFFFFE380        BE107DA3                        bgt             r1,r0,EXLP              ; if not, go back for more
FFFFFFFFFFFFD27C                                 EXGO:
FFFFFFFFFFFFE384                                 EXGO:
FFFFFFFFFFFFD27C        46A58000                        lw              r11,[r10]       ; execute the appropriate routine
FFFFFFFFFFFFE384        46A58000                        lw              r11,[r10]       ; execute the appropriate routine
FFFFFFFFFFFFD280        34B00000                        jal             r0,[r11]
FFFFFFFFFFFFE388        34B00000                        jal             r0,[r11]
 
 
                                                 ;    lb      r1,[r8]     ; get token from text space
                                                 ;    lb      r1,[r8]     ; get token from text space
                                                 ;    bpl
                                                 ;    bpl
                                                 ;    and     r1,#0x7f
                                                 ;    and     r1,#0x7f
                                                 ;    shl     r1,#2       ; * 4 - word offset
                                                 ;    shl     r1,#2       ; * 4 - word offset
Line 3203... Line 4782...
                                                 ; 'RUNSML' continues the execution on same line.
                                                 ; 'RUNSML' continues the execution on same line.
                                                 ;
                                                 ;
                                                 ; 'GOTO expr' evaluates the expression, finds the target
                                                 ; 'GOTO expr' evaluates the expression, finds the target
                                                 ; line, and jumps to 'RUNTSL' to do it.
                                                 ; line, and jumps to 'RUNTSL' to do it.
                                                 ;
                                                 ;
FFFFFFFFFFFFD284                                 NEW:
FFFFFFFFFFFFE38C                                 NEW:
FFFFFFFFFFFFD284        31FFF7B9                        call    ENDCHK
FFFFFFFFFFFFE38C        31FFFBFB                        call    ENDCHK
FFFFFFFFFFFFD288        4600CE60                        lw              r1,TXTBGN
FFFFFFFFFFFFE390        4600DF68                        lw              r1,TXTBGN
FFFFFFFFFFFFD28C        660090D0                        sw              r1,TXTUNF       ;       set the end pointer
FFFFFFFFFFFFE394        660090D0                        sw              r1,TXTUNF       ;       set the end pointer
FFFFFFFFFFFFD290        31FFF4C3                        call    clearVars
FFFFFFFFFFFFE398        31FFF905                        call    clearVars
 
 
FFFFFFFFFFFFD294                                 STOP:
FFFFFFFFFFFFE39C                                 STOP:
FFFFFFFFFFFFD294        31FFF7B9                        call    ENDCHK
FFFFFFFFFFFFE39C        31FFFBFB                        call    ENDCHK
FFFFFFFFFFFFD298        BE00630A                        bra             WSTART          ; WSTART will reset the stack
FFFFFFFFFFFFE3A0        BE00632A                        bra             WSTART          ; WSTART will reset the stack
 
 
FFFFFFFFFFFFD29C                                 RUN:
FFFFFFFFFFFFE3A4                                 RUN:
FFFFFFFFFFFFD29C        31FFF7B9                        call    ENDCHK
FFFFFFFFFFFFE3A4        31FFFBFB                        call    ENDCHK
FFFFFFFFFFFFD2A0        46044E60                        lw              r8,TXTBGN       ;       set pointer to beginning
FFFFFFFFFFFFE3A8        46045F68                        lw              r8,TXTBGN       ;       set pointer to beginning
FFFFFFFFFFFFD2A4        66041090                        sw              r8,CURRNT
FFFFFFFFFFFFE3AC        66041090                        sw              r8,CURRNT
FFFFFFFFFFFFD2A8        31FFF4C3                        call    clearVars
FFFFFFFFFFFFE3B0        31FFF905                        call    clearVars
 
 
FFFFFFFFFFFFD2AC                                 RUNNXL:                                        ; RUN 
FFFFFFFFFFFFE3B4                                 RUNNXL:                                        ; RUN 
FFFFFFFFFFFFD2AC        46009090                        lw              r1,CURRNT       ; executing a program?
FFFFFFFFFFFFE3B4        46009090                        lw              r1,CURRNT       ; executing a program?
FFFFFFFFFFFFD2B0        BE106248                        beq             r1,r0,WSTART    ; if not, we've finished a direct stat.
FFFFFFFFFFFFE3B8        BE106268                        beq             r1,r0,WSTART    ; if not, we've finished a direct stat.
FFFFFFFFFFFFD2B4        E0400000                        setlo   r1,#0       ; else find the next line number
FFFFFFFFFFFFE3BC        E0400000                        setlo   r1,#0       ; else find the next line number
FFFFFFFFFFFFD2B8        02848009                        mov             r9,r8
FFFFFFFFFFFFE3C0        02848009                        mov             r9,r8
FFFFFFFFFFFFD2BC        31FFF810                        call    FNDLNP          ; search for the next line
FFFFFFFFFFFFE3C4        31FFFC52                        call    FNDLNP          ; search for the next line
FFFFFFFFFFFFD2C0        BE100069                        bne             r1,r0,RUNTSL
FFFFFFFFFFFFE3C8        BE100069                        bne             r1,r0,RUNTSL
FFFFFFFFFFFFD2C4        BE900049                        bne             r9,r0,RUNTSL
FFFFFFFFFFFFE3CC        BE900049                        bne             r9,r0,RUNTSL
FFFFFFFFFFFFD2C8        BE00618A                        bra             WSTART          ; if we've fallen off the end, stop
FFFFFFFFFFFFE3D0        BE0061AA                        bra             WSTART          ; if we've fallen off the end, stop
 
 
FFFFFFFFFFFFD2CC                                 RUNTSL:                                        ; RUN 
FFFFFFFFFFFFE3D4                                 RUNTSL:                                        ; RUN 
FFFFFFFFFFFFD2CC        66049090                        sw              r9,CURRNT       ; set CURRNT to point to the line no.
FFFFFFFFFFFFE3D4        66049090                        sw              r9,CURRNT       ; set CURRNT to point to the line no.
FFFFFFFFFFFFD2D0        9A940002                        lea             r8,2[r9]        ; set the text pointer to
FFFFFFFFFFFFE3D8        9A940002                        lea             r8,2[r9]        ; set the text pointer to
 
 
FFFFFFFFFFFFD2D4                                 RUNSML:                 ; RUN 
FFFFFFFFFFFFE3DC                                 RUNSML:                 ; RUN 
FFFFFFFFFFFFD2D4        31FFF936                        call    CHKIO           ; see if a control-C was pressed
FFFFFFFFFFFFE3DC        31FFFD77                        call    CHKIO           ; see if a control-C was pressed
FFFFFFFFFFFFD2D8        9A04CFF2                        lea             r9,TAB2         ; find command in TAB2
FFFFFFFFFFFFE3E0        9A04E0FE                        lea             r9,TAB2         ; find command in TAB2
FFFFFFFFFFFFD2DC        9A0550A8                        lea             r10,TAB2_1
FFFFFFFFFFFFE3E4        9A0561B0                        lea             r10,TAB2_1
FFFFFFFFFFFFD2E0        BE0079CA                        bra             EXEC            ; and execute it
FFFFFFFFFFFFE3E8        BE0079CA                        bra             EXEC            ; and execute it
 
 
FFFFFFFFFFFFD2E4                                 GOTO:
FFFFFFFFFFFFE3EC                                 GOTO:
FFFFFFFFFFFFD2E4        31FFF63A                        call    OREXPR          ;evaluate the following expression
FFFFFFFFFFFFE3EC        31FFFA7C                        call    OREXPR          ;evaluate the following expression
FFFFFFFFFFFFD2E8        02128009                        mov     r5,r1
FFFFFFFFFFFFE3F0        02128009                        mov     r5,r1
FFFFFFFFFFFFD2EC        31FFF7B9                        call    ENDCHK          ;must find end of line
FFFFFFFFFFFFE3F4        31FFFBFB                        call    ENDCHK          ;must find end of line
FFFFFFFFFFFFD2F0        02508009                        mov     r1,r5
FFFFFFFFFFFFE3F8        02508009                        mov     r1,r5
FFFFFFFFFFFFD2F4        31FFF80C                        call    FNDLN           ; find the target line
FFFFFFFFFFFFE3FC        31FFFC4E                        call    FNDLN           ; find the target line
FFFFFFFFFFFFD2F8        BE107EA9                        bne             r1,r0,RUNTSL            ; go do it
FFFFFFFFFFFFE400        BE107EA9                        bne             r1,r0,RUNTSL            ; go do it
FFFFFFFFFFFFD2FC        9A00E73B                        lea             r1,msgBadGotoGosub
FFFFFFFFFFFFE404        9A00F833                        lea             r1,msgBadGotoGosub
FFFFFFFFFFFFD300        BE00610A                        bra             ERROR           ; no such line no.
FFFFFFFFFFFFE408        BE00610A                        bra             ERROR           ; no such line no.
 
 
FFFFFFFFFFFFD304                                 _clr:
FFFFFFFFFFFFE40C                                 _clr:
FFFFFFFFFFFFD304        31FFF4C3                     call    clearVars
FFFFFFFFFFFFE40C        31FFF905                     call    clearVars
FFFFFFFFFFFFD308        BE00084A                     bra     FINISH
FFFFFFFFFFFFE410        BE00084A                     bra     FINISH
 
 
                                                 ; Clear the variable area of memory
                                                 ; Clear the variable area of memory
FFFFFFFFFFFFD30C                                 clearVars:
FFFFFFFFFFFFE414                                 clearVars:
FFFFFFFFFFFFD30C        0FEF0010                     subui   sp,sp,#16
FFFFFFFFFFFFE414        0FEF0010                     subui   sp,sp,#16
FFFFFFFFFFFFD310        67E30000                     sw         r6,[sp]
FFFFFFFFFFFFE418        67E30000                     sw         r6,[sp]
FFFFFFFFFFFFD314        67EF8008                     sw         lr,8[sp]
FFFFFFFFFFFFE41C        67EF8008                     sw         lr,8[sp]
FFFFFFFFFFFFD318        E1800800                     setlo   r6,#2048    ; number of words to clear
FFFFFFFFFFFFE420        E1800800                     setlo   r6,#2048    ; number of words to clear
FFFFFFFFFFFFD31C        460090D8                     lw      r1,VARBGN
FFFFFFFFFFFFE424        460090D8                     lw      r1,VARBGN
FFFFFFFFFFFFD320                                 cv1:
FFFFFFFFFFFFE428                                 cv1:
FFFFFFFFFFFFD320        66100000                     sw      r0,[r1]
FFFFFFFFFFFFE428        66100000                     sw      r0,[r1]
FFFFFFFFFFFFD324        08108008                     add     r1,r1,#8
FFFFFFFFFFFFE42C        08108008                     add     r1,r1,#8
FFFFFFFFFFFFD328        BE037FCF                     loop       r6,cv1
FFFFFFFFFFFFE430        BE037FCF                     loop       r6,cv1
FFFFFFFFFFFFD32C        47EF8008                     lw         lr,8[sp]
FFFFFFFFFFFFE434        47EF8008                     lw         lr,8[sp]
FFFFFFFFFFFFD330        47E30000                     lw         r6,[sp]
FFFFFFFFFFFFE438        47E30000                     lw         r6,[sp]
FFFFFFFFFFFFD334        37EF8010                     ret                #16
FFFFFFFFFFFFE43C        37EF8010                     ret                #16
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; LIST
                                                 ; LIST
                                                 ;
                                                 ;
Line 3278... Line 4857...
                                                 ; 'LIST' lists all saved lines
                                                 ; 'LIST' lists all saved lines
                                                 ; 'LIST #' starts listing at the line #
                                                 ; 'LIST #' starts listing at the line #
                                                 ; Control-S pauses the listing, control-C stops it.
                                                 ; Control-S pauses the listing, control-C stops it.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD338                                 LISTX:
FFFFFFFFFFFFE440                                 LISTX:
FFFFFFFFFFFFD338        31FFF8FF                        call    TSTNUM          ; see if there's a line no.
FFFFFFFFFFFFE440        31FFFD3E                        call    TSTNUM          ; see if there's a line no.
FFFFFFFFFFFFD33C        02128009                        mov     r5,r1
FFFFFFFFFFFFE444        02128009                        mov     r5,r1
FFFFFFFFFFFFD340        31FFF7B9                        call    ENDCHK          ; if not, we get a zero
FFFFFFFFFFFFE448        31FFFBFB                        call    ENDCHK          ; if not, we get a zero
FFFFFFFFFFFFD344        02508009                        mov     r1,r5
FFFFFFFFFFFFE44C        02508009                        mov     r1,r5
FFFFFFFFFFFFD348        31FFF80C                        call    FNDLN           ; find this or next line
FFFFFFFFFFFFE450        31FFFC4E                        call    FNDLN           ; find this or next line
FFFFFFFFFFFFD34C                                 LS1:
FFFFFFFFFFFFE454                                 LS1:
FFFFFFFFFFFFD34C        BE100049                        bne             r1,r0,LS4
FFFFFFFFFFFFE454        BE100049                        bne             r1,r0,LS4
FFFFFFFFFFFFD350        BE905D48                        beq             r9,r0,WSTART    ; warm start if we passed the end
FFFFFFFFFFFFE458        BE905D68                        beq             r9,r0,WSTART    ; warm start if we passed the end
FFFFFFFFFFFFD354                                 LS4:
FFFFFFFFFFFFE45C                                 LS4:
FFFFFFFFFFFFD354        02908009                        mov             r1,r9
FFFFFFFFFFFFE45C        02908009                        mov             r1,r9
FFFFFFFFFFFFD358        31FFF8DF                        call    PRTLN           ; print the line
FFFFFFFFFFFFE460        31FFFD1E                        call    PRTLN           ; print the line
FFFFFFFFFFFFD35C        02148009                        mov             r9,r1           ; set pointer for next
FFFFFFFFFFFFE464        02148009                        mov             r9,r1           ; set pointer for next
FFFFFFFFFFFFD360        31FFF936                        call    CHKIO           ; check for listing halt request
FFFFFFFFFFFFE468        31FFFD77                        call    CHKIO           ; check for listing halt request
FFFFFFFFFFFFD364        BE100088                        beq             r1,r0,LS3
FFFFFFFFFFFFE46C        BE100088                        beq             r1,r0,LS3
FFFFFFFFFFFFD368        B2100313                        bnei    r1,#CTRLS,LS3   ; pause the listing?
FFFFFFFFFFFFE470        B2100313                        bnei    r1,#CTRLS,LS3   ; pause the listing?
FFFFFFFFFFFFD36C                                 LS2:
FFFFFFFFFFFFE474                                 LS2:
FFFFFFFFFFFFD36C        31FFF936                        call    CHKIO           ; if so, wait for another keypress
FFFFFFFFFFFFE474        31FFFD77                        call    CHKIO           ; if so, wait for another keypress
FFFFFFFFFFFFD370        BE107FE8                        beq             r1,r0,LS2
FFFFFFFFFFFFE478        BE107FE8                        beq             r1,r0,LS2
FFFFFFFFFFFFD374                                 LS3:
FFFFFFFFFFFFE47C                                 LS3:
FFFFFFFFFFFFD374        E0400000                        setlo   r1,#0
FFFFFFFFFFFFE47C        E0400000                        setlo   r1,#0
FFFFFFFFFFFFD378        31FFF810                        call    FNDLNP          ; find the next line
FFFFFFFFFFFFE480        31FFFC52                        call    FNDLNP          ; find the next line
FFFFFFFFFFFFD37C        BE007E8A                        bra             LS1
FFFFFFFFFFFFE484        BE007E8A                        bra             LS1
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; PRINT command is 'PRINT ....:' or 'PRINT ....'
                                                 ; PRINT command is 'PRINT ....:' or 'PRINT ....'
                                                 ; where '....' is a list of expressions, formats, back-arrows,
                                                 ; where '....' is a list of expressions, formats, back-arrows,
Line 3323... Line 4902...
                                                 ; A  is generated after the entire list has been printed
                                                 ; A  is generated after the entire list has been printed
                                                 ; or if the list is empty.  If the list ends with a semicolon,
                                                 ; or if the list is empty.  If the list ends with a semicolon,
                                                 ; however, no  is generated.
                                                 ; however, no  is generated.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD380                                 PRINT:
FFFFFFFFFFFFE488                                 PRINT:
FFFFFFFFFFFFD380        1602800B                        lw              r5,#11          ; D4 = number of print spaces
FFFFFFFFFFFFE488        1602800B                        lw              r5,#11          ; D4 = number of print spaces
FFFFFFFFFFFFD384        E0C0003A                        setlo   r3,#':'
FFFFFFFFFFFFE48C        E0C0003A                        setlo   r3,#':'
FFFFFFFFFFFFD388        9A025398                        lea             r4,PR2
FFFFFFFFFFFFE490        9A0264A0                        lea             r4,PR2
FFFFFFFFFFFFD38C        31FFF8F1                        call    TSTC            ; if null list and ":"
FFFFFFFFFFFFE494        31FFFD30                        call    TSTC            ; if null list and ":"
FFFFFFFFFFFFD390        31FFEFFA                        call    CRLF            ; give CR-LF and continue
FFFFFFFFFFFFE498        31FFF135                        call    CRLF            ; give CR-LF and continue
FFFFFFFFFFFFD394        BE007A0A                        bra             RUNSML          ;               execution on the same line
FFFFFFFFFFFFE49C        BE007A0A                        bra             RUNSML          ;               execution on the same line
FFFFFFFFFFFFD398                                 PR2:
FFFFFFFFFFFFE4A0                                 PR2:
FFFFFFFFFFFFD398        E0C0000D                        setlo   r3,#CR
FFFFFFFFFFFFE4A0        E0C0000D                        setlo   r3,#CR
FFFFFFFFFFFFD39C        9A0253AC                        lea             r4,PR0
FFFFFFFFFFFFE4A4        9A0264B4                        lea             r4,PR0
FFFFFFFFFFFFD3A0        31FFF8F1                        call    TSTC            ;if null list and 
FFFFFFFFFFFFE4A8        31FFFD30                        call    TSTC            ;if null list and 
FFFFFFFFFFFFD3A4        31FFEFFA                        call    CRLF            ;also give CR-LF and
FFFFFFFFFFFFE4AC        31FFF135                        call    CRLF            ;also give CR-LF and
FFFFFFFFFFFFD3A8        BE00782A                        bra             RUNNXL          ;execute the next line
FFFFFFFFFFFFE4B0        BE00782A                        bra             RUNNXL          ;execute the next line
FFFFFFFFFFFFD3AC                                 PR0:
FFFFFFFFFFFFE4B4                                 PR0:
FFFFFFFFFFFFD3AC        E0C00023                        setlo   r3,#'#'
FFFFFFFFFFFFE4B4        E0C00023                        setlo   r3,#'#'
FFFFFFFFFFFFD3B0        9A0253C4                        lea             r4,PR1
FFFFFFFFFFFFE4B8        9A0264CC                        lea             r4,PR1
FFFFFFFFFFFFD3B4        31FFF8F1                        call    TSTC            ;else is it a format?
FFFFFFFFFFFFE4BC        31FFFD30                        call    TSTC            ;else is it a format?
FFFFFFFFFFFFD3B8        31FFF63A                        call    OREXPR          ; yes, evaluate expression
FFFFFFFFFFFFE4C0        31FFFA7C                        call    OREXPR          ; yes, evaluate expression
FFFFFFFFFFFFD3BC        04101409                        lw              r5,r1           ; and save it as print width
FFFFFFFFFFFFE4C4        04101409                        lw              r5,r1           ; and save it as print width
FFFFFFFFFFFFD3C0        BE00012A                        bra             PR3             ; look for more to print
FFFFFFFFFFFFE4C8        BE00012A                        bra             PR3             ; look for more to print
FFFFFFFFFFFFD3C4                                 PR1:
FFFFFFFFFFFFE4CC                                 PR1:
FFFFFFFFFFFFD3C4        E0C00024                        setlo   r3,#'$'
FFFFFFFFFFFFE4CC        E0C00024                        setlo   r3,#'$'
FFFFFFFFFFFFD3C8        9A0253DC                        lea             r4,PR4
FFFFFFFFFFFFE4D0        9A0264E4                        lea             r4,PR4
FFFFFFFFFFFFD3CC        31FFF8F1                        call    TSTC    ;       is character expression? (MRL)
FFFFFFFFFFFFE4D4        31FFFD30                        call    TSTC    ;       is character expression? (MRL)
FFFFFFFFFFFFD3D0        31FFF63A                        call    OREXPR  ;       yep. Evaluate expression (MRL)
FFFFFFFFFFFFE4D8        31FFFA7C                        call    OREXPR  ;       yep. Evaluate expression (MRL)
FFFFFFFFFFFFD3D4        31FFF393                        call    GOOUT   ;       print low byte (MRL)
FFFFFFFFFFFFE4DC        31FFF7D5                        call    GOOUT   ;       print low byte (MRL)
FFFFFFFFFFFFD3D8        BE00006A                        bra             PR3             ;look for more. (MRL)
FFFFFFFFFFFFE4E0        BE00006A                        bra             PR3             ;look for more. (MRL)
FFFFFFFFFFFFD3DC                                 PR4:
FFFFFFFFFFFFE4E4                                 PR4:
FFFFFFFFFFFFD3DC        31FFF867                        call    QTSTG   ;       is it a string?
FFFFFFFFFFFFE4E4        31FFFCA9                        call    QTSTG   ;       is it a string?
                                                        ; the following branch must occupy only two bytes!
                                                        ; the following branch must occupy only two bytes!
FFFFFFFFFFFFD3E0        BE00010A                        bra             PR8             ;       if not, must be an expression
FFFFFFFFFFFFE4E8        BE00010A                        bra             PR8             ;       if not, must be an expression
FFFFFFFFFFFFD3E4                                 PR3:
FFFFFFFFFFFFE4EC                                 PR3:
FFFFFFFFFFFFD3E4        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFE4EC        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFD3E8        9A0253F8                        lea             r4,PR6
FFFFFFFFFFFFE4F0        9A026500                        lea             r4,PR6
FFFFFFFFFFFFD3EC        31FFF8F1                        call    TSTC    ;       if ",", go find next
FFFFFFFFFFFFE4F4        31FFFD30                        call    TSTC    ;       if ",", go find next
FFFFFFFFFFFFD3F0        31FFF7AA                        call    FIN             ;in the list.
FFFFFFFFFFFFE4F8        31FFFBEC                        call    FIN             ;in the list.
FFFFFFFFFFFFD3F4        BE007DCA                        bra             PR0
FFFFFFFFFFFFE4FC        BE007DCA                        bra             PR0
FFFFFFFFFFFFD3F8                                 PR6:
FFFFFFFFFFFFE500                                 PR6:
FFFFFFFFFFFFD3F8        31FFEFFA                        call    CRLF            ;list ends here
FFFFFFFFFFFFE500        31FFF135                        call    CRLF            ;list ends here
FFFFFFFFFFFFD3FC        BE0000AA                        bra             FINISH
FFFFFFFFFFFFE504        BE0000AA                        bra             FINISH
FFFFFFFFFFFFD400                                 PR8:
FFFFFFFFFFFFE508                                 PR8:
FFFFFFFFFFFFD400        31FFF63A                        call    OREXPR          ; evaluate the expression
FFFFFFFFFFFFE508        31FFFA7C                        call    OREXPR          ; evaluate the expression
FFFFFFFFFFFFD404        04500809                        lw              r2,r5           ; set the width
FFFFFFFFFFFFE50C        04500809                        lw              r2,r5           ; set the width
FFFFFFFFFFFFD408        31FFF88D                        call    PRTNUM          ; print its value
FFFFFFFFFFFFE510        31FFFCCC                        call    PRTNUM          ; print its value
FFFFFFFFFFFFD40C        BE007ECA                        bra             PR3                     ; more to print?
FFFFFFFFFFFFE514        BE007ECA                        bra             PR3                     ; more to print?
 
 
FFFFFFFFFFFFD410                                 FINISH:
FFFFFFFFFFFFE518                                 FINISH:
FFFFFFFFFFFFD410        31FFF7AA                        call    FIN             ; Check end of command
FFFFFFFFFFFFE518        31FFFBEC                        call    FIN             ; Check end of command
FFFFFFFFFFFFD414        33FFF7C7                        jmp             QWHAT   ; print "What?" if wrong
FFFFFFFFFFFFE51C        33FFFC09                        jmp             QWHAT   ; print "What?" if wrong
 
 
 
 
                                                 ;*******************************************************************
                                                 ;*******************************************************************
                                                 ;
                                                 ;
                                                 ; *** GOSUB *** & RETURN ***
                                                 ; *** GOSUB *** & RETURN ***
Line 3389... Line 4968...
                                                 ; If we are in the main routine, 'STKGOS' is zero (this was done
                                                 ; If we are in the main routine, 'STKGOS' is zero (this was done
                                                 ; in the initialization section of the interpreter), but we still
                                                 ; in the initialization section of the interpreter), but we still
                                                 ; save it as a flag for no further 'RETURN's.
                                                 ; save it as a flag for no further 'RETURN's.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD418                                 GOSUB:
FFFFFFFFFFFFE520                                 GOSUB:
FFFFFFFFFFFFD418        31FFF83E                        call    PUSHA           ; save the current 'FOR' parameters
FFFFFFFFFFFFE520        31FFFC80                        call    PUSHA           ; save the current 'FOR' parameters
FFFFFFFFFFFFD41C        31FFF63A                        call    OREXPR          ; get line number
FFFFFFFFFFFFE524        31FFFA7C                        call    OREXPR          ; get line number
FFFFFFFFFFFFD420        31FFF80C                        call    FNDLN           ; find the target line
FFFFFFFFFFFFE528        31FFFC4E                        call    FNDLN           ; find the target line
FFFFFFFFFFFFD424        BE100069                        bne             r1,r0,gosub1
FFFFFFFFFFFFE52C        BE100069                        bne             r1,r0,gosub1
FFFFFFFFFFFFD428        9A00E73B                        lea             r1,msgBadGotoGosub
FFFFFFFFFFFFE530        9A00F833                        lea             r1,msgBadGotoGosub
FFFFFFFFFFFFD42C        BE0057AA                        bra             ERROR           ; if not there, say "How?"
FFFFFFFFFFFFE534        BE0057AA                        bra             ERROR           ; if not there, say "How?"
FFFFFFFFFFFFD430                                 gosub1:
FFFFFFFFFFFFE538                                 gosub1:
FFFFFFFFFFFFD430        0DEF0018                        sub             sp,sp,#24
FFFFFFFFFFFFE538        0DEF0018                        sub             sp,sp,#24
FFFFFFFFFFFFD434        67E40000                        sw              r8,[sp]         ; save text pointer
FFFFFFFFFFFFE53C        67E40000                        sw              r8,[sp]         ; save text pointer
FFFFFFFFFFFFD438        46009090                        lw              r1,CURRNT
FFFFFFFFFFFFE540        46009090                        lw              r1,CURRNT
FFFFFFFFFFFFD43C        67E08008                        sw              r1,8[sp]        ; found it, save old 'CURRNT'...
FFFFFFFFFFFFE544        67E08008                        sw              r1,8[sp]        ; found it, save old 'CURRNT'...
FFFFFFFFFFFFD440        46009098                        lw              r1,STKGOS
FFFFFFFFFFFFE548        46009098                        lw              r1,STKGOS
FFFFFFFFFFFFD444        67E08010                        sw              r1,16[sp]       ; and 'STKGOS'
FFFFFFFFFFFFE54C        67E08010                        sw              r1,16[sp]       ; and 'STKGOS'
FFFFFFFFFFFFD448        660010A8                        sw              r0,LOPVAR       ; load new values
FFFFFFFFFFFFE550        660010A8                        sw              r0,LOPVAR       ; load new values
FFFFFFFFFFFFD44C        660F1098                        sw              sp,STKGOS
FFFFFFFFFFFFE554        660F1098                        sw              sp,STKGOS
FFFFFFFFFFFFD450        BE0073EA                        bra             RUNTSL
FFFFFFFFFFFFE558        BE0073EA                        bra             RUNTSL
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; 'RETURN' undoes everything that 'GOSUB' did, and thus
                                                 ; 'RETURN' undoes everything that 'GOSUB' did, and thus
                                                 ; returns the execution to the command after the most recent
                                                 ; returns the execution to the command after the most recent
                                                 ; 'GOSUB'.  If 'STKGOS' is zero, it indicates that we never had
                                                 ; 'GOSUB'.  If 'STKGOS' is zero, it indicates that we never had
                                                 ; a 'GOSUB' and is thus an error.
                                                 ; a 'GOSUB' and is thus an error.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD454                                 RETURN:
FFFFFFFFFFFFE55C                                 RETURN:
FFFFFFFFFFFFD454        31FFF7B9                        call    ENDCHK          ; there should be just a 
FFFFFFFFFFFFE55C        31FFFBFB                        call    ENDCHK          ; there should be just a 
FFFFFFFFFFFFD458        46009098                        lw              r1,STKGOS       ; get old stack pointer
FFFFFFFFFFFFE560        46009098                        lw              r1,STKGOS       ; get old stack pointer
FFFFFFFFFFFFD45C        BE100069                        bne             r1,r0,return1
FFFFFFFFFFFFE564        BE100069                        bne             r1,r0,return1
FFFFFFFFFFFFD460        9A00E758                        lea             r1,msgRetWoGosub
FFFFFFFFFFFFE568        9A00F850                        lea             r1,msgRetWoGosub
FFFFFFFFFFFFD464        BE0055EA                        bra             ERROR           ; if zero, it doesn't exist
FFFFFFFFFFFFE56C        BE0055EA                        bra             ERROR           ; if zero, it doesn't exist
FFFFFFFFFFFFD468                                 return1:
FFFFFFFFFFFFE570                                 return1:
FFFFFFFFFFFFD468        021F0009                        mov             sp,r1           ; else restore it
FFFFFFFFFFFFE570        021F0009                        mov             sp,r1           ; else restore it
FFFFFFFFFFFFD46C        47E08010                        lw              r1,16[sp]
FFFFFFFFFFFFE574        47E08010                        lw              r1,16[sp]
FFFFFFFFFFFFD470        66009098                        sw              r1,STKGOS       ; and the old 'STKGOS'
FFFFFFFFFFFFE578        66009098                        sw              r1,STKGOS       ; and the old 'STKGOS'
FFFFFFFFFFFFD474        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFE57C        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFD478        66009090                        sw              r1,CURRNT       ; and the old 'CURRNT'
FFFFFFFFFFFFE580        66009090                        sw              r1,CURRNT       ; and the old 'CURRNT'
FFFFFFFFFFFFD47C        47E40000                        lw              r8,[sp]         ; and the old text pointer
FFFFFFFFFFFFE584        47E40000                        lw              r8,[sp]         ; and the old text pointer
FFFFFFFFFFFFD480        09EF0018                        add             sp,sp,#24
FFFFFFFFFFFFE588        09EF0018                        add             sp,sp,#24
FFFFFFFFFFFFD484        31FFF831                        call    POPA            ;and the old 'FOR' parameters
FFFFFFFFFFFFE58C        31FFFC73                        call    POPA            ;and the old 'FOR' parameters
FFFFFFFFFFFFD488        BE007C4A                        bra             FINISH          ;and we are back home
FFFFFFFFFFFFE590        BE007C4A                        bra             FINISH          ;and we are back home
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; *** FOR *** & NEXT ***
                                                 ; *** FOR *** & NEXT ***
                                                 ;
                                                 ;
                                                 ; 'FOR' has two forms:
                                                 ; 'FOR' has two forms:
Line 3451... Line 5030...
                                                 ; stack and find out if this same variable was used in another
                                                 ; stack and find out if this same variable was used in another
                                                 ; currently active 'FOR' loop.  If that is the case, then the old
                                                 ; currently active 'FOR' loop.  If that is the case, then the old
                                                 ; 'FOR' loop is deactivated. (i.e. purged from the stack)
                                                 ; 'FOR' loop is deactivated. (i.e. purged from the stack)
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD48C                                 FOR:
FFFFFFFFFFFFE594                                 FOR:
FFFFFFFFFFFFD48C        31FFF83E                        call    PUSHA           ; save the old 'FOR' save area
FFFFFFFFFFFFE594        31FFFC80                        call    PUSHA           ; save the old 'FOR' save area
FFFFFFFFFFFFD490        31FFF798                        call    SETVAL          ; set the control variable
FFFFFFFFFFFFE598        31FFFBDA                        call    SETVAL          ; set the control variable
FFFFFFFFFFFFD494        660090A8                        sw              r1,LOPVAR       ; save its address
FFFFFFFFFFFFE59C        660090A8                        sw              r1,LOPVAR       ; save its address
FFFFFFFFFFFFD498        9A04D063                        lea             r9,TAB5
FFFFFFFFFFFFE5A0        9A04E16F                        lea             r9,TAB5
FFFFFFFFFFFFD49C        9A055198                        lea             r10,TAB5_1; use 'EXEC' to test for 'TO'
FFFFFFFFFFFFE5A4        9A0562A0                        lea             r10,TAB5_1; use 'EXEC' to test for 'TO'
FFFFFFFFFFFFD4A0        33FFF486                        jmp             EXEC
FFFFFFFFFFFFE5A8        33FFF8C8                        jmp             EXEC
FFFFFFFFFFFFD4A4                                 FR1:
FFFFFFFFFFFFE5AC                                 FR1:
FFFFFFFFFFFFD4A4        31FFF63A                        call    OREXPR          ; evaluate the limit
FFFFFFFFFFFFE5AC        31FFFA7C                        call    OREXPR          ; evaluate the limit
FFFFFFFFFFFFD4A8        660090B8                        sw              r1,LOPLMT       ; save that
FFFFFFFFFFFFE5B0        660090B8                        sw              r1,LOPLMT       ; save that
FFFFFFFFFFFFD4AC        9A04D066                        lea             r9,TAB6
FFFFFFFFFFFFE5B4        9A04E172                        lea             r9,TAB6
FFFFFFFFFFFFD4B0        9A0551A8                        lea             r10,TAB6_1      ; use 'EXEC' to test for the word 'STEP
FFFFFFFFFFFFE5B8        9A0562B0                        lea             r10,TAB6_1      ; use 'EXEC' to test for the word 'STEP
FFFFFFFFFFFFD4B4        33FFF486                        jmp             EXEC
FFFFFFFFFFFFE5BC        33FFF8C8                        jmp             EXEC
FFFFFFFFFFFFD4B8                                 FR2:
FFFFFFFFFFFFE5C0                                 FR2:
FFFFFFFFFFFFD4B8        31FFF63A                        call    OREXPR          ; found it, get the step value
FFFFFFFFFFFFE5C0        31FFFA7C                        call    OREXPR          ; found it, get the step value
FFFFFFFFFFFFD4BC        BE00004A                        bra             FR4
FFFFFFFFFFFFE5C4        BE00004A                        bra             FR4
FFFFFFFFFFFFD4C0                                 FR3:
FFFFFFFFFFFFE5C8                                 FR3:
FFFFFFFFFFFFD4C0        E0400001                        setlo   r1,#1           ; not found, step defaults to 1
FFFFFFFFFFFFE5C8        E0400001                        setlo   r1,#1           ; not found, step defaults to 1
FFFFFFFFFFFFD4C4                                 FR4:
FFFFFFFFFFFFE5CC                                 FR4:
FFFFFFFFFFFFD4C4        660090B0                        sw              r1,LOPINC       ; save that too
FFFFFFFFFFFFE5CC        660090B0                        sw              r1,LOPINC       ; save that too
FFFFFFFFFFFFD4C8                                 FR5:
FFFFFFFFFFFFE5D0                                 FR5:
FFFFFFFFFFFFD4C8        46011090                        lw              r2,CURRNT
FFFFFFFFFFFFE5D0        46011090                        lw              r2,CURRNT
FFFFFFFFFFFFD4CC        660110C0                        sw              r2,LOPLN        ; save address of current line number
FFFFFFFFFFFFE5D4        660110C0                        sw              r2,LOPLN        ; save address of current line number
FFFFFFFFFFFFD4D0        660410C8                        sw              r8,LOPPT        ; and text pointer
FFFFFFFFFFFFE5D8        660410C8                        sw              r8,LOPPT        ; and text pointer
FFFFFFFFFFFFD4D4        05E00C09                        lw              r3,sp           ; dig into the stack to find 'LOPVAR'
FFFFFFFFFFFFE5DC        05E00C09                        lw              r3,sp           ; dig into the stack to find 'LOPVAR'
FFFFFFFFFFFFD4D8        460310A8                        lw              r6,LOPVAR
FFFFFFFFFFFFE5E0        460310A8                        lw              r6,LOPVAR
FFFFFFFFFFFFD4DC        BE00004A                        bra             FR7
FFFFFFFFFFFFE5E4        BE00004A                        bra             FR7
FFFFFFFFFFFFD4E0                                 FR6:
FFFFFFFFFFFFE5E8                                 FR6:
FFFFFFFFFFFFD4E0        0A318028                        addui   r3,r3,#40       ; look at next stack frame
FFFFFFFFFFFFE5E8        0A318028                        addui   r3,r3,#40       ; look at next stack frame
FFFFFFFFFFFFD4E4                                 FR7:
FFFFFFFFFFFFE5EC                                 FR7:
FFFFFFFFFFFFD4E4        46310000                        lw              r2,[r3]         ; is it zero?
FFFFFFFFFFFFE5EC        46310000                        lw              r2,[r3]         ; is it zero?
FFFFFFFFFFFFD4E8        BE2000E8                        beq             r2,r0,FR8       ; if so, we're done
FFFFFFFFFFFFE5F0        BE2000E8                        beq             r2,r0,FR8       ; if so, we're done
FFFFFFFFFFFFD4EC        BE237FA9                        bne             r2,r6,FR6       ; same as current LOPVAR? nope, look some more
FFFFFFFFFFFFE5F4        BE237FA9                        bne             r2,r6,FR6       ; same as current LOPVAR? nope, look some more
 
 
FFFFFFFFFFFFD4F0        04300409                     lw      r1,r3       ; Else remove 5 long words from...
FFFFFFFFFFFFE5F8        04300409                     lw      r1,r3       ; Else remove 5 long words from...
FFFFFFFFFFFFD4F4        0A310028                        addui   r2,r3,#40   ; inside the stack.
FFFFFFFFFFFFE5FC        0A310028                        addui   r2,r3,#40   ; inside the stack.
FFFFFFFFFFFFD4F8        05E00C09                        lw              r3,sp
FFFFFFFFFFFFE600        05E00C09                        lw              r3,sp
FFFFFFFFFFFFD4FC        31FFF82F                        call    MVDOWN
FFFFFFFFFFFFE604        31FFFC71                        call    MVDOWN
FFFFFFFFFFFFD500        09EF0028                        add             sp,sp,#40       ; set the SP 5 long words up
FFFFFFFFFFFFE608        09EF0028                        add             sp,sp,#40       ; set the SP 5 long words up
FFFFFFFFFFFFD504                                 FR8:
FFFFFFFFFFFFE60C                                 FR8:
FFFFFFFFFFFFD504        BE00786A                     bra            FINISH              ; and continue execution
FFFFFFFFFFFFE60C        BE00786A                     bra            FINISH              ; and continue execution
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; 'NEXT var' serves as the logical (not necessarily physical) end
                                                 ; 'NEXT var' serves as the logical (not necessarily physical) end
                                                 ; of the 'FOR' loop.  The control variable 'var' is checked with
                                                 ; of the 'FOR' loop.  The control variable 'var' is checked with
Line 3506... Line 5085...
                                                 ; the limit, control loops back to the command following the
                                                 ; the limit, control loops back to the command following the
                                                 ; 'FOR'.  If it's outside the limit, the save area is purged and
                                                 ; 'FOR'.  If it's outside the limit, the save area is purged and
                                                 ; execution continues.
                                                 ; execution continues.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD508                                 NEXT:
FFFFFFFFFFFFE610                                 NEXT:
FFFFFFFFFFFFD508        E0400000                        setlo   r1,#0           ; don't allocate it
FFFFFFFFFFFFE610        E0400000                        setlo   r1,#0           ; don't allocate it
FFFFFFFFFFFFD50C        31FFF6EC                        call    TSTV            ; get address of variable
FFFFFFFFFFFFE614        31FFFB2E                        call    TSTV            ; get address of variable
FFFFFFFFFFFFD510        BE100069                        bne             r1,r0,NX4
FFFFFFFFFFFFE618        BE100069                        bne             r1,r0,NX4
FFFFFFFFFFFFD514        9A00E717                        lea             r1,msgNextVar
FFFFFFFFFFFFE61C        9A00F80F                        lea             r1,msgNextVar
FFFFFFFFFFFFD518        BE00504A                        bra             ERROR           ; if no variable, say "What?"
FFFFFFFFFFFFE620        BE00504A                        bra             ERROR           ; if no variable, say "What?"
FFFFFFFFFFFFD51C                                 NX4:
FFFFFFFFFFFFE624                                 NX4:
FFFFFFFFFFFFD51C        02148009                        mov             r9,r1           ; save variable's address
FFFFFFFFFFFFE624        02148009                        mov             r9,r1           ; save variable's address
FFFFFFFFFFFFD520                                 NX0:
FFFFFFFFFFFFE628                                 NX0:
FFFFFFFFFFFFD520        460090A8                        lw              r1,LOPVAR       ; If 'LOPVAR' is zero, we never...
FFFFFFFFFFFFE628        460090A8                        lw              r1,LOPVAR       ; If 'LOPVAR' is zero, we never...
FFFFFFFFFFFFD524        BE100069                        bne             r1,r0,NX5   ; had a FOR loop
FFFFFFFFFFFFE62C        BE100069                        bne             r1,r0,NX5   ; had a FOR loop
FFFFFFFFFFFFD528        9A00E704                        lea             r1,msgNextFor
FFFFFFFFFFFFE630        9A00F7FC                        lea             r1,msgNextFor
FFFFFFFFFFFFD52C        BE004FAA                        bra             ERROR
FFFFFFFFFFFFE634        BE004FAA                        bra             ERROR
FFFFFFFFFFFFD530                                 NX5:
FFFFFFFFFFFFE638                                 NX5:
FFFFFFFFFFFFD530        BE148068                        beq             r1,r9,NX2       ; else we check them OK, they agree
FFFFFFFFFFFFE638        BE148068                        beq             r1,r9,NX2       ; else we check them OK, they agree
FFFFFFFFFFFFD534        31FFF831                        call    POPA            ; nope, let's see the next frame
FFFFFFFFFFFFE63C        31FFFC73                        call    POPA            ; nope, let's see the next frame
FFFFFFFFFFFFD538        BE007F4A                        bra             NX0
FFFFFFFFFFFFE640        BE007F4A                        bra             NX0
FFFFFFFFFFFFD53C                                 NX2:
FFFFFFFFFFFFE644                                 NX2:
FFFFFFFFFFFFD53C        46908000                        lw              r1,[r9]         ; get control variable's value
FFFFFFFFFFFFE644        46908000                        lw              r1,[r9]         ; get control variable's value
FFFFFFFFFFFFD540        460110B0                        lw              r2,LOPINC
FFFFFFFFFFFFE648        460110B0                        lw              r2,LOPINC
FFFFFFFFFFFFD544        04110403                        addu    r1,r1,r2        ; add in loop increment
FFFFFFFFFFFFE64C        04110403                        addu    r1,r1,r2        ; add in loop increment
                                                 ;      BVS.L   QHOW            say "How?" for 32-bit overflow
                                                 ;      BVS.L   QHOW            say "How?" for 32-bit overflow
FFFFFFFFFFFFD548        66908000                        sw              r1,[r9]         ; save control variable's new value
FFFFFFFFFFFFE650        66908000                        sw              r1,[r9]         ; save control variable's new value
FFFFFFFFFFFFD54C        460190B8                        lw              r3,LOPLMT       ; get loop's limit value
FFFFFFFFFFFFE654        460190B8                        lw              r3,LOPLMT       ; get loop's limit value
FFFFFFFFFFFFD550        BE200063                        bgt             r2,r0,NX1       ; check loop increment, branch if loop increment is positive
FFFFFFFFFFFFE658        BE200063                        bgt             r2,r0,NX1       ; check loop increment, branch if loop increment is positive
FFFFFFFFFFFFD554        BE1180E0                        blt             r1,r3,NXPurge   ; test against limit
FFFFFFFFFFFFE65C        BE1180E0                        blt             r1,r3,NXPurge   ; test against limit
FFFFFFFFFFFFD558        BE00004A                        bra     NX3
FFFFFFFFFFFFE660        BE00004A                        bra     NX3
FFFFFFFFFFFFD55C                                 NX1:
FFFFFFFFFFFFE664                                 NX1:
FFFFFFFFFFFFD55C        BE1180A3                        bgt             r1,r3,NXPurge
FFFFFFFFFFFFE664        BE1180A3                        bgt             r1,r3,NXPurge
FFFFFFFFFFFFD560                                 NX3:
FFFFFFFFFFFFE668                                 NX3:
FFFFFFFFFFFFD560        460410C0                        lw              r8,LOPLN        ; Within limit, go back to the...
FFFFFFFFFFFFE668        460410C0                        lw              r8,LOPLN        ; Within limit, go back to the...
FFFFFFFFFFFFD564        66041090                        sw              r8,CURRNT
FFFFFFFFFFFFE66C        66041090                        sw              r8,CURRNT
FFFFFFFFFFFFD568        460410C8                        lw              r8,LOPPT        ; saved 'CURRNT' and text pointer.
FFFFFFFFFFFFE670        460410C8                        lw              r8,LOPPT        ; saved 'CURRNT' and text pointer.
FFFFFFFFFFFFD56C        BE00752A                        bra             FINISH
FFFFFFFFFFFFE674        BE00752A                        bra             FINISH
FFFFFFFFFFFFD570                                 NXPurge:
FFFFFFFFFFFFE678                                 NXPurge:
FFFFFFFFFFFFD570        31FFF831                     call    POPA        ; purge this loop
FFFFFFFFFFFFE678        31FFFC73                     call    POPA        ; purge this loop
FFFFFFFFFFFFD574        BE0074EA                     bra     FINISH
FFFFFFFFFFFFE67C        BE0074EA                     bra     FINISH
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; *** REM *** IF *** INPUT *** LET (& DEFLT) ***
                                                 ; *** REM *** IF *** INPUT *** LET (& DEFLT) ***
                                                 ;
                                                 ;
Line 3561... Line 5140...
                                                 ; the expression.  If it is non-zero, execution continues.  If it
                                                 ; the expression.  If it is non-zero, execution continues.  If it
                                                 ; is zero, the commands that follow are ignored and execution
                                                 ; is zero, the commands that follow are ignored and execution
                                                 ; continues on the next line.
                                                 ; continues on the next line.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD578                                 IF:
FFFFFFFFFFFFE680                                 IF:
FFFFFFFFFFFFD578        31FFF63A                     call       OREXPR          ; evaluate the expression
FFFFFFFFFFFFE680        31FFFA7C                     call       OREXPR          ; evaluate the expression
FFFFFFFFFFFFD57C                                 IF1:
FFFFFFFFFFFFE684                                 IF1:
FFFFFFFFFFFFD57C        BE106AC9                     bne            r1,r0,RUNSML                ; is it zero? if not, continue
FFFFFFFFFFFFE684        BE106AC9                     bne            r1,r0,RUNSML                ; is it zero? if not, continue
FFFFFFFFFFFFD580                                 IF2:
FFFFFFFFFFFFE688                                 IF2:
FFFFFFFFFFFFD580        02848009                     mov                r9,r8           ; set lookup pointer
FFFFFFFFFFFFE688        02848009                     mov                r9,r8           ; set lookup pointer
FFFFFFFFFFFFD584        E0400000                        setlo   r1,#0           ; find line #0 (impossible)
FFFFFFFFFFFFE68C        E0400000                        setlo   r1,#0           ; find line #0 (impossible)
FFFFFFFFFFFFD588        31FFF821                        call    FNDSKP          ; if so, skip the rest of the line
FFFFFFFFFFFFE690        31FFFC63                        call    FNDSKP          ; if so, skip the rest of the line
FFFFFFFFFFFFD58C        BE104B63                        bgt             r1,r0,WSTART    ; if no next line, do a warm start
FFFFFFFFFFFFE694        BE104B83                        bgt             r1,r0,WSTART    ; if no next line, do a warm start
FFFFFFFFFFFFD590                                 IF3:
FFFFFFFFFFFFE698                                 IF3:
FFFFFFFFFFFFD590        BE0069EA                        bra             RUNTSL          ; run the next line
FFFFFFFFFFFFE698        BE0069EA                        bra             RUNTSL          ; run the next line
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; INPUT is called first and establishes a stack frame
                                                 ; INPUT is called first and establishes a stack frame
FFFFFFFFFFFFD594                                 INPERR:
FFFFFFFFFFFFE69C                                 INPERR:
FFFFFFFFFFFFD594        460F10A0                        lw              sp,STKINP       ; restore the old stack pointer
FFFFFFFFFFFFE69C        460F10A0                        lw              sp,STKINP       ; restore the old stack pointer
FFFFFFFFFFFFD598        47E40010                        lw              r8,16[sp]
FFFFFFFFFFFFE6A0        47E40010                        lw              r8,16[sp]
FFFFFFFFFFFFD59C        66041090                        sw              r8,CURRNT       ; and old 'CURRNT'
FFFFFFFFFFFFE6A4        66041090                        sw              r8,CURRNT       ; and old 'CURRNT'
FFFFFFFFFFFFD5A0        47E40008                        lw              r8,8[sp]        ; and old text pointer
FFFFFFFFFFFFE6A8        47E40008                        lw              r8,8[sp]        ; and old text pointer
FFFFFFFFFFFFD5A4        0BEF0028                        addui   sp,sp,#40       ; fall through will subtract 40
FFFFFFFFFFFFE6AC        0BEF0028                        addui   sp,sp,#40       ; fall through will subtract 40
 
 
                                                 ; 'INPUT' is like the 'PRINT' command, and is followed by a list
                                                 ; 'INPUT' is like the 'PRINT' command, and is followed by a list
                                                 ; of items.  If the item is a string in single or double quotes,
                                                 ; of items.  If the item is a string in single or double quotes,
                                                 ; or is an underline (back arrow), it has the same effect as in
                                                 ; or is an underline (back arrow), it has the same effect as in
                                                 ; 'PRINT'.  If an item is a variable, this variable name is
                                                 ; 'PRINT'.  If an item is a variable, this variable name is
Line 3598... Line 5177...
                                                 ; expression's value.  If the input expression is invalid, the
                                                 ; expression's value.  If the input expression is invalid, the
                                                 ; interpreter will print "What?", "How?", or "Sorry" and reprint
                                                 ; interpreter will print "What?", "How?", or "Sorry" and reprint
                                                 ; the prompt and redo the input.  The execution will not terminate
                                                 ; the prompt and redo the input.  The execution will not terminate
                                                 ; unless you press control-C.  This is handled in 'INPERR'.
                                                 ; unless you press control-C.  This is handled in 'INPERR'.
                                                 ;
                                                 ;
FFFFFFFFFFFFD5A8                                 INPUT:
FFFFFFFFFFFFE6B0                                 INPUT:
FFFFFFFFFFFFD5A8        0FEF0028                        subui   sp,sp,#40       ; allocate stack frame
FFFFFFFFFFFFE6B0        0FEF0028                        subui   sp,sp,#40       ; allocate stack frame
FFFFFFFFFFFFD5AC        67E28020                        sw      r5,32[sp]
FFFFFFFFFFFFE6B4        67E28020                        sw      r5,32[sp]
FFFFFFFFFFFFD5B0                                 IP6:
FFFFFFFFFFFFE6B8                                 IP6:
FFFFFFFFFFFFD5B0        67E40000                        sw              r8,[sp]         ; save in case of error
FFFFFFFFFFFFE6B8        67E40000                        sw              r8,[sp]         ; save in case of error
FFFFFFFFFFFFD5B4        31FFF867                        call    QTSTG           ; is next item a string?
FFFFFFFFFFFFE6BC        31FFFCA9                        call    QTSTG           ; is next item a string?
FFFFFFFFFFFFD5B8        BE0000CA                        bra             IP2                     ; nope - this branch must take only two bytes
FFFFFFFFFFFFE6C0        BE0000CA                        bra             IP2                     ; nope - this branch must take only two bytes
FFFFFFFFFFFFD5BC        E0400001                        setlo   r1,#1           ; allocate var
FFFFFFFFFFFFE6C4        E0400001                        setlo   r1,#1           ; allocate var
FFFFFFFFFFFFD5C0        31FFF6EC                        call    TSTV            ; yes, but is it followed by a variable?
FFFFFFFFFFFFE6C8        31FFFB2E                        call    TSTV            ; yes, but is it followed by a variable?
FFFFFFFFFFFFD5C4        BE1003E8                        beq     r1,r0,IP4   ; if not, brnch
FFFFFFFFFFFFE6CC        BE1003E8                        beq     r1,r0,IP4   ; if not, brnch
FFFFFFFFFFFFD5C8        02150009                        mov             r10,r1          ; put away the variable's address
FFFFFFFFFFFFE6D0        02150009                        mov             r10,r1          ; put away the variable's address
FFFFFFFFFFFFD5CC        BE0001AA                        bra             IP3                     ; if so, input to variable
FFFFFFFFFFFFE6D4        BE0001AA                        bra             IP3                     ; if so, input to variable
FFFFFFFFFFFFD5D0                                 IP2:
FFFFFFFFFFFFE6D8                                 IP2:
FFFFFFFFFFFFD5D0        67E40008                        sw              r8,8[sp]        ; save for 'PRTSTG'
FFFFFFFFFFFFE6D8        67E40008                        sw              r8,8[sp]        ; save for 'PRTSTG'
FFFFFFFFFFFFD5D4        E0400001                        setlo   r1,#1
FFFFFFFFFFFFE6DC        E0400001                        setlo   r1,#1
FFFFFFFFFFFFD5D8        31FFF6EC                        call    TSTV            ; must be a variable now
FFFFFFFFFFFFE6E0        31FFFB2E                        call    TSTV            ; must be a variable now
FFFFFFFFFFFFD5DC        BE100069                        bne             r1,r0,IP7
FFFFFFFFFFFFE6E4        BE100069                        bne             r1,r0,IP7
FFFFFFFFFFFFD5E0        9A00E6E7                        lea             r1,msgInputVar
FFFFFFFFFFFFE6E8        9A00F7DF                        lea             r1,msgInputVar
FFFFFFFFFFFFD5E4        BE0049EA                        bra             ERROR           ; "What?" it isn't?
FFFFFFFFFFFFE6EC        BE0049EA                        bra             ERROR           ; "What?" it isn't?
FFFFFFFFFFFFD5E8                                 IP7:
FFFFFFFFFFFFE6F0                                 IP7:
FFFFFFFFFFFFD5E8        02150009                        mov             r10,r1          ; put away the variable's address
FFFFFFFFFFFFE6F0        02150009                        mov             r10,r1          ; put away the variable's address
FFFFFFFFFFFFD5EC        40828000                        lb              r5,[r8]         ; get ready for 'PRTSTG' by null terminating
FFFFFFFFFFFFE6F4        40828000                        lb              r5,[r8]         ; get ready for 'PRTSTG' by null terminating
FFFFFFFFFFFFD5F0        60800000                        sb              r0,[r8]
FFFFFFFFFFFFE6F8        60800000                        sb              r0,[r8]
FFFFFFFFFFFFD5F4        47E08008                        lw              r1,8[sp]        ; get back text pointer
FFFFFFFFFFFFE6FC        47E08008                        lw              r1,8[sp]        ; get back text pointer
FFFFFFFFFFFFD5F8        31FFF851                        call    PRTSTG          ; print string as prompt
FFFFFFFFFFFFE700        31FFFC93                        call    PRTSTG          ; print string as prompt
FFFFFFFFFFFFD5FC        60828000                        sb              r5,[r8]         ; un-null terminate
FFFFFFFFFFFFE704        60828000                        sb              r5,[r8]         ; un-null terminate
FFFFFFFFFFFFD600                                 IP3
FFFFFFFFFFFFE708                                 IP3
FFFFFFFFFFFFD600        67E40008                        sw              r8,8[sp]        ; save in case of error
FFFFFFFFFFFFE708        67E40008                        sw              r8,8[sp]        ; save in case of error
FFFFFFFFFFFFD604        46009090                        lw              r1,CURRNT
FFFFFFFFFFFFE70C        46009090                        lw              r1,CURRNT
FFFFFFFFFFFFD608        67E08010                        sw              r1,16[sp]       ; also save 'CURRNT'
FFFFFFFFFFFFE710        67E08010                        sw              r1,16[sp]       ; also save 'CURRNT'
FFFFFFFFFFFFD60C        E07FFFFF                        setlo   r1,#-1
FFFFFFFFFFFFE714        E07FFFFF                        setlo   r1,#-1
FFFFFFFFFFFFD610        66009090                        sw              r1,CURRNT       ; flag that we are in INPUT
FFFFFFFFFFFFE718        66009090                        sw              r1,CURRNT       ; flag that we are in INPUT
FFFFFFFFFFFFD614        660F10A0                        sw              sp,STKINP       ; save the stack pointer too
FFFFFFFFFFFFE71C        660F10A0                        sw              sp,STKINP       ; save the stack pointer too
FFFFFFFFFFFFD618        67E50018                        sw              r10,24[sp]      ; save the variable address
FFFFFFFFFFFFE720        67E50018                        sw              r10,24[sp]      ; save the variable address
FFFFFFFFFFFFD61C        E040003A                        setlo   r1,#':'         ; print a colon first
FFFFFFFFFFFFE724        E040003A                        setlo   r1,#':'         ; print a colon first
FFFFFFFFFFFFD620        31FFF7D8                        call    GETLN           ; then get an input line
FFFFFFFFFFFFE728        31FFFC1A                        call    GETLN           ; then get an input line
FFFFFFFFFFFFD624        9A04111B                        lea             r8,BUFFER       ; point to the buffer
FFFFFFFFFFFFE72C        9A04111B                        lea             r8,BUFFER       ; point to the buffer
FFFFFFFFFFFFD628        31FFF63A                        call    OREXPR          ; evaluate the input
FFFFFFFFFFFFE730        31FFFA7C                        call    OREXPR          ; evaluate the input
FFFFFFFFFFFFD62C        47E50018                        lw              r10,24[sp]      ; restore the variable address
FFFFFFFFFFFFE734        47E50018                        lw              r10,24[sp]      ; restore the variable address
FFFFFFFFFFFFD630        66A08000                        sw              r1,[r10]        ; save value in variable
FFFFFFFFFFFFE738        66A08000                        sw              r1,[r10]        ; save value in variable
FFFFFFFFFFFFD634        47E08010                        lw              r1,16[sp]       ; restore old 'CURRNT'
FFFFFFFFFFFFE73C        47E08010                        lw              r1,16[sp]       ; restore old 'CURRNT'
FFFFFFFFFFFFD638        66009090                        sw              r1,CURRNT
FFFFFFFFFFFFE740        66009090                        sw              r1,CURRNT
FFFFFFFFFFFFD63C        47E40008                        lw              r8,8[sp]        ; and the old text pointer
FFFFFFFFFFFFE744        47E40008                        lw              r8,8[sp]        ; and the old text pointer
FFFFFFFFFFFFD640                                 IP4:
FFFFFFFFFFFFE748                                 IP4:
FFFFFFFFFFFFD640        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFE748        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFD644        9A025650                        lea             r4,IP5          ; is the next thing a comma?
FFFFFFFFFFFFE74C        9A026758                        lea             r4,IP5          ; is the next thing a comma?
FFFFFFFFFFFFD648        31FFF8F1                        call    TSTC
FFFFFFFFFFFFE750        31FFFD30                        call    TSTC
FFFFFFFFFFFFD64C        BE007B2A                        bra             IP6                     ; yes, more items
FFFFFFFFFFFFE754        BE007B2A                        bra             IP6                     ; yes, more items
FFFFFFFFFFFFD650                                 IP5:
FFFFFFFFFFFFE758                                 IP5:
FFFFFFFFFFFFD650        47E28020                     lw      r5,32[sp]
FFFFFFFFFFFFE758        47E28020                     lw      r5,32[sp]
FFFFFFFFFFFFD654        09EF0028                        add             sp,sp,#40       ; clean up the stack
FFFFFFFFFFFFE75C        09EF0028                        add             sp,sp,#40       ; clean up the stack
FFFFFFFFFFFFD658        33FFF504                        jmp             FINISH
FFFFFFFFFFFFE760        33FFF946                        jmp             FINISH
 
 
 
 
FFFFFFFFFFFFD65C                                 DEFLT:
FFFFFFFFFFFFE764                                 DEFLT:
FFFFFFFFFFFFD65C        40808000                     lb      r1,[r8]
FFFFFFFFFFFFE764        40808000                     lb      r1,[r8]
FFFFFFFFFFFFD660        B01F6C0D                        beq         r1,#CR,FINISH           ; empty line is OK else it is 'LET'
FFFFFFFFFFFFE768        B01F6C0D                        beq         r1,#CR,FINISH           ; empty line is OK else it is 'LET'
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; 'LET' is followed by a list of items separated by commas.
                                                 ; 'LET' is followed by a list of items separated by commas.
                                                 ; Each item consists of a variable, an equals sign, and an
                                                 ; Each item consists of a variable, an equals sign, and an
                                                 ; expression.  The interpreter evaluates the expression and sets
                                                 ; expression.  The interpreter evaluates the expression and sets
                                                 ; the variable to that value.  The interpreter will also handle
                                                 ; the variable to that value.  The interpreter will also handle
                                                 ; 'LET' commands without the word 'LET'.  This is done by 'DEFLT'.
                                                 ; 'LET' commands without the word 'LET'.  This is done by 'DEFLT'.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD664                                 LET:
FFFFFFFFFFFFE76C                                 LET:
FFFFFFFFFFFFD664        31FFF798                     call       SETVAL          ; do the assignment
FFFFFFFFFFFFE76C        31FFFBDA                     call       SETVAL          ; do the assignment
FFFFFFFFFFFFD668        E0C0002C                     setlo      r3,#','
FFFFFFFFFFFFE770        E0C0002C                     setlo      r3,#','
FFFFFFFFFFFFD66C        9A025410                     lea                r4,FINISH
FFFFFFFFFFFFE774        9A026518                     lea                r4,FINISH
FFFFFFFFFFFFD670        31FFF8F1                        call    TSTC            ; check for more 'LET' items
FFFFFFFFFFFFE778        31FFFD30                        call    TSTC            ; check for more 'LET' items
FFFFFFFFFFFFD674        BE007F8A                        bra         LET
FFFFFFFFFFFFE77C        BE007F8A                        bra         LET
FFFFFFFFFFFFD678                                 LT1:
FFFFFFFFFFFFE780                                 LT1:
FFFFFFFFFFFFD678        BE006CCA                     bra            FINISH              ; until we are finished.
FFFFFFFFFFFFE780        BE006CCA                     bra            FINISH              ; until we are finished.
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; *** LOAD *** & SAVE ***
                                                 ; *** LOAD *** & SAVE ***
                                                 ;
                                                 ;
Line 3687... Line 5266...
                                                 ; At the end, a line starting with an '@' sign is sent.  This
                                                 ; At the end, a line starting with an '@' sign is sent.  This
                                                 ; format can be read back with a minimum of processing time by
                                                 ; format can be read back with a minimum of processing time by
                                                 ; the Butterfly.
                                                 ; the Butterfly.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD67C                                 LOAD
FFFFFFFFFFFFE784                                 LOAD
FFFFFFFFFFFFD67C        46044E60                        lw              r8,TXTBGN       ; set pointer to start of prog. area
FFFFFFFFFFFFE784        46045F68                        lw              r8,TXTBGN       ; set pointer to start of prog. area
FFFFFFFFFFFFD680        E040000D                        setlo   r1,#CR          ; For a CP/M host, tell it we're ready...
FFFFFFFFFFFFE788        E040000D                        setlo   r1,#CR          ; For a CP/M host, tell it we're ready...
FFFFFFFFFFFFD684        31FFF395                        call    GOAUXO          ; by sending a CR to finish PIP command.
FFFFFFFFFFFFE78C        31FFF7D7                        call    GOAUXO          ; by sending a CR to finish PIP command.
FFFFFFFFFFFFD688                                 LOD1:
FFFFFFFFFFFFE790                                 LOD1:
FFFFFFFFFFFFD688        31FFF396                        call    GOAUXI          ; look for start of line
FFFFFFFFFFFFE790        31FFF7D8                        call    GOAUXI          ; look for start of line
FFFFFFFFFFFFD68C        BE107FE2                        ble             r1,r0,LOD1
FFFFFFFFFFFFE794        BE107FE2                        ble             r1,r0,LOD1
FFFFFFFFFFFFD690        B0100E40                        beq             r1,#'@',LODEND  ; end of program?
FFFFFFFFFFFFE798        B0100E40                        beq             r1,#'@',LODEND  ; end of program?
FFFFFFFFFFFFD694        B0100D1A                        beq     r1,#0x1A,LODEND ; or EOF marker
FFFFFFFFFFFFE79C        B0100D1A                        beq     r1,#0x1A,LODEND ; or EOF marker
FFFFFFFFFFFFD698        B21FFC3A                        bne             r1,#':',LOD1    ; if not, is it start of line? if not, wait for it
FFFFFFFFFFFFE7A0        B21FFC3A                        bne             r1,#':',LOD1    ; if not, is it start of line? if not, wait for it
FFFFFFFFFFFFD69C        31FFF5B4                        call    GCHAR           ; get line number
FFFFFFFFFFFFE7A4        31FFF9F6                        call    GCHAR           ; get line number
FFFFFFFFFFFFD6A0        60808000                        sb              r1,[r8]         ; store it
FFFFFFFFFFFFE7A8        60808000                        sb              r1,[r8]         ; store it
FFFFFFFFFFFFD6A4        06109001                        shrui   r1,r1,#8
FFFFFFFFFFFFE7AC        06109001                        shrui   r1,r1,#8
FFFFFFFFFFFFD6A8        60808001                        sb              r1,1[r8]
FFFFFFFFFFFFE7B0        60808001                        sb              r1,1[r8]
FFFFFFFFFFFFD6AC        0A840002                        addui   r8,r8,#2
FFFFFFFFFFFFE7B4        0A840002                        addui   r8,r8,#2
FFFFFFFFFFFFD6B0                                 LOD2:
FFFFFFFFFFFFE7B8                                 LOD2:
FFFFFFFFFFFFD6B0        31FFF396                        call    GOAUXI          ; get another text char.
FFFFFFFFFFFFE7B8        31FFF7D8                        call    GOAUXI          ; get another text char.
FFFFFFFFFFFFD6B4        BE107FE2                        ble             r1,r0,LOD2
FFFFFFFFFFFFE7BC        BE107FE2                        ble             r1,r0,LOD2
FFFFFFFFFFFFD6B8        60808000                        sb              r1,[r8]
FFFFFFFFFFFFE7C0        60808000                        sb              r1,[r8]
FFFFFFFFFFFFD6BC        0A840001                        addui   r8,r8,#1        ; store it
FFFFFFFFFFFFE7C4        0A840001                        addui   r8,r8,#1        ; store it
FFFFFFFFFFFFD6C0        B21FFC0D                        bne             r1,#CR,LOD2             ; is it the end of the line? if not, go back for more
FFFFFFFFFFFFE7C8        B21FFC0D                        bne             r1,#CR,LOD2             ; is it the end of the line? if not, go back for more
FFFFFFFFFFFFD6C4        BE007E2A                        bra             LOD1            ; if so, start a new line
FFFFFFFFFFFFE7CC        BE007E2A                        bra             LOD1            ; if so, start a new line
FFFFFFFFFFFFD6C8                                 LODEND:
FFFFFFFFFFFFE7D0                                 LODEND:
FFFFFFFFFFFFD6C8        660410D0                        sw              r8,TXTUNF       ; set end-of program pointer
FFFFFFFFFFFFE7D0        660410D0                        sw              r8,TXTUNF       ; set end-of program pointer
FFFFFFFFFFFFD6CC        BE00416A                        bra             WSTART          ; back to direct mode
FFFFFFFFFFFFE7D4        BE00418A                        bra             WSTART          ; back to direct mode
 
 
 
 
                                                 ; get character from input (16 bit value)
                                                 ; get character from input (16 bit value)
FFFFFFFFFFFFD6D0                                 GCHAR:
FFFFFFFFFFFFE7D8                                 GCHAR:
FFFFFFFFFFFFD6D0        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFE7D8        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFD6D4        67E28000                        sw              r5,[sp]
FFFFFFFFFFFFE7DC        67E28000                        sw              r5,[sp]
FFFFFFFFFFFFD6D8        67E30008                        sw              r6,8[sp]
FFFFFFFFFFFFE7E0        67E30008                        sw              r6,8[sp]
FFFFFFFFFFFFD6DC        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFE7E4        67EF8010                        sw              lr,16[sp]
FFFFFFFFFFFFD6E0        E1800003                        setlo   r6,#3       ; repeat four times
FFFFFFFFFFFFE7E8        E1800003                        setlo   r6,#3       ; repeat four times
FFFFFFFFFFFFD6E4        E1400000                        setlo   r5,#0
FFFFFFFFFFFFE7EC        E1400000                        setlo   r5,#0
FFFFFFFFFFFFD6E8                                 GCHAR1:
FFFFFFFFFFFFE7F0                                 GCHAR1:
FFFFFFFFFFFFD6E8        31FFF396                        call    GOAUXI          ; get a char
FFFFFFFFFFFFE7F0        31FFF7D8                        call    GOAUXI          ; get a char
FFFFFFFFFFFFD6EC        BE107FE2                        ble             r1,r0,GCHAR1
FFFFFFFFFFFFE7F4        BE107FE2                        ble             r1,r0,GCHAR1
FFFFFFFFFFFFD6F0        31FFF5C5                        call    asciiToHex
FFFFFFFFFFFFE7F8        31FFFA07                        call    asciiToHex
FFFFFFFFFFFFD6F4        06528800                        shli    r5,r5,#4
FFFFFFFFFFFFE7FC        06528800                        shli    r5,r5,#4
FFFFFFFFFFFFD6F8        04509409                        or              r5,r5,r1
FFFFFFFFFFFFE800        04509409                        or              r5,r5,r1
FFFFFFFFFFFFD6FC        BE037F6F                        loop    r6,GCHAR1
FFFFFFFFFFFFE804        BE037F6F                        loop    r6,GCHAR1
FFFFFFFFFFFFD700        02508009                        mov             r1,r5
FFFFFFFFFFFFE808        02508009                        mov             r1,r5
FFFFFFFFFFFFD704        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFE80C        47EF8010                        lw              lr,16[sp]
FFFFFFFFFFFFD708        47E30008                        lw              r6,8[sp]
FFFFFFFFFFFFE810        47E30008                        lw              r6,8[sp]
FFFFFFFFFFFFD70C        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFE814        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFD710        37EF8018                        ret             #24
FFFFFFFFFFFFE818        37EF8018                        ret             #24
 
 
 
 
                                                 ; convert an ascii char to hex code
                                                 ; convert an ascii char to hex code
                                                 ; input
                                                 ; input
                                                 ;      r1 = char to convert
                                                 ;      r1 = char to convert
 
 
FFFFFFFFFFFFD714                                 asciiToHex:
FFFFFFFFFFFFE81C                                 asciiToHex:
FFFFFFFFFFFFD714        A4100239                        blei    r1,#'9',a2h1    ; less than '9'
FFFFFFFFFFFFE81C        A4100239                        blei    r1,#'9',a2h1    ; less than '9'
FFFFFFFFFFFFD718        0E108007                        subui   r1,r1,#7        ; shift 'A' to '9'+1
FFFFFFFFFFFFE820        0E108007                        subui   r1,r1,#7        ; shift 'A' to '9'+1
FFFFFFFFFFFFD71C                                 a2h1:
FFFFFFFFFFFFE824                                 a2h1:
FFFFFFFFFFFFD71C        0E108030                        subui   r1,r1,#'0'      ;
FFFFFFFFFFFFE824        0E108030                        subui   r1,r1,#'0'      ;
FFFFFFFFFFFFD720        1410800F                        andi    r1,r1,#15       ; make sure a nybble
FFFFFFFFFFFFE828        1410800F                        andi    r1,r1,#15       ; make sure a nybble
FFFFFFFFFFFFD724        37EF8000                        ret
FFFFFFFFFFFFE82C        37EF8000                        ret
 
 
 
 
 
 
FFFFFFFFFFFFD728                                 SAVE:
FFFFFFFFFFFFE830                                 SAVE:
FFFFFFFFFFFFD728        46044E60                        lw              r8,TXTBGN       ;set pointer to start of prog. area
FFFFFFFFFFFFE830        46045F68                        lw              r8,TXTBGN       ;set pointer to start of prog. area
FFFFFFFFFFFFD72C        460490D0                        lw              r9,TXTUNF       ;set pointer to end of prog. area
FFFFFFFFFFFFE834        460490D0                        lw              r9,TXTUNF       ;set pointer to end of prog. area
FFFFFFFFFFFFD730                                 SAVE1:
FFFFFFFFFFFFE838                                 SAVE1:
FFFFFFFFFFFFD730        31FFF5E1                        call    AUXOCRLF    ; send out a CR & LF (CP/M likes this)
FFFFFFFFFFFFE838        31FFFA23                        call    AUXOCRLF    ; send out a CR & LF (CP/M likes this)
FFFFFFFFFFFFD734        BE8481C5                        bgeu    r8,r9,SAVEND    ; are we finished?
FFFFFFFFFFFFE83C        BE8481C5                        bgeu    r8,r9,SAVEND    ; are we finished?
FFFFFFFFFFFFD738        E040003A                        setlo   r1,#':'         ; if not, start a line
FFFFFFFFFFFFE840        E040003A                        setlo   r1,#':'         ; if not, start a line
FFFFFFFFFFFFD73C        31FFF395                        call    GOAUXO
FFFFFFFFFFFFE844        31FFF7D7                        call    GOAUXO
FFFFFFFFFFFFD740        4A808000                        lbu             r1,[r8]         ; get line number
FFFFFFFFFFFFE848        4A808000                        lbu             r1,[r8]         ; get line number
FFFFFFFFFFFFD744        4A810001                        lbu             r2,1[r8]
FFFFFFFFFFFFE84C        4A810001                        lbu             r2,1[r8]
FFFFFFFFFFFFD748        06211000                        shli    r2,r2,#8
FFFFFFFFFFFFE850        06211000                        shli    r2,r2,#8
FFFFFFFFFFFFD74C        04110409                        or              r1,r1,r2
FFFFFFFFFFFFE854        04110409                        or              r1,r1,r2
FFFFFFFFFFFFD750        0A840002                        addui   r8,r8,#2
FFFFFFFFFFFFE858        0A840002                        addui   r8,r8,#2
FFFFFFFFFFFFD754        31FFF5E9                        call    PWORD       ; output line number as 4-digit hex
FFFFFFFFFFFFE85C        31FFFA2B                        call    PWORD       ; output line number as 4-digit hex
FFFFFFFFFFFFD758                                 SAVE2:
FFFFFFFFFFFFE860                                 SAVE2:
FFFFFFFFFFFFD758        40808000                        lb              r1,[r8]         ; get a text char.
FFFFFFFFFFFFE860        40808000                        lb              r1,[r8]         ; get a text char.
FFFFFFFFFFFFD75C        0A840001                        addui   r8,r8,#1
FFFFFFFFFFFFE864        0A840001                        addui   r8,r8,#1
FFFFFFFFFFFFD760        B01FF40D                        beqi    r1,#CR,SAVE1            ; is it the end of the line? if so, send CR & LF and start new line
FFFFFFFFFFFFE868        B01FF40D                        beqi    r1,#CR,SAVE1            ; is it the end of the line? if so, send CR & LF and start new line
FFFFFFFFFFFFD764        31FFF395                        call    GOAUXO          ; send it out
FFFFFFFFFFFFE86C        31FFF7D7                        call    GOAUXO          ; send it out
FFFFFFFFFFFFD768        BE007F8A                        bra             SAVE2           ; go back for more text
FFFFFFFFFFFFE870        BE007F8A                        bra             SAVE2           ; go back for more text
FFFFFFFFFFFFD76C                                 SAVEND:
FFFFFFFFFFFFE874                                 SAVEND:
FFFFFFFFFFFFD76C        E0400040                        setlo   r1,#'@'         ; send end-of-program indicator
FFFFFFFFFFFFE874        E0400040                        setlo   r1,#'@'         ; send end-of-program indicator
FFFFFFFFFFFFD770        31FFF395                        call    GOAUXO
FFFFFFFFFFFFE878        31FFF7D7                        call    GOAUXO
FFFFFFFFFFFFD774        31FFF5E1                        call    AUXOCRLF    ; followed by a CR & LF
FFFFFFFFFFFFE87C        31FFFA23                        call    AUXOCRLF    ; followed by a CR & LF
FFFFFFFFFFFFD778        E040001A                        setlo   r1,#0x1A        ; and a control-Z to end the CP/M file
FFFFFFFFFFFFE880        E040001A                        setlo   r1,#0x1A        ; and a control-Z to end the CP/M file
FFFFFFFFFFFFD77C        31FFF395                        call    GOAUXO
FFFFFFFFFFFFE884        31FFF7D7                        call    GOAUXO
FFFFFFFFFFFFD780        BE003BCA                        bra             WSTART          ; then go do a warm start
FFFFFFFFFFFFE888        BE003BEA                        bra             WSTART          ; then go do a warm start
 
 
 
 
                                                 ; output a CR LF sequence to auxillary output
                                                 ; output a CR LF sequence to auxillary output
                                                 ; Registers Affected
                                                 ; Registers Affected
                                                 ;   r3 = LF
                                                 ;   r3 = LF
FFFFFFFFFFFFD784                                 AUXOCRLF:
FFFFFFFFFFFFE88C                                 AUXOCRLF:
FFFFFFFFFFFFD784        0FEF0008                     subui   sp,sp,#8
FFFFFFFFFFFFE88C        0FEF0008                     subui   sp,sp,#8
FFFFFFFFFFFFD788        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFE890        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFD78C        E040000D                     setlo   r1,#CR
FFFFFFFFFFFFE894        E040000D                     setlo   r1,#CR
FFFFFFFFFFFFD790        31FFF395                     call    GOAUXO
FFFFFFFFFFFFE898        31FFF7D7                     call    GOAUXO
FFFFFFFFFFFFD794        E040000A                     setlo   r1,#LF
FFFFFFFFFFFFE89C        E040000A                     setlo   r1,#LF
FFFFFFFFFFFFD798        31FFF395                     call    GOAUXO
FFFFFFFFFFFFE8A0        31FFF7D7                     call    GOAUXO
FFFFFFFFFFFFD79C        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFE8A4        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFD7A0        37EF8008                     ret                #8
FFFFFFFFFFFFE8A8        37EF8008                     ret                #8
 
 
 
 
                                                 ; output a word in hex format
                                                 ; output a word in hex format
                                                 ; tricky because of the need to reverse the order of the chars
                                                 ; tricky because of the need to reverse the order of the chars
FFFFFFFFFFFFD7A4                                 PWORD:
FFFFFFFFFFFFE8AC                                 PWORD:
FFFFFFFFFFFFD7A4        0DEF0010                        sub             sp,sp,#16
FFFFFFFFFFFFE8AC        0DEF0010                        sub             sp,sp,#16
FFFFFFFFFFFFD7A8        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFE8B0        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFD7AC        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFE8B4        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFD7B0        9A02910F                        lea             r5,NUMWKA+15
FFFFFFFFFFFFE8B8        9A02910F                        lea             r5,NUMWKA+15
FFFFFFFFFFFFD7B4        02120009                        mov             r4,r1           ; r4 = value
FFFFFFFFFFFFE8BC        02120009                        mov             r4,r1           ; r4 = value
FFFFFFFFFFFFD7B8                                 pword1:
FFFFFFFFFFFFE8C0                                 pword1:
FFFFFFFFFFFFD7B8        02408009                     mov     r1,r4          ; r1 = value
FFFFFFFFFFFFE8C0        02408009                     mov     r1,r4          ; r1 = value
FFFFFFFFFFFFD7BC        06420801                     shrui      r4,r4,#4        ; shift over to next nybble
FFFFFFFFFFFFE8C4        06420801                     shrui      r4,r4,#4        ; shift over to next nybble
FFFFFFFFFFFFD7C0        31FFF5FD                     call    toAsciiHex  ; convert LS nybble to ascii hex
FFFFFFFFFFFFE8C8        31FFFA3F                     call    toAsciiHex  ; convert LS nybble to ascii hex
FFFFFFFFFFFFD7C4        60508000                     sb      r1,[r5]     ; save in work area
FFFFFFFFFFFFE8CC        60508000                     sb      r1,[r5]     ; save in work area
FFFFFFFFFFFFD7C8        0E528001                     subui   r5,r5,#1
FFFFFFFFFFFFE8D0        0E528001                     subui   r5,r5,#1
FFFFFFFFFFFFD7CC        12509100                     cmpui   r1,r5,#NUMWKA
FFFFFFFFFFFFE8D4        12509100                     cmpui   r1,r5,#NUMWKA
FFFFFFFFFFFFD7D0        BE107F41                     bge     r1,r0,pword1
FFFFFFFFFFFFE8D8        BE107F41                     bge     r1,r0,pword1
FFFFFFFFFFFFD7D4                                 pword2:
FFFFFFFFFFFFE8DC                                 pword2:
FFFFFFFFFFFFD7D4        0A528001                     addui   r5,r5,#1
FFFFFFFFFFFFE8DC        0A528001                     addui   r5,r5,#1
FFFFFFFFFFFFD7D8        40508000                     lb      r1,[r5]     ; get char to output
FFFFFFFFFFFFE8E0        40508000                     lb      r1,[r5]     ; get char to output
FFFFFFFFFFFFD7DC        31FFF395                        call    GOAUXO          ; send it
FFFFFFFFFFFFE8E4        31FFF7D7                        call    GOAUXO          ; send it
FFFFFFFFFFFFD7E0        1250910F                        cmpui   r1,r5,#NUMWKA+15
FFFFFFFFFFFFE8E8        1250910F                        cmpui   r1,r5,#NUMWKA+15
FFFFFFFFFFFFD7E4        BE107F80                        blt     r1,r0,pword2
FFFFFFFFFFFFE8EC        BE107F80                        blt     r1,r0,pword2
FFFFFFFFFFFFD7E8        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFE8F0        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFD7EC        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFE8F4        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFD7F0        37EF8010                        ret             #16
FFFFFFFFFFFFE8F8        37EF8010                        ret             #16
 
 
 
 
                                                 ; convert nybble in r2 to ascii hex char2
                                                 ; convert nybble in r2 to ascii hex char2
                                                 ; r2 = character to convert
                                                 ; r2 = character to convert
 
 
FFFFFFFFFFFFD7F4                                 toAsciiHex:
FFFFFFFFFFFFE8FC                                 toAsciiHex:
FFFFFFFFFFFFD7F4        1410800F                        andi    r1,r1,#15       ; make sure it's a nybble
FFFFFFFFFFFFE8FC        1410800F                        andi    r1,r1,#15       ; make sure it's a nybble
FFFFFFFFFFFFD7F8        A010020A                        blti    r1,#10,tah1     ; > 10 ?
FFFFFFFFFFFFE900        A010020A                        blti    r1,#10,tah1     ; > 10 ?
FFFFFFFFFFFFD7FC        08108007                        addi    r1,r1,#7        ; bump it up to the letter 'A'
FFFFFFFFFFFFE904        08108007                        addi    r1,r1,#7        ; bump it up to the letter 'A'
FFFFFFFFFFFFD800                                 tah1:
FFFFFFFFFFFFE908                                 tah1:
FFFFFFFFFFFFD800        0A108030                        addui   r1,r1,#'0'      ; bump up to ascii '0'
FFFFFFFFFFFFE908        0A108030                        addui   r1,r1,#'0'      ; bump up to ascii '0'
FFFFFFFFFFFFD804        37EF8000                        ret
FFFFFFFFFFFFE90C        37EF8000                        ret
 
 
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; *** POKE *** & SYSX ***
                                                 ; *** POKE *** & SYSX ***
Line 3845... Line 5424...
                                                 ; starting address is specified by 'expr'.  The subroutine can use
                                                 ; starting address is specified by 'expr'.  The subroutine can use
                                                 ; all registers but must leave the stack the way it found it.
                                                 ; all registers but must leave the stack the way it found it.
                                                 ; The subroutine returns to the interpreter by executing an RET.
                                                 ; The subroutine returns to the interpreter by executing an RET.
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
FFFFFFFFFFFFD808                                 POKE:
FFFFFFFFFFFFE910                                 POKE:
FFFFFFFFFFFFD808        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE910        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFD80C        31FFF63A                        call    OREXPR          ; get the memory address
FFFFFFFFFFFFE914        31FFFA7C                        call    OREXPR          ; get the memory address
FFFFFFFFFFFFD810        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFE918        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFD814        9A025834                        lea             r4,PKER         ; it must be followed by a comma
FFFFFFFFFFFFE91C        9A02693C                        lea             r4,PKER         ; it must be followed by a comma
FFFFFFFFFFFFD818        31FFF8F1                        call    TSTC            ; it must be followed by a comma
FFFFFFFFFFFFE920        31FFFD30                        call    TSTC            ; it must be followed by a comma
FFFFFFFFFFFFD81C        67E08000                        sw              r1,[sp]     ; save the address
FFFFFFFFFFFFE924        67E08000                        sw              r1,[sp]     ; save the address
FFFFFFFFFFFFD820        31FFF63A                        call    OREXPR          ; get the byte to be POKE'd
FFFFFFFFFFFFE928        31FFFA7C                        call    OREXPR          ; get the byte to be POKE'd
FFFFFFFFFFFFD824        47E10000                        lw              r2,[sp]     ; get the address back
FFFFFFFFFFFFE92C        47E10000                        lw              r2,[sp]     ; get the address back
FFFFFFFFFFFFD828        60208000                        sb              r1,[r2]         ; store the byte in memory
FFFFFFFFFFFFE930        60208000                        sb              r1,[r2]         ; store the byte in memory
FFFFFFFFFFFFD82C        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFE934        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFD830        BE005F0A                        bra             FINISH
FFFFFFFFFFFFE938        BE005F0A                        bra             FINISH
FFFFFFFFFFFFD834                                 PKER:
FFFFFFFFFFFFE93C                                 PKER:
FFFFFFFFFFFFD834        9A00E680                        lea             r1,msgComma
FFFFFFFFFFFFE93C        9A00F778                        lea             r1,msgComma
FFFFFFFFFFFFD838        BE00374A                        bra             ERROR           ; if no comma, say "What?"
FFFFFFFFFFFFE940        BE00374A                        bra             ERROR           ; if no comma, say "What?"
 
 
FFFFFFFFFFFFD83C                                 POKEC:
FFFFFFFFFFFFE944                                 POKEC:
FFFFFFFFFFFFD83C        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE944        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFD840        31FFF63A                        call    OREXPR          ; get the memory address
FFFFFFFFFFFFE948        31FFFA7C                        call    OREXPR          ; get the memory address
FFFFFFFFFFFFD844        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFE94C        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFD848        9A025834                        lea             r4,PKER         ; it must be followed by a comma
FFFFFFFFFFFFE950        9A02693C                        lea             r4,PKER         ; it must be followed by a comma
FFFFFFFFFFFFD84C        31FFF8F1                        call    TSTC            ; it must be followed by a comma
FFFFFFFFFFFFE954        31FFFD30                        call    TSTC            ; it must be followed by a comma
FFFFFFFFFFFFD850        67E08000                        sw              r1,[sp]     ; save the address
FFFFFFFFFFFFE958        67E08000                        sw              r1,[sp]     ; save the address
FFFFFFFFFFFFD854        31FFF63A                        call    OREXPR          ; get the byte to be POKE'd
FFFFFFFFFFFFE95C        31FFFA7C                        call    OREXPR          ; get the byte to be POKE'd
FFFFFFFFFFFFD858        47E10000                        lw              r2,[sp]     ; get the address back
FFFFFFFFFFFFE960        47E10000                        lw              r2,[sp]     ; get the address back
FFFFFFFFFFFFD85C        62208000                        sc              r1,[r2]         ; store the char in memory
FFFFFFFFFFFFE964        62208000                        sc              r1,[r2]         ; store the char in memory
FFFFFFFFFFFFD860        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFE968        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFD864        33FFF504                        jmp             FINISH
FFFFFFFFFFFFE96C        33FFF946                        jmp             FINISH
 
 
FFFFFFFFFFFFD868                                 POKEH:
FFFFFFFFFFFFE970                                 POKEH:
FFFFFFFFFFFFD868        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE970        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFD86C        31FFF63A                        call    OREXPR          ; get the memory address
FFFFFFFFFFFFE974        31FFFA7C                        call    OREXPR          ; get the memory address
FFFFFFFFFFFFD870        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFE978        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFD874        9A025834                        lea             r4,PKER         ; it must be followed by a comma
FFFFFFFFFFFFE97C        9A02693C                        lea             r4,PKER         ; it must be followed by a comma
FFFFFFFFFFFFD878        31FFF8F1                        call    TSTC
FFFFFFFFFFFFE980        31FFFD30                        call    TSTC
FFFFFFFFFFFFD87C        67E08000                        sw              r1,[sp]     ; save the address
FFFFFFFFFFFFE984        67E08000                        sw              r1,[sp]     ; save the address
FFFFFFFFFFFFD880        31FFF63A                        call    OREXPR          ; get the byte to be POKE'd
FFFFFFFFFFFFE988        31FFFA7C                        call    OREXPR          ; get the byte to be POKE'd
FFFFFFFFFFFFD884        47E10000                        lw              r2,[sp]     ; get the address back
FFFFFFFFFFFFE98C        47E10000                        lw              r2,[sp]     ; get the address back
FFFFFFFFFFFFD888        64208000                        sh              r1,[r2]         ; store the word in memory
FFFFFFFFFFFFE990        64208000                        sh              r1,[r2]         ; store the word in memory
FFFFFFFFFFFFD88C        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFE994        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFD890        33FFF504                        jmp             FINISH
FFFFFFFFFFFFE998        33FFF946                        jmp             FINISH
 
 
FFFFFFFFFFFFD894                                 POKEW:
FFFFFFFFFFFFE99C                                 POKEW:
FFFFFFFFFFFFD894        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE99C        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFD898        31FFF63A                        call    OREXPR          ; get the memory address
FFFFFFFFFFFFE9A0        31FFFA7C                        call    OREXPR          ; get the memory address
FFFFFFFFFFFFD89C        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFE9A4        E0C0002C                        setlo   r3,#','
FFFFFFFFFFFFD8A0        9A025834                        lea             r4,PKER         ; it must be followed by a comma
FFFFFFFFFFFFE9A8        9A02693C                        lea             r4,PKER         ; it must be followed by a comma
FFFFFFFFFFFFD8A4        31FFF8F1                        call    TSTC
FFFFFFFFFFFFE9AC        31FFFD30                        call    TSTC
FFFFFFFFFFFFD8A8        67E08000                        sw              r1,[sp]     ; save the address
FFFFFFFFFFFFE9B0        67E08000                        sw              r1,[sp]     ; save the address
FFFFFFFFFFFFD8AC        31FFF63A                        call    OREXPR          ; get the word to be POKE'd
FFFFFFFFFFFFE9B4        31FFFA7C                        call    OREXPR          ; get the word to be POKE'd
FFFFFFFFFFFFD8B0        47E10000                        lw              r2,[sp]     ; get the address back
FFFFFFFFFFFFE9B8        47E10000                        lw              r2,[sp]     ; get the address back
FFFFFFFFFFFFD8B4        66208000                        sw              r1,[r2]         ; store the word in memory
FFFFFFFFFFFFE9BC        66208000                        sw              r1,[r2]         ; store the word in memory
FFFFFFFFFFFFD8B8        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFE9C0        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFD8BC        33FFF504                        jmp             FINISH
FFFFFFFFFFFFE9C4        33FFF946                        jmp             FINISH
 
 
FFFFFFFFFFFFD8C0                                 SYSX:
FFFFFFFFFFFFE9C8                                 SYSX:
FFFFFFFFFFFFD8C0        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE9C8        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFD8C4        31FFF63A                        call    OREXPR          ; get the subroutine's address
FFFFFFFFFFFFE9CC        31FFFA7C                        call    OREXPR          ; get the subroutine's address
FFFFFFFFFFFFD8C8        BE100069                        bne             r1,r0,sysx1     ; make sure we got a valid address
FFFFFFFFFFFFE9D0        BE100069                        bne             r1,r0,sysx1     ; make sure we got a valid address
FFFFFFFFFFFFD8CC        9A00E6D5                        lea             r1,msgSYSBad
FFFFFFFFFFFFE9D4        9A00F7CD                        lea             r1,msgSYSBad
FFFFFFFFFFFFD8D0        BE00328A                        bra             ERROR
FFFFFFFFFFFFE9D8        BE00328A                        bra             ERROR
FFFFFFFFFFFFD8D4                                 sysx1:
FFFFFFFFFFFFE9DC                                 sysx1:
FFFFFFFFFFFFD8D4        67E40000                        sw              r8,[sp]     ; save the text pointer
FFFFFFFFFFFFE9DC        67E40000                        sw              r8,[sp]     ; save the text pointer
FFFFFFFFFFFFD8D8        341F8000                        jal             r31,[r1]        ; jump to the subroutine
FFFFFFFFFFFFE9E0        341F8000                        jal             r31,[r1]        ; jump to the subroutine
FFFFFFFFFFFFD8DC        47E40000                        lw              r8,[sp]     ; restore the text pointer
FFFFFFFFFFFFE9E4        47E40000                        lw              r8,[sp]     ; restore the text pointer
FFFFFFFFFFFFD8E0        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFE9E8        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFD8E4        BE00596A                        bra             FINISH
FFFFFFFFFFFFE9EC        BE00596A                        bra             FINISH
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; *** EXPR ***
                                                 ; *** EXPR ***
                                                 ;
                                                 ;
                                                 ; 'EXPR' evaluates arithmetical or logical expressions.
                                                 ; 'EXPR' evaluates arithmetical or logical expressions.
Line 3936... Line 5515...
                                                 ;  can be an  in parenthesis.
                                                 ;  can be an  in parenthesis.
                                                 ;
                                                 ;
 
 
                                                 ; ::= OR  ...
                                                 ; ::= OR  ...
                                                 ;
                                                 ;
FFFFFFFFFFFFD8E8                                 OREXPR:
FFFFFFFFFFFFE9F0                                 OREXPR:
FFFFFFFFFFFFD8E8        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFE9F0        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFD8EC        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFE9F4        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFD8F0        31FFF648                        call    ANDEXPR         ; get first 
FFFFFFFFFFFFE9F8        31FFFA8A                        call    ANDEXPR         ; get first 
FFFFFFFFFFFFD8F4                                 XP_OR1:
FFFFFFFFFFFFE9FC                                 XP_OR1:
FFFFFFFFFFFFD8F4        67E08004                        sw              r1,4[sp]        ; save  value
FFFFFFFFFFFFE9FC        67E08004                        sw              r1,4[sp]        ; save  value
FFFFFFFFFFFFD8F8        9A04D079                        lea             r9,TAB10        ; look up a logical operator
FFFFFFFFFFFFEA00        9A04E185                        lea             r9,TAB10        ; look up a logical operator
FFFFFFFFFFFFD8FC        9A055200                        lea             r10,TAB10_1
FFFFFFFFFFFFEA04        9A056308                        lea             r10,TAB10_1
FFFFFFFFFFFFD900        33FFF486                        jmp             EXEC            ; go do it
FFFFFFFFFFFFEA08        33FFF8C8                        jmp             EXEC            ; go do it
FFFFFFFFFFFFD904                                 XP_OR:
FFFFFFFFFFFFEA0C                                 XP_OR:
FFFFFFFFFFFFD904        31FFF648                     call    ANDEXPR
FFFFFFFFFFFFEA0C        31FFFA8A                     call    ANDEXPR
FFFFFFFFFFFFD908        47E10008                     lw      r2,8[sp]
FFFFFFFFFFFFEA10        47E10008                     lw      r2,8[sp]
FFFFFFFFFFFFD90C        04110409                     or      r1,r1,r2
FFFFFFFFFFFFEA14        04110409                     or      r1,r1,r2
FFFFFFFFFFFFD910        BE007F2A                     bra     XP_OR1
FFFFFFFFFFFFEA18        BE007F2A                     bra     XP_OR1
FFFFFFFFFFFFD914                                 XP_ORX:
FFFFFFFFFFFFEA1C                                 XP_ORX:
FFFFFFFFFFFFD914        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEA1C        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFD918        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFEA20        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFD91C        37EF8010                     ret                #16
FFFFFFFFFFFFEA24        37EF8010                     ret                #16
 
 
 
 
                                                 ; ::= AND  ...
                                                 ; ::= AND  ...
                                                 ;
                                                 ;
FFFFFFFFFFFFD920                                 ANDEXPR:
FFFFFFFFFFFFEA28                                 ANDEXPR:
FFFFFFFFFFFFD920        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFEA28        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFD924        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFEA2C        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFD928        31FFF66D                        call    EXPR            ; get first 
FFFFFFFFFFFFEA30        31FFFAAF                        call    EXPR            ; get first 
FFFFFFFFFFFFD92C                                 XP_AND1:
FFFFFFFFFFFFEA34                                 XP_AND1:
FFFFFFFFFFFFD92C        67E08008                        sw              r1,8[sp]        ; save  value
FFFFFFFFFFFFEA34        67E08008                        sw              r1,8[sp]        ; save  value
FFFFFFFFFFFFD930        9A04D075                        lea             r9,TAB9         ; look up a logical operator
FFFFFFFFFFFFEA38        9A04E181                        lea             r9,TAB9         ; look up a logical operator
FFFFFFFFFFFFD934        9A0551F0                        lea             r10,TAB9_1
FFFFFFFFFFFFEA3C        9A0562F8                        lea             r10,TAB9_1
FFFFFFFFFFFFD938        33FFF486                        jmp             EXEC            ; go do it
FFFFFFFFFFFFEA40        33FFF8C8                        jmp             EXEC            ; go do it
FFFFFFFFFFFFD93C                                 XP_AND:
FFFFFFFFFFFFEA44                                 XP_AND:
FFFFFFFFFFFFD93C        31FFF66D                     call    EXPR
FFFFFFFFFFFFEA44        31FFFAAF                     call    EXPR
FFFFFFFFFFFFD940        47E10008                     lw      r2,8[sp]
FFFFFFFFFFFFEA48        47E10008                     lw      r2,8[sp]
FFFFFFFFFFFFD944        04110408                     and     r1,r1,r2
FFFFFFFFFFFFEA4C        04110408                     and     r1,r1,r2
FFFFFFFFFFFFD948        BE007F2A                     bra     XP_AND1
FFFFFFFFFFFFEA50        BE007F2A                     bra     XP_AND1
FFFFFFFFFFFFD94C                                 XP_ANDX:
FFFFFFFFFFFFEA54                                 XP_ANDX:
FFFFFFFFFFFFD94C        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEA54        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFD950        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFEA58        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFD954        37EF8010                     ret                #16
FFFFFFFFFFFFEA5C        37EF8010                     ret                #16
 
 
 
 
                                                 ; Determine if the character is a digit
                                                 ; Determine if the character is a digit
                                                 ;   Parameters
                                                 ;   Parameters
                                                 ;       r1 = char to test
                                                 ;       r1 = char to test
                                                 ;   Returns
                                                 ;   Returns
                                                 ;       r1 = 1 if digit, otherwise 0
                                                 ;       r1 = 1 if digit, otherwise 0
                                                 ;
                                                 ;
FFFFFFFFFFFFD958                                 isDigit:
FFFFFFFFFFFFEA60                                 isDigit:
FFFFFFFFFFFFD958        A0100430                     blt     r1,#'0',isDigitFalse
FFFFFFFFFFFFEA60        A0100430                     blt     r1,#'0',isDigitFalse
FFFFFFFFFFFFD95C        A6100339                     bgt     r1,#'9',isDigitFalse
FFFFFFFFFFFFEA64        A6100339                     bgt     r1,#'9',isDigitFalse
FFFFFFFFFFFFD960        E0400001                     setlo   r1,#1
FFFFFFFFFFFFEA68        E0400001                     setlo   r1,#1
FFFFFFFFFFFFD964        37EF8000                     ret
FFFFFFFFFFFFEA6C        37EF8000                     ret
FFFFFFFFFFFFD968                                 isDigitFalse:
FFFFFFFFFFFFEA70                                 isDigitFalse:
FFFFFFFFFFFFD968        E0400000                     setlo   r1,#0
FFFFFFFFFFFFEA70        E0400000                     setlo   r1,#0
FFFFFFFFFFFFD96C        37EF8000                     ret
FFFFFFFFFFFFEA74        37EF8000                     ret
 
 
 
 
                                                 ; Determine if the character is a alphabetic
                                                 ; Determine if the character is a alphabetic
                                                 ;   Parameters
                                                 ;   Parameters
                                                 ;       r1 = char to test
                                                 ;       r1 = char to test
                                                 ;   Returns
                                                 ;   Returns
                                                 ;       r1 = 1 if alpha, otherwise 0
                                                 ;       r1 = 1 if alpha, otherwise 0
                                                 ;
                                                 ;
FFFFFFFFFFFFD970                                 isAlpha:
FFFFFFFFFFFFEA78                                 isAlpha:
FFFFFFFFFFFFD970        A0100641                     blt     r1,#'A',isAlphaFalse
FFFFFFFFFFFFEA78        A0100641                     blt     r1,#'A',isAlphaFalse
FFFFFFFFFFFFD974        A410035A                     ble     r1,#'Z',isAlphaTrue
FFFFFFFFFFFFEA7C        A410035A                     ble     r1,#'Z',isAlphaTrue
FFFFFFFFFFFFD978        A0100461                     blt     r1,#'a',isAlphaFalse
FFFFFFFFFFFFEA80        A0100461                     blt     r1,#'a',isAlphaFalse
FFFFFFFFFFFFD97C        A610037A                     bgt     r1,#'z',isAlphaFalse
FFFFFFFFFFFFEA84        A610037A                     bgt     r1,#'z',isAlphaFalse
FFFFFFFFFFFFD980                                 isAlphaTrue:
FFFFFFFFFFFFEA88                                 isAlphaTrue:
FFFFFFFFFFFFD980        E0400001                     setlo   r1,#1
FFFFFFFFFFFFEA88        E0400001                     setlo   r1,#1
FFFFFFFFFFFFD984        37EF8000                     ret
FFFFFFFFFFFFEA8C        37EF8000                     ret
FFFFFFFFFFFFD988                                 isAlphaFalse:
FFFFFFFFFFFFEA90                                 isAlphaFalse:
FFFFFFFFFFFFD988        E0400000                     setlo   r1,#0
FFFFFFFFFFFFEA90        E0400000                     setlo   r1,#0
FFFFFFFFFFFFD98C        37EF8000                     ret
FFFFFFFFFFFFEA94        37EF8000                     ret
 
 
 
 
                                                 ; Determine if the character is a alphanumeric
                                                 ; Determine if the character is a alphanumeric
                                                 ;   Parameters
                                                 ;   Parameters
                                                 ;       r1 = char to test
                                                 ;       r1 = char to test
                                                 ;   Returns
                                                 ;   Returns
                                                 ;       r1 = 1 if alpha, otherwise 0
                                                 ;       r1 = 1 if alpha, otherwise 0
                                                 ;
                                                 ;
FFFFFFFFFFFFD990                                 isAlnum:
FFFFFFFFFFFFEA98                                 isAlnum:
FFFFFFFFFFFFD990        0FEF0008                     subui   sp,sp,#8
FFFFFFFFFFFFEA98        0FEF0008                     subui   sp,sp,#8
FFFFFFFFFFFFD994        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFEA9C        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFD998        04100809                     or      r2,r1,r0           ; save test char
FFFFFFFFFFFFEAA0        04100809                     or      r2,r1,r0           ; save test char
FFFFFFFFFFFFD99C        31FFF656                     call    isDigit
FFFFFFFFFFFFEAA4        31FFFA98                     call    isDigit
FFFFFFFFFFFFD9A0        BE100069                     bne                r1,r0,isDigitx  ; if it is a digit
FFFFFFFFFFFFEAA8        BE100069                     bne                r1,r0,isDigitx  ; if it is a digit
FFFFFFFFFFFFD9A4        04200409                     or      r1,r2,r0           ; get back test char
FFFFFFFFFFFFEAAC        04200409                     or      r1,r2,r0           ; get back test char
FFFFFFFFFFFFD9A8        31FFF65C                     call    isAlpha
FFFFFFFFFFFFEAB0        31FFFA9E                     call    isAlpha
FFFFFFFFFFFFD9AC                                 isDigitx:
FFFFFFFFFFFFEAB4                                 isDigitx:
FFFFFFFFFFFFD9AC        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFEAB4        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFD9B0        37EF8008                     ret                #8
FFFFFFFFFFFFEAB8        37EF8008                     ret                #8
 
 
 
 
FFFFFFFFFFFFD9B4                                 EXPR:
FFFFFFFFFFFFEABC                                 EXPR:
FFFFFFFFFFFFD9B4        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFEABC        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFD9B8        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFEAC0        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFD9BC        31FFF69C                        call    EXPR2
FFFFFFFFFFFFEAC4        31FFFADE                        call    EXPR2
FFFFFFFFFFFFD9C0        67E08008                        sw              r1,8[sp]        ; save  value
FFFFFFFFFFFFEAC8        67E08008                        sw              r1,8[sp]        ; save  value
FFFFFFFFFFFFD9C4        9A04D06B                        lea             r9,TAB8         ; look up a relational operator
FFFFFFFFFFFFEACC        9A04E177                        lea             r9,TAB8         ; look up a relational operator
FFFFFFFFFFFFD9C8        9A0551B8                        lea             r10,TAB8_1
FFFFFFFFFFFFEAD0        9A0562C0                        lea             r10,TAB8_1
FFFFFFFFFFFFD9CC        33FFF486                        jmp             EXEC            ; go do it
FFFFFFFFFFFFEAD4        33FFF8C8                        jmp             EXEC            ; go do it
FFFFFFFFFFFFD9D0                                 XP11:
FFFFFFFFFFFFEAD8                                 XP11:
FFFFFFFFFFFFD9D0        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEAD8        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFD9D4        31FFF695                        call    XP18    ; is it ">="?
FFFFFFFFFFFFEADC        31FFFAD7                        call    XP18    ; is it ">="?
FFFFFFFFFFFFD9D8        BE208321                        bge             r2,r1,XPRT1     ; no, return r2=1
FFFFFFFFFFFFEAE0        BE208321                        bge             r2,r1,XPRT1     ; no, return r2=1
FFFFFFFFFFFFD9DC        BE0002AA                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFEAE4        BE0002AA                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFD9E0                                 XP12:
FFFFFFFFFFFFEAE8                                 XP12:
FFFFFFFFFFFFD9E0        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEAE8        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFD9E4        31FFF695                        call    XP18    ; is it "<>"?
FFFFFFFFFFFFEAEC        31FFFAD7                        call    XP18    ; is it "<>"?
FFFFFFFFFFFFD9E8        BE2082A9                        bne             r2,r1,XPRT1     ; no, return r2=1
FFFFFFFFFFFFEAF0        BE2082A9                        bne             r2,r1,XPRT1     ; no, return r2=1
FFFFFFFFFFFFD9EC        BE00022A                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFEAF4        BE00022A                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFD9F0                                 XP13:
FFFFFFFFFFFFEAF8                                 XP13:
FFFFFFFFFFFFD9F0        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEAF8        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFD9F4        31FFF695                        call    XP18    ; is it ">"?
FFFFFFFFFFFFEAFC        31FFFAD7                        call    XP18    ; is it ">"?
FFFFFFFFFFFFD9F8        BE208223                        bgt             r2,r1,XPRT1     ; no, return r2=1
FFFFFFFFFFFFEB00        BE208223                        bgt             r2,r1,XPRT1     ; no, return r2=1
FFFFFFFFFFFFD9FC        BE0001AA                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFEB04        BE0001AA                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFDA00                                 XP14:
FFFFFFFFFFFFEB08                                 XP14:
FFFFFFFFFFFFDA00        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEB08        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFDA04        31FFF695                        call    XP18    ; is it "<="?
FFFFFFFFFFFFEB0C        31FFFAD7                        call    XP18    ; is it "<="?
FFFFFFFFFFFFDA08        BE2081A2                        ble             r2,r1,XPRT1     ; no, return r2=1
FFFFFFFFFFFFEB10        BE2081A2                        ble             r2,r1,XPRT1     ; no, return r2=1
FFFFFFFFFFFFDA0C        BE00012A                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFEB14        BE00012A                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFDA10                                 XP15:
FFFFFFFFFFFFEB18                                 XP15:
FFFFFFFFFFFFDA10        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEB18        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFDA14        31FFF695                        call    XP18    ; is it "="?
FFFFFFFFFFFFEB1C        31FFFAD7                        call    XP18    ; is it "="?
FFFFFFFFFFFFDA18        BE208128                        beq             r2,r1,XPRT1     ; if not, return r2=1
FFFFFFFFFFFFEB20        BE208128                        beq             r2,r1,XPRT1     ; if not, return r2=1
FFFFFFFFFFFFDA1C        BE0000AA                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFEB24        BE0000AA                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFDA20                                 XP16:
FFFFFFFFFFFFEB28                                 XP16:
FFFFFFFFFFFFDA20        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEB28        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFDA24        31FFF695                        call    XP18    ; is it "<"?
FFFFFFFFFFFFEB2C        31FFFAD7                        call    XP18    ; is it "<"?
FFFFFFFFFFFFDA28        BE2080A0                        blt             r2,r1,XPRT1     ; if not, return r2=1
FFFFFFFFFFFFEB30        BE2080A0                        blt             r2,r1,XPRT1     ; if not, return r2=1
FFFFFFFFFFFFDA2C        BE00002A                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFEB34        BE00002A                        bra             XPRT0   ; else return r2=0
FFFFFFFFFFFFDA30                                 XPRT0:
FFFFFFFFFFFFEB38                                 XPRT0:
FFFFFFFFFFFFDA30        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEB38        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDA34        E0400000                        setlo   r1,#0   ; return r1=0 (false)
FFFFFFFFFFFFEB3C        E0400000                        setlo   r1,#0   ; return r1=0 (false)
FFFFFFFFFFFFDA38        37EF8010                        ret             #16
FFFFFFFFFFFFEB40        37EF8010                        ret             #16
FFFFFFFFFFFFDA3C                                 XPRT1:
FFFFFFFFFFFFEB44                                 XPRT1:
FFFFFFFFFFFFDA3C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEB44        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDA40        E0400001                        setlo   r1,#1   ; return r1=1 (true)
FFFFFFFFFFFFEB48        E0400001                        setlo   r1,#1   ; return r1=1 (true)
FFFFFFFFFFFFDA44        37EF8010                        ret             #16
FFFFFFFFFFFFEB4C        37EF8010                        ret             #16
 
 
FFFFFFFFFFFFDA48                                 XP17:                          ; it's not a rel. operator
FFFFFFFFFFFFEB50                                 XP17:                          ; it's not a rel. operator
FFFFFFFFFFFFDA48        47E08008                        lw              r1,8[sp]        ; return r2=
FFFFFFFFFFFFEB50        47E08008                        lw              r1,8[sp]        ; return r2=
FFFFFFFFFFFFDA4C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEB54        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDA50        37EF8010                        ret             #16
FFFFFFFFFFFFEB58        37EF8010                        ret             #16
 
 
FFFFFFFFFFFFDA54                                 XP18:
FFFFFFFFFFFFEB5C                                 XP18:
FFFFFFFFFFFFDA54        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFEB5C        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFDA58        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFEB60        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDA5C        67E08008                        sw              r1,8[sp]
FFFFFFFFFFFFEB64        67E08008                        sw              r1,8[sp]
FFFFFFFFFFFFDA60        31FFF69C                        call    EXPR2           ; do a second 
FFFFFFFFFFFFEB68        31FFFADE                        call    EXPR2           ; do a second 
FFFFFFFFFFFFDA64        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFEB6C        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFDA68        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEB70        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDA6C        37EF8010                        ret             #16
FFFFFFFFFFFFEB74        37EF8010                        ret             #16
 
 
                                                 ; ::=(+ or -)(+ or -)(...
                                                 ; ::=(+ or -)(+ or -)(...
 
 
FFFFFFFFFFFFDA70                                 EXPR2:
FFFFFFFFFFFFEB78                                 EXPR2:
FFFFFFFFFFFFDA70        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFEB78        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFDA74        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFEB7C        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDA78        E0C0002D                        setlo   r3,#'-'
FFFFFFFFFFFFEB80        E0C0002D                        setlo   r3,#'-'
FFFFFFFFFFFFDA7C        9A025A90                        lea             r4,XP21
FFFFFFFFFFFFEB84        9A026B98                        lea             r4,XP21
FFFFFFFFFFFFDA80        31FFF8F1                        call    TSTC            ; negative sign?
FFFFFFFFFFFFEB88        31FFFD30                        call    TSTC            ; negative sign?
FFFFFFFFFFFFDA84        E0400000                        setlo   r1,#0           ; yes, fake '0-'
FFFFFFFFFFFFEB8C        E0400000                        setlo   r1,#0           ; yes, fake '0-'
FFFFFFFFFFFFDA88        67E00008                        sw              r0,8[sp]
FFFFFFFFFFFFEB90        67E00008                        sw              r0,8[sp]
FFFFFFFFFFFFDA8C        BE00020A                        bra             XP26
FFFFFFFFFFFFEB94        BE00020A                        bra             XP26
FFFFFFFFFFFFDA90                                 XP21:
FFFFFFFFFFFFEB98                                 XP21:
FFFFFFFFFFFFDA90        E0C0002B                        setlo   r3,#'+'
FFFFFFFFFFFFEB98        E0C0002B                        setlo   r3,#'+'
FFFFFFFFFFFFDA94        9A025A9C                        lea             r4,XP22
FFFFFFFFFFFFEB9C        9A026BA4                        lea             r4,XP22
FFFFFFFFFFFFDA98        31FFF8F1                        call    TSTC            ; positive sign? ignore it
FFFFFFFFFFFFEBA0        31FFFD30                        call    TSTC            ; positive sign? ignore it
FFFFFFFFFFFFDA9C                                 XP22:
FFFFFFFFFFFFEBA4                                 XP22:
FFFFFFFFFFFFDA9C        31FFF6B9                        call    EXPR3           ; first 
FFFFFFFFFFFFEBA4        31FFFAFB                        call    EXPR3           ; first 
FFFFFFFFFFFFDAA0                                 XP23:
FFFFFFFFFFFFEBA8                                 XP23:
FFFFFFFFFFFFDAA0        67E08008                        sw              r1,8[sp]        ; yes, save the value
FFFFFFFFFFFFEBA8        67E08008                        sw              r1,8[sp]        ; yes, save the value
FFFFFFFFFFFFDAA4        E0C0002B                        setlo   r3,#'+'
FFFFFFFFFFFFEBAC        E0C0002B                        setlo   r3,#'+'
FFFFFFFFFFFFDAA8        9A025AC0                        lea             r4,XP25
FFFFFFFFFFFFEBB0        9A026BC8                        lea             r4,XP25
FFFFFFFFFFFFDAAC        31FFF8F1                        call    TSTC            ; add?
FFFFFFFFFFFFEBB4        31FFFD30                        call    TSTC            ; add?
FFFFFFFFFFFFDAB0        31FFF6B9                        call    EXPR3           ; get the second 
FFFFFFFFFFFFEBB8        31FFFAFB                        call    EXPR3           ; get the second 
FFFFFFFFFFFFDAB4                                 XP24:
FFFFFFFFFFFFEBBC                                 XP24:
FFFFFFFFFFFFDAB4        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFEBBC        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFDAB8        04110402                        add             r1,r1,r2        ; add it to the first 
FFFFFFFFFFFFEBC0        04110402                        add             r1,r1,r2        ; add it to the first 
                                                 ;      BVS.L   QHOW            brnch if there's an overflow
                                                 ;      BVS.L   QHOW            brnch if there's an overflow
FFFFFFFFFFFFDABC        BE007F2A                        bra             XP23            ; else go back for more operations
FFFFFFFFFFFFEBC4        BE007F2A                        bra             XP23            ; else go back for more operations
FFFFFFFFFFFFDAC0                                 XP25:
FFFFFFFFFFFFEBC8                                 XP25:
FFFFFFFFFFFFDAC0        E0C0002D                        setlo   r3,#'-'
FFFFFFFFFFFFEBC8        E0C0002D                        setlo   r3,#'-'
FFFFFFFFFFFFDAC4        9A025AD8                        lea             r4,XP45
FFFFFFFFFFFFEBCC        9A026BE0                        lea             r4,XP45
FFFFFFFFFFFFDAC8        31FFF8F1                        call    TSTC            ; subtract?
FFFFFFFFFFFFEBD0        31FFFD30                        call    TSTC            ; subtract?
FFFFFFFFFFFFDACC                                 XP26:
FFFFFFFFFFFFEBD4                                 XP26:
FFFFFFFFFFFFDACC        31FFF6B9                        call    EXPR3           ; get second 
FFFFFFFFFFFFEBD4        31FFFAFB                        call    EXPR3           ; get second 
FFFFFFFFFFFFDAD0        02108006                        neg             r1,r1           ; change its sign
FFFFFFFFFFFFEBD8        02108006                        neg             r1,r1           ; change its sign
FFFFFFFFFFFFDAD4        BE007F0A                        bra             XP24            ; and do an addition
FFFFFFFFFFFFEBDC        BE007F0A                        bra             XP24            ; and do an addition
FFFFFFFFFFFFDAD8                                 XP45:
FFFFFFFFFFFFEBE0                                 XP45:
FFFFFFFFFFFFDAD8        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEBE0        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFDADC        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEBE4        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDAE0        37EF8010                        ret             #16
FFFFFFFFFFFFEBE8        37EF8010                        ret             #16
 
 
 
 
                                                 ; ::=( <* or /> )(...
                                                 ; ::=( <* or /> )(...
 
 
FFFFFFFFFFFFDAE4                                 EXPR3:
FFFFFFFFFFFFEBEC                                 EXPR3:
FFFFFFFFFFFFDAE4        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFEBEC        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFDAE8        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFEBF0        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDAEC        31FFF6CF                        call    EXPR4           ; get first 
FFFFFFFFFFFFEBF4        31FFFB11                        call    EXPR4           ; get first 
FFFFFFFFFFFFDAF0                                 XP31:
FFFFFFFFFFFFEBF8                                 XP31:
FFFFFFFFFFFFDAF0        67E08008                        sw              r1,8[sp]        ; yes, save that first result
FFFFFFFFFFFFEBF8        67E08008                        sw              r1,8[sp]        ; yes, save that first result
FFFFFFFFFFFFDAF4        E0C0002A                        setlo   r3,#'*'
FFFFFFFFFFFFEBFC        E0C0002A                        setlo   r3,#'*'
FFFFFFFFFFFFDAF8        9A025B10                        lea             r4,XP34
FFFFFFFFFFFFEC00        9A026C18                        lea             r4,XP34
FFFFFFFFFFFFDAFC        31FFF8F1                        call    TSTC            ; multiply?
FFFFFFFFFFFFEC04        31FFFD30                        call    TSTC            ; multiply?
FFFFFFFFFFFFDB00        31FFF6CF                        call    EXPR4           ; get second 
FFFFFFFFFFFFEC08        31FFFB11                        call    EXPR4           ; get second 
FFFFFFFFFFFFDB04        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFEC0C        47E10008                        lw              r2,8[sp]
FFFFFFFFFFFFDB08        04110419                        muls    r1,r1,r2        ; multiply the two
FFFFFFFFFFFFEC10        04110419                        muls    r1,r1,r2        ; multiply the two
FFFFFFFFFFFFDB0C        BE007F2A                        bra             XP31        ; then look for more terms
FFFFFFFFFFFFEC14        BE007F2A                        bra             XP31        ; then look for more terms
FFFFFFFFFFFFDB10                                 XP34:
FFFFFFFFFFFFEC18                                 XP34:
FFFFFFFFFFFFDB10        E0C0002F                        setlo   r3,#'/'
FFFFFFFFFFFFEC18        E0C0002F                        setlo   r3,#'/'
FFFFFFFFFFFFDB14        9A025B30                        lea             r4,XP47
FFFFFFFFFFFFEC1C        9A026C38                        lea             r4,XP47
FFFFFFFFFFFFDB18        31FFF8F1                        call    TSTC            ; divide?
FFFFFFFFFFFFEC20        31FFFD30                        call    TSTC            ; divide?
FFFFFFFFFFFFDB1C        31FFF6CF                        call    EXPR4           ; get second 
FFFFFFFFFFFFEC24        31FFFB11                        call    EXPR4           ; get second 
FFFFFFFFFFFFDB20        04100809                        or      r2,r1,r0
FFFFFFFFFFFFEC28        04100809                        or      r2,r1,r0
FFFFFFFFFFFFDB24        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEC2C        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFDB28        0411041B                        divs    r1,r1,r2        ; do the division
FFFFFFFFFFFFEC30        0411041B                        divs    r1,r1,r2        ; do the division
FFFFFFFFFFFFDB2C        BE007E2A                        bra             XP31            ; go back for any more terms
FFFFFFFFFFFFEC34        BE007E2A                        bra             XP31            ; go back for any more terms
FFFFFFFFFFFFDB30                                 XP47:
FFFFFFFFFFFFEC38                                 XP47:
FFFFFFFFFFFFDB30        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFEC38        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFDB34        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEC3C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDB38        37EF8010                        ret             #16
FFFFFFFFFFFFEC40        37EF8010                        ret             #16
 
 
 
 
                                                 ; Functions are called through EXPR4
                                                 ; Functions are called through EXPR4
                                                 ; ::=
                                                 ; ::=
                                                 ;          
                                                 ;          
                                                 ;          ()
                                                 ;          ()
 
 
FFFFFFFFFFFFDB3C                                 EXPR4:
FFFFFFFFFFFFEC44                                 EXPR4:
FFFFFFFFFFFFDB3C        0FEF0018                     subui   sp,sp,#24
FFFFFFFFFFFFEC44        0FEF0018                     subui   sp,sp,#24
FFFFFFFFFFFFDB40        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFEC48        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFDB44        9A04D042                     lea                r9,TAB4         ; find possible function
FFFFFFFFFFFFEC4C        9A04E14E                     lea                r9,TAB4         ; find possible function
FFFFFFFFFFFFDB48        9A055150                     lea                r10,TAB4_1
FFFFFFFFFFFFEC50        9A056258                     lea                r10,TAB4_1
FFFFFFFFFFFFDB4C        33FFF486                        jmp             EXEC        ; branch to function which does subsequent ret for EXPR4
FFFFFFFFFFFFEC54        33FFF8C8                        jmp             EXEC        ; branch to function which does subsequent ret for EXPR4
FFFFFFFFFFFFDB50                                 XP40:                   ; we get here if it wasn't a function
FFFFFFFFFFFFEC58                                 XP40:                   ; we get here if it wasn't a function
FFFFFFFFFFFFDB50        E0400000                        setlo   r1,#0
FFFFFFFFFFFFEC58        E0400000                        setlo   r1,#0
FFFFFFFFFFFFDB54        31FFF6EC                        call    TSTV
FFFFFFFFFFFFEC5C        31FFFB2E                        call    TSTV
FFFFFFFFFFFFDB58        BE100088                        beq     r1,r0,XP41  ; nor a variable
FFFFFFFFFFFFEC60        BE100088                        beq     r1,r0,XP41  ; nor a variable
FFFFFFFFFFFFDB5C        46108000                        lw              r1,[r1]         ; if a variable, return its value in r1
FFFFFFFFFFFFEC64        46108000                        lw              r1,[r1]         ; if a variable, return its value in r1
FFFFFFFFFFFFDB60        47EF8000                        lw      lr,[sp]
FFFFFFFFFFFFEC68        47EF8000                        lw      lr,[sp]
FFFFFFFFFFFFDB64        37EF8018                        ret             #24
FFFFFFFFFFFFEC6C        37EF8018                        ret             #24
FFFFFFFFFFFFDB68                                 XP41:
FFFFFFFFFFFFEC70                                 XP41:
FFFFFFFFFFFFDB68        31FFF8FF                        call    TSTNUM          ; or is it a number?
FFFFFFFFFFFFEC70        31FFFD3E                        call    TSTNUM          ; or is it a number?
FFFFFFFFFFFFDB6C        BE200049                        bne             r2,r0,XP46      ; (if not, # of digits will be zero) if so, return it in r1
FFFFFFFFFFFFEC74        BE200049                        bne             r2,r0,XP46      ; (if not, # of digits will be zero) if so, return it in r1
FFFFFFFFFFFFDB70        31FFF6DF                        call    PARN        ; check for (EXPR)
FFFFFFFFFFFFEC78        31FFFB21                        call    PARN        ; check for (EXPR)
FFFFFFFFFFFFDB74                                 XP46:
FFFFFFFFFFFFEC7C                                 XP46:
FFFFFFFFFFFFDB74        47EF8000                        lw      lr,[sp]
FFFFFFFFFFFFEC7C        47EF8000                        lw      lr,[sp]
FFFFFFFFFFFFDB78        37EF8018                        ret             #24
FFFFFFFFFFFFEC80        37EF8018                        ret             #24
 
 
 
 
                                                 ; Check for a parenthesized expression
                                                 ; Check for a parenthesized expression
FFFFFFFFFFFFDB7C                                 PARN:
FFFFFFFFFFFFEC84                                 PARN:
FFFFFFFFFFFFDB7C        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFEC84        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFDB80        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFEC88        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDB84        E0C00028                        setlo   r3,#'('
FFFFFFFFFFFFEC8C        E0C00028                        setlo   r3,#'('
FFFFFFFFFFFFDB88        9A025BA8                        lea             r4,XP43
FFFFFFFFFFFFEC90        9A026CB0                        lea             r4,XP43
FFFFFFFFFFFFDB8C        31FFF8F1                        call    TSTC            ; else look for ( OREXPR )
FFFFFFFFFFFFEC94        31FFFD30                        call    TSTC            ; else look for ( OREXPR )
FFFFFFFFFFFFDB90        31FFF63A                        call    OREXPR
FFFFFFFFFFFFEC98        31FFFA7C                        call    OREXPR
FFFFFFFFFFFFDB94        E0C00029                        setlo   r3,#')'
FFFFFFFFFFFFEC9C        E0C00029                        setlo   r3,#')'
FFFFFFFFFFFFDB98        9A025BA8                        lea             r4,XP43
FFFFFFFFFFFFECA0        9A026CB0                        lea             r4,XP43
FFFFFFFFFFFFDB9C        31FFF8F1                        call    TSTC
FFFFFFFFFFFFECA4        31FFFD30                        call    TSTC
FFFFFFFFFFFFDBA0                                 XP42:
FFFFFFFFFFFFECA8                                 XP42:
FFFFFFFFFFFFDBA0        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFECA8        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDBA4        37EF8008                        ret             #8
FFFFFFFFFFFFECAC        37EF8008                        ret             #8
FFFFFFFFFFFFDBA8                                 XP43:
FFFFFFFFFFFFECB0                                 XP43:
FFFFFFFFFFFFDBA8        9A00E5FD                        lea             r1,msgWhat
FFFFFFFFFFFFECB0        9A00F6F5                        lea             r1,msgWhat
FFFFFFFFFFFFDBAC        BE001BAA                        bra             ERROR
FFFFFFFFFFFFECB4        BE001BAA                        bra             ERROR
 
 
 
 
                                                 ; ===== Test for a valid variable name.  Returns Z=1 if not
                                                 ; ===== Test for a valid variable name.  Returns Z=1 if not
                                                 ;      found, else returns Z=0 and the address of the
                                                 ;      found, else returns Z=0 and the address of the
                                                 ;      variable in r1.
                                                 ;      variable in r1.
                                                 ; Parameters
                                                 ; Parameters
                                                 ;      r1 = 1 = allocate if not found
                                                 ;      r1 = 1 = allocate if not found
                                                 ; Returns
                                                 ; Returns
                                                 ;      r1 = address of variable, zero if not found
                                                 ;      r1 = address of variable, zero if not found
 
 
FFFFFFFFFFFFDBB0                                 TSTV:
FFFFFFFFFFFFECB8                                 TSTV:
FFFFFFFFFFFFDBB0        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFECB8        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFDBB4        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFECBC        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDBB8        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFECC0        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFDBBC        04101409                        or              r5,r1,r0        ; allocate flag
FFFFFFFFFFFFECC4        04101409                        or              r5,r1,r0        ; allocate flag
FFFFFFFFFFFFDBC0        31FFF914                        call    IGNBLK
FFFFFFFFFFFFECC8        31FFFD55                        call    IGNBLK
FFFFFFFFFFFFDBC4        4A808000                        lbu             r1,[r8]         ; look at the program text
FFFFFFFFFFFFECCC        4A808000                        lbu             r1,[r8]         ; look at the program text
FFFFFFFFFFFFDBC8        A0101740                        blt     r1,#'@',tstv_notfound   ; C=1: not a variable
FFFFFFFFFFFFECD0        A0101740                        blt     r1,#'@',tstv_notfound   ; C=1: not a variable
FFFFFFFFFFFFDBCC        B2100F40                        bne             r1,#'@',TV1     ; brnch if not "@" array
FFFFFFFFFFFFECD4        B2100F40                        bne             r1,#'@',TV1     ; brnch if not "@" array
FFFFFFFFFFFFDBD0        0A840001                        addui   r8,r8,#1        ; If it is, it should be
FFFFFFFFFFFFECD8        0A840001                        addui   r8,r8,#1        ; If it is, it should be
FFFFFFFFFFFFDBD4        31FFF6DF                        call    PARN            ; followed by (EXPR) as its index.
FFFFFFFFFFFFECDC        31FFFB21                        call    PARN            ; followed by (EXPR) as its index.
FFFFFFFFFFFFDBD8        06108600                        shli    r1,r1,#3
FFFFFFFFFFFFECE0        06108600                        shli    r1,r1,#3
                                                 ;      BCS.L   QHOW            say "How?" if index is too big
                                                 ;      BCS.L   QHOW            say "How?" if index is too big
FFFFFFFFFFFFDBDC        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFECE4        0FEF0018                        subui   sp,sp,#24
FFFFFFFFFFFFDBE0        67E08008                     sw      r1,8[sp]    ; save the index
FFFFFFFFFFFFECE8        67E08008                     sw      r1,8[sp]    ; save the index
FFFFFFFFFFFFDBE4        67EF8000                     sw         lr,[sp]
FFFFFFFFFFFFECEC        67EF8000                     sw         lr,[sp]
FFFFFFFFFFFFDBE8        31FFF793                        call    SIZEX           ; get amount of free memory
FFFFFFFFFFFFECF0        31FFFBD5                        call    SIZEX           ; get amount of free memory
FFFFFFFFFFFFDBEC        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFECF4        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDBF0        47E10008                        lw      r2,8[sp]    ; get back the index
FFFFFFFFFFFFECF8        47E10008                        lw      r2,8[sp]    ; get back the index
FFFFFFFFFFFFDBF4        BE208044                        bltu    r2,r1,TV2       ; see if there's enough memory
FFFFFFFFFFFFECFC        BE208044                        bltu    r2,r1,TV2       ; see if there's enough memory
FFFFFFFFFFFFDBF8        33FFF7C5                        jmp     QSORRY          ; if not, say "Sorry"
FFFFFFFFFFFFED00        33FFFC07                        jmp     QSORRY          ; if not, say "Sorry"
FFFFFFFFFFFFDBFC                                 TV2:
FFFFFFFFFFFFED04                                 TV2:
FFFFFFFFFFFFDBFC        9A0090D8                        lea             r1,VARBGN   ; put address of array element...
FFFFFFFFFFFFED04        9A0090D8                        lea             r1,VARBGN   ; put address of array element...
FFFFFFFFFFFFDC00        04110405                        subu    r1,r1,r2       ; into r1 (neg. offset is used)
FFFFFFFFFFFFED08        04110405                        subu    r1,r1,r2       ; into r1 (neg. offset is used)
FFFFFFFFFFFFDC04        BE0000AA                        bra     TSTVRT
FFFFFFFFFFFFED0C        BE0000AA                        bra     TSTVRT
FFFFFFFFFFFFDC08                                 TV1:
FFFFFFFFFFFFED10                                 TV1:
FFFFFFFFFFFFDC08        31FFF70D                     call    getVarName      ; get variable name
FFFFFFFFFFFFED10        31FFFB4F                     call    getVarName      ; get variable name
FFFFFFFFFFFFDC0C        BE100068                     beq     r1,r0,TSTVRT    ; if not, return r1=0
FFFFFFFFFFFFED14        BE100068                     beq     r1,r0,TSTVRT    ; if not, return r1=0
FFFFFFFFFFFFDC10        02510009                     mov                r2,r5
FFFFFFFFFFFFED18        02510009                     mov                r2,r5
FFFFFFFFFFFFDC14        31FFF733                     call    findVar     ; find or allocate
FFFFFFFFFFFFED1C        31FFFB75                     call    findVar     ; find or allocate
FFFFFFFFFFFFDC18                                 TSTVRT:
FFFFFFFFFFFFED20                                 TSTVRT:
FFFFFFFFFFFFDC18        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFED20        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFDC1C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFED24        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDC20        37EF8018                        ret             #24                     ; r1<>0 (found)
FFFFFFFFFFFFED28        37EF8018                        ret             #24                     ; r1<>0 (found)
FFFFFFFFFFFFDC24                                 tstv_notfound:
FFFFFFFFFFFFED2C                                 tstv_notfound:
FFFFFFFFFFFFDC24        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFED2C        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFDC28        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFED30        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFDC2C        E0400000                     setlo   r1,#0       ; r1=0 if not found
FFFFFFFFFFFFED34        E0400000                     setlo   r1,#0       ; r1=0 if not found
FFFFFFFFFFFFDC30        37EF8018                     ret                #24
FFFFFFFFFFFFED38        37EF8018                     ret                #24
 
 
 
 
                                                 ; Returns
                                                 ; Returns
                                                 ;   r1 = 6 character variable name + type
                                                 ;   r1 = 6 character variable name + type
                                                 ;
                                                 ;
FFFFFFFFFFFFDC34                                 getVarName:
FFFFFFFFFFFFED3C                                 getVarName:
FFFFFFFFFFFFDC34        0FEF0018                     subui   sp,sp,#24
FFFFFFFFFFFFED3C        0FEF0018                     subui   sp,sp,#24
FFFFFFFFFFFFDC38        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFED40        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFDC3C        67E28010                     sw         r5,16[sp]
FFFFFFFFFFFFED44        67E28010                     sw         r5,16[sp]
 
 
FFFFFFFFFFFFDC40        40808000                     lb      r1,[r8]     ; get first character
FFFFFFFFFFFFED48        40808000                     lb      r1,[r8]     ; get first character
FFFFFFFFFFFFDC44        67E08008                     sw         r1,8[sp]        ; save off current name
FFFFFFFFFFFFED4C        67E08008                     sw         r1,8[sp]        ; save off current name
FFFFFFFFFFFFDC48        31FFF65C                     call    isAlpha
FFFFFFFFFFFFED50        31FFFA9E                     call    isAlpha
FFFFFFFFFFFFDC4C        BE100388                     beq     r1,r0,gvn1
FFFFFFFFFFFFED54        BE100388                     beq     r1,r0,gvn1
FFFFFFFFFFFFDC50        E1400005                     setlo   r5,#5       ; loop six more times
FFFFFFFFFFFFED58        E1400005                     setlo   r5,#5       ; loop six more times
 
 
                                                        ; check for second/third character
                                                        ; check for second/third character
FFFFFFFFFFFFDC54                                 gvn4:
FFFFFFFFFFFFED5C                                 gvn4:
FFFFFFFFFFFFDC54        0A840001                        addui   r8,r8,#1
FFFFFFFFFFFFED5C        0A840001                        addui   r8,r8,#1
FFFFFFFFFFFFDC58        40808000                        lb      r1,[r8]     ; do we have another char ?
FFFFFFFFFFFFED60        40808000                        lb      r1,[r8]     ; do we have another char ?
FFFFFFFFFFFFDC5C        31FFF664                        call    isAlnum
FFFFFFFFFFFFED64        31FFFAA6                        call    isAlnum
FFFFFFFFFFFFDC60        BE100168                        beq     r1,r0,gvn2  ; nope
FFFFFFFFFFFFED68        BE100168                        beq     r1,r0,gvn2  ; nope
FFFFFFFFFFFFDC64        47E08008                        lw      r1,8[sp]    ; get varname
FFFFFFFFFFFFED6C        47E08008                        lw      r1,8[sp]    ; get varname
FFFFFFFFFFFFDC68        06109000                        shli    r1,r1,#8
FFFFFFFFFFFFED70        06109000                        shli    r1,r1,#8
FFFFFFFFFFFFDC6C        40810000                        lb      r2,[r8]
FFFFFFFFFFFFED74        40810000                        lb      r2,[r8]
FFFFFFFFFFFFDC70        04110409                        or      r1,r1,r2   ; add in new char
FFFFFFFFFFFFED78        04110409                        or      r1,r1,r2   ; add in new char
FFFFFFFFFFFFDC74        67E08008                     sw      r1,8[sp]   ; save off name again
FFFFFFFFFFFFED7C        67E08008                     sw      r1,8[sp]   ; save off name again
FFFFFFFFFFFFDC78        BE02FEEF                     loop       r5,gvn4
FFFFFFFFFFFFED80        BE02FEEF                     loop       r5,gvn4
 
 
                                                     ; now ignore extra variable name characters
                                                     ; now ignore extra variable name characters
FFFFFFFFFFFFDC7C                                 gvn6:
FFFFFFFFFFFFED84                                 gvn6:
FFFFFFFFFFFFDC7C        0A840001                     addui   r8,r8,#1
FFFFFFFFFFFFED84        0A840001                     addui   r8,r8,#1
FFFFFFFFFFFFDC80        40808000                     lb      r1,[r8]
FFFFFFFFFFFFED88        40808000                     lb      r1,[r8]
FFFFFFFFFFFFDC84        31FFF664                     call    isAlnum
FFFFFFFFFFFFED8C        31FFFAA6                     call    isAlnum
FFFFFFFFFFFFDC88        BE107FA9                     bne     r1,r0,gvn6 ; keep looping as long as we have identifier chars
FFFFFFFFFFFFED90        BE107FA9                     bne     r1,r0,gvn6 ; keep looping as long as we have identifier chars
 
 
                                                     ; check for a variable type
                                                     ; check for a variable type
FFFFFFFFFFFFDC8C                                 gvn2:
FFFFFFFFFFFFED94                                 gvn2:
FFFFFFFFFFFFDC8C        40808000                        lb              r1,[r8]
FFFFFFFFFFFFED94        40808000                        lb              r1,[r8]
FFFFFFFFFFFFDC90        B0100425                     beq     r1,#'%',gvn3
FFFFFFFFFFFFED98        B0100425                     beq     r1,#'%',gvn3
FFFFFFFFFFFFDC94        B0100324                     beq     r1,#'$',gvn3
FFFFFFFFFFFFED9C        B0100324                     beq     r1,#'$',gvn3
FFFFFFFFFFFFDC98        E0400000                     setlo   r1,#0
FFFFFFFFFFFFEDA0        E0400000                     setlo   r1,#0
FFFFFFFFFFFFDC9C        0E840001                     subui   r8,r8,#1
FFFFFFFFFFFFEDA4        0E840001                     subui   r8,r8,#1
 
 
                                                     ; insert variable type indicator and return
                                                     ; insert variable type indicator and return
FFFFFFFFFFFFDCA0                                 gvn3:
FFFFFFFFFFFFEDA8                                 gvn3:
FFFFFFFFFFFFDCA0        0A840001                     addui   r8,r8,#1
FFFFFFFFFFFFEDA8        0A840001                     addui   r8,r8,#1
FFFFFFFFFFFFDCA4        47E10008                     lw      r2,8[sp]
FFFFFFFFFFFFEDAC        47E10008                     lw      r2,8[sp]
FFFFFFFFFFFFDCA8        06211000                     shli       r2,r2,#8
FFFFFFFFFFFFEDB0        06211000                     shli       r2,r2,#8
FFFFFFFFFFFFDCAC        04110409                     or      r1,r1,r2    ; add in variable type
FFFFFFFFFFFFEDB4        04110409                     or      r1,r1,r2    ; add in variable type
FFFFFFFFFFFFDCB0        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFEDB8        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFDCB4        47E28010                     lw         r5,16[sp]
FFFFFFFFFFFFEDBC        47E28010                     lw         r5,16[sp]
FFFFFFFFFFFFDCB8        37EF8018                     ret                #24                     ; return Z = 0, r1 = varname
FFFFFFFFFFFFEDC0        37EF8018                     ret                #24                     ; return Z = 0, r1 = varname
 
 
                                                     ; not a variable name
                                                     ; not a variable name
FFFFFFFFFFFFDCBC                                 gvn1:
FFFFFFFFFFFFEDC4                                 gvn1:
FFFFFFFFFFFFDCBC        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFEDC4        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFDCC0        47E28010                     lw         r5,16[sp]
FFFFFFFFFFFFEDC8        47E28010                     lw         r5,16[sp]
FFFFFFFFFFFFDCC4        E0400000                     setlo   r1,#0       ; return Z = 1 if not a varname
FFFFFFFFFFFFEDCC        E0400000                     setlo   r1,#0       ; return Z = 1 if not a varname
FFFFFFFFFFFFDCC8        37EF8018                     ret                #24
FFFFFFFFFFFFEDD0        37EF8018                     ret                #24
 
 
 
 
                                                 ; Find variable
                                                 ; Find variable
                                                 ;   r1 = varname
                                                 ;   r1 = varname
                                                 ;      r2 = allocate flag
                                                 ;      r2 = allocate flag
                                                 ; Returns
                                                 ; Returns
                                                 ;   r1 = variable address, Z =0 if found / allocated, Z=1 if not found
                                                 ;   r1 = variable address, Z =0 if found / allocated, Z=1 if not found
 
 
FFFFFFFFFFFFDCCC                                 findVar:
FFFFFFFFFFFFEDD4                                 findVar:
FFFFFFFFFFFFDCCC        0FEF0010                     subui   sp,sp,#16
FFFFFFFFFFFFEDD4        0FEF0010                     subui   sp,sp,#16
FFFFFFFFFFFFDCD0        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFEDD8        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFDCD4        67E38008                     sw      r7,8[sp]
FFFFFFFFFFFFEDDC        67E38008                     sw      r7,8[sp]
FFFFFFFFFFFFDCD8        460190D8                     lw      r3,VARBGN
FFFFFFFFFFFFEDE0        460190D8                     lw      r3,VARBGN
FFFFFFFFFFFFDCDC                                 fv4:
FFFFFFFFFFFFEDE4                                 fv4:
FFFFFFFFFFFFDCDC        46338000                     lw      r7,[r3]     ; get varname / type
FFFFFFFFFFFFEDE4        46338000                     lw      r7,[r3]     ; get varname / type
FFFFFFFFFFFFDCE0        BE700108                     beq     r7,r0,fv3   ; no more vars ?
FFFFFFFFFFFFEDE8        BE700108                     beq     r7,r0,fv3   ; no more vars ?
FFFFFFFFFFFFDCE4        BE138128                     beq     r1,r7,fv1  ; match ?
FFFFFFFFFFFFEDEC        BE138128                     beq     r1,r7,fv1  ; match ?
FFFFFFFFFFFFDCE8        08318008                     add     r3,r3,#8    ; move to next var
FFFFFFFFFFFFEDF0        08318008                     add     r3,r3,#8    ; move to next var
FFFFFFFFFFFFDCEC        460390F8                     lw      r7,STKBOT
FFFFFFFFFFFFEDF4        460390F8                     lw      r7,STKBOT
FFFFFFFFFFFFDCF0        BE33FF60                     blt     r3,r7,fv4   ; loop back to look at next var
FFFFFFFFFFFFEDF8        BE33FF60                     blt     r3,r7,fv4   ; loop back to look at next var
 
 
                                                     ; variable not found
                                                     ; variable not found
                                                     ; no more memory
                                                     ; no more memory
FFFFFFFFFFFFDCF4        E07FE650                     setlo      r1,#
FFFFFFFFFFFFEDFC        E07FF748                     setlo      r1,#
FFFFFFFFFFFFDCF8        F04FFFFF                     sethi      r1,#>msgVarSpace
FFFFFFFFFFFFEE00        F04FFFFF                     sethi      r1,#>msgVarSpace
FFFFFFFFFFFFDCFC        BE00112A                     bra     ERROR
FFFFFFFFFFFFEE04        BE00112A                     bra     ERROR
                                                 ;    lw      lr,[sp]
                                                 ;    lw      lr,[sp]
                                                 ;    lw      r7,4[sp]
                                                 ;    lw      r7,4[sp]
                                                 ;    add     sp,sp,#8
                                                 ;    add     sp,sp,#8
                                                 ;    lw      r1,#0
                                                 ;    lw      r1,#0
                                                 ;    ret
                                                 ;    ret
 
 
                                                     ; variable not found
                                                     ; variable not found
                                                     ; allocate new ?
                                                     ; allocate new ?
FFFFFFFFFFFFDD00                                 fv3:
FFFFFFFFFFFFEE08                                 fv3:
FFFFFFFFFFFFDD00        BE2000C8                        beq             r2,r0,fv2
FFFFFFFFFFFFEE08        BE2000C8                        beq             r2,r0,fv2
FFFFFFFFFFFFDD04        66308000                     sw      r1,[r3]     ; save varname / type
FFFFFFFFFFFFEE0C        66308000                     sw      r1,[r3]     ; save varname / type
                                                     ; found variable
                                                     ; found variable
                                                     ; return address
                                                     ; return address
FFFFFFFFFFFFDD08                                 fv1:
FFFFFFFFFFFFEE10                                 fv1:
FFFFFFFFFFFFDD08        0A308008                     addui   r1,r3,#8
FFFFFFFFFFFFEE10        0A308008                     addui   r1,r3,#8
FFFFFFFFFFFFDD0C        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFEE14        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFDD10        47E38008                     lw      r7,8[sp]
FFFFFFFFFFFFEE18        47E38008                     lw      r7,8[sp]
FFFFFFFFFFFFDD14        37EF8010                     ret                #16    ; Z = 0, r1 = address
FFFFFFFFFFFFEE1C        37EF8010                     ret                #16    ; Z = 0, r1 = address
 
 
                                                     ; didn't find var and not allocating
                                                     ; didn't find var and not allocating
FFFFFFFFFFFFDD18                                 fv2:
FFFFFFFFFFFFEE20                                 fv2:
FFFFFFFFFFFFDD18        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFEE20        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFDD1C        47E38008                     lw      r7,8[sp]
FFFFFFFFFFFFEE24        47E38008                     lw      r7,8[sp]
FFFFFFFFFFFFDD20        0BEF0010                     addui   sp,sp,#16   ; Z = 0, r1 = address
FFFFFFFFFFFFEE28        0BEF0010                     addui   sp,sp,#16   ; Z = 0, r1 = address
FFFFFFFFFFFFDD24        E0400000                        setlo   r1,#0           ; Z = 1, r1 = 0
FFFFFFFFFFFFEE2C        E0400000                        setlo   r1,#0           ; Z = 1, r1 = 0
FFFFFFFFFFFFDD28        37EF8000                     ret
FFFFFFFFFFFFEE30        37EF8000                     ret
 
 
 
 
                                                 ; ===== Multiplies the 32 bit values in r1 and r2, returning
                                                 ; ===== Multiplies the 32 bit values in r1 and r2, returning
                                                 ;      the 32 bit result in r1.
                                                 ;      the 32 bit result in r1.
                                                 ;
                                                 ;
Line 4395... Line 5974...
 
 
 
 
                                                 ; ===== The PEEK function returns the byte stored at the address
                                                 ; ===== The PEEK function returns the byte stored at the address
                                                 ;      contained in the following expression.
                                                 ;      contained in the following expression.
                                                 ;
                                                 ;
FFFFFFFFFFFFDD2C                                 PEEK:
FFFFFFFFFFFFEE34                                 PEEK:
FFFFFFFFFFFFDD2C        31FFF6DF                        call    PARN            ; get the memory address
FFFFFFFFFFFFEE34        31FFFB21                        call    PARN            ; get the memory address
FFFFFFFFFFFFDD30        4A108000                        lbu             r1,[r1]         ; get the addressed byte
FFFFFFFFFFFFEE38        4A108000                        lbu             r1,[r1]         ; get the addressed byte
FFFFFFFFFFFFDD34        47EF8000                        lw              lr,[sp]         ; and return it
FFFFFFFFFFFFEE3C        47EF8000                        lw              lr,[sp]         ; and return it
FFFFFFFFFFFFDD38        37EF8018                        ret             #24
FFFFFFFFFFFFEE40        37EF8018                        ret             #24
 
 
                                                 ; ===== The PEEK function returns the byte stored at the address
                                                 ; ===== The PEEK function returns the byte stored at the address
                                                 ;      contained in the following expression.
                                                 ;      contained in the following expression.
                                                 ;
                                                 ;
FFFFFFFFFFFFDD3C                                 PEEKC:
FFFFFFFFFFFFEE44                                 PEEKC:
FFFFFFFFFFFFDD3C        31FFF6DF                        call    PARN            ; get the memory address
FFFFFFFFFFFFEE44        31FFFB21                        call    PARN            ; get the memory address
FFFFFFFFFFFFDD40        1410FFFE                        andi    r1,r1,#-2       ; align to char address
FFFFFFFFFFFFEE48        1410FFFE                        andi    r1,r1,#-2       ; align to char address
FFFFFFFFFFFFDD44        4C108000                        lcu             r1,[r1]         ; get the addressed char
FFFFFFFFFFFFEE4C        4C108000                        lcu             r1,[r1]         ; get the addressed char
FFFFFFFFFFFFDD48        47EF8000                        lw              lr,[sp]         ; and return it
FFFFFFFFFFFFEE50        47EF8000                        lw              lr,[sp]         ; and return it
FFFFFFFFFFFFDD4C        37EF8018                        ret             #24
FFFFFFFFFFFFEE54        37EF8018                        ret             #24
 
 
                                                 ; ===== The PEEK function returns the byte stored at the address
                                                 ; ===== The PEEK function returns the byte stored at the address
                                                 ;      contained in the following expression.
                                                 ;      contained in the following expression.
                                                 ;
                                                 ;
FFFFFFFFFFFFDD50                                 PEEKH:
FFFFFFFFFFFFEE58                                 PEEKH:
FFFFFFFFFFFFDD50        31FFF6DF                        call    PARN            ; get the memory address
FFFFFFFFFFFFEE58        31FFFB21                        call    PARN            ; get the memory address
FFFFFFFFFFFFDD54        1410FFFC                        andi    r1,r1,#-4       ; align to half-word address
FFFFFFFFFFFFEE5C        1410FFFC                        andi    r1,r1,#-4       ; align to half-word address
FFFFFFFFFFFFDD58        4E108000                        lhu             r1,[r1]         ; get the addressed char
FFFFFFFFFFFFEE60        4E108000                        lhu             r1,[r1]         ; get the addressed char
FFFFFFFFFFFFDD5C        47EF8000                        lw              lr,[sp]         ; and return it
FFFFFFFFFFFFEE64        47EF8000                        lw              lr,[sp]         ; and return it
FFFFFFFFFFFFDD60        37EF8018                        ret             #24
FFFFFFFFFFFFEE68        37EF8018                        ret             #24
 
 
                                                 ; ===== The PEEK function returns the byte stored at the address
                                                 ; ===== The PEEK function returns the byte stored at the address
                                                 ;      contained in the following expression.
                                                 ;      contained in the following expression.
                                                 ;
                                                 ;
FFFFFFFFFFFFDD64                                 PEEKW:
FFFFFFFFFFFFEE6C                                 PEEKW:
FFFFFFFFFFFFDD64        31FFF6DF                        call    PARN            ; get the memory address
FFFFFFFFFFFFEE6C        31FFFB21                        call    PARN            ; get the memory address
FFFFFFFFFFFFDD68        1410FFF8                        andi    r1,r1,#-8               ; align to word address
FFFFFFFFFFFFEE70        1410FFF8                        andi    r1,r1,#-8               ; align to word address
FFFFFFFFFFFFDD6C        46108000                        lw              r1,[r1]         ; get the addressed word
FFFFFFFFFFFFEE74        46108000                        lw              r1,[r1]         ; get the addressed word
FFFFFFFFFFFFDD70        47EF8000                        lw              lr,[sp]         ; and return it
FFFFFFFFFFFFEE78        47EF8000                        lw              lr,[sp]         ; and return it
FFFFFFFFFFFFDD74        37EF8018                        ret             #24
FFFFFFFFFFFFEE7C        37EF8018                        ret             #24
 
 
                                                 ; user function call
                                                 ; user function call
                                                 ; call the user function with argument in r1
                                                 ; call the user function with argument in r1
FFFFFFFFFFFFDD78                                 USRX:
FFFFFFFFFFFFEE80                                 USRX:
FFFFFFFFFFFFDD78        31FFF6DF                        call    PARN            ; get expression value
FFFFFFFFFFFFEE80        31FFFB21                        call    PARN            ; get expression value
FFFFFFFFFFFFDD7C        67E40008                        sw              r8,8[sp]        ; save the text pointer
FFFFFFFFFFFFEE84        67E40008                        sw              r8,8[sp]        ; save the text pointer
FFFFFFFFFFFFDD80        46011028                        lw      r2,usrJmp   ; get usr vector
FFFFFFFFFFFFEE88        46011028                        lw      r2,usrJmp   ; get usr vector
FFFFFFFFFFFFDD84        342F8000                        jal             r31,[r2]        ; jump to the subroutine
FFFFFFFFFFFFEE8C        342F8000                        jal             r31,[r2]        ; jump to the subroutine
FFFFFFFFFFFFDD88        47E40008                        lw              r8,8[sp]        ; restore the text pointer
FFFFFFFFFFFFEE90        47E40008                        lw              r8,8[sp]        ; restore the text pointer
FFFFFFFFFFFFDD8C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEE94        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDD90        37EF8018                        ret             #24
FFFFFFFFFFFFEE98        37EF8018                        ret             #24
 
 
 
 
                                                 ; ===== The RND function returns a random number from 1 to
                                                 ; ===== The RND function returns a random number from 1 to
                                                 ;      the value of the following expression in D0.
                                                 ;      the value of the following expression in D0.
                                                 ;
                                                 ;
FFFFFFFFFFFFDD94                                 RND:
FFFFFFFFFFFFEE9C                                 RND:
FFFFFFFFFFFFDD94        31FFF6DF                        call    PARN            ; get the upper limit
FFFFFFFFFFFFEE9C        31FFFB21                        call    PARN            ; get the upper limit
FFFFFFFFFFFFDD98        BE100168                        beq             r1,r0,rnd2      ; it must be positive and non-zero
FFFFFFFFFFFFEEA0        BE100168                        beq             r1,r0,rnd2      ; it must be positive and non-zero
FFFFFFFFFFFFDD9C        BE100100                        blt             r1,r0,rnd1
FFFFFFFFFFFFEEA4        BE100100                        blt             r1,r0,rnd1
FFFFFFFFFFFFDDA0        04100809                        lw              r2,r1
FFFFFFFFFFFFEEA8        04100809                        lw              r2,r1
FFFFFFFFFFFFDDA4        00000050                        gran                            ; generate a random number
FFFFFFFFFFFFEEAC        00000050                        gran                            ; generate a random number
FFFFFFFFFFFFDDA8        020088A8                        mfspr   r1,rand         ; get the number
FFFFFFFFFFFFEEB0        020088A8                        mfspr   r1,rand         ; get the number
FFFFFFFFFFFFDDAC        31FFF775                        call    modu4           ; RND(n)=MOD(number,n)+1
FFFFFFFFFFFFEEB4        31FFFBB7                        call    modu4           ; RND(n)=MOD(number,n)+1
FFFFFFFFFFFFDDB0        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFEEB8        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFDDB4        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEEBC        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDDB8        37EF8018                        ret             #24
FFFFFFFFFFFFEEC0        37EF8018                        ret             #24
FFFFFFFFFFFFDDBC                                 rnd1:
FFFFFFFFFFFFEEC4                                 rnd1:
FFFFFFFFFFFFDDBC        9A00E6C1                        lea             r1,msgRNDBad
FFFFFFFFFFFFEEC4        9A00F7B9                        lea             r1,msgRNDBad
FFFFFFFFFFFFDDC0        BE000B0A                        bra             ERROR
FFFFFFFFFFFFEEC8        BE000B0A                        bra             ERROR
FFFFFFFFFFFFDDC4                                 rnd2:
FFFFFFFFFFFFEECC                                 rnd2:
FFFFFFFFFFFFDDC4        00000050                        gran
FFFFFFFFFFFFEECC        00000050                        gran
FFFFFFFFFFFFDDC8        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFEED0        020088A8                        mfspr   r1,rand
FFFFFFFFFFFFDDCC        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEED4        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDDD0        37EF8018                        ret             #24
FFFFFFFFFFFFEED8        37EF8018                        ret             #24
 
 
 
 
                                                 ; r = a mod b
                                                 ; r = a mod b
                                                 ; a = r1
                                                 ; a = r1
                                                 ; b = r2
                                                 ; b = r2
                                                 ; r = r6
                                                 ; r = r6
FFFFFFFFFFFFDDD4                                 modu4:
FFFFFFFFFFFFEEDC                                 modu4:
FFFFFFFFFFFFDDD4        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFEEDC        0FEF0020                        subui   sp,sp,#32
FFFFFFFFFFFFDDD8        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFEEE0        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFDDDC        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFEEE4        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFDDE0        67E30010                        sw              r6,16[sp]
FFFFFFFFFFFFEEE8        67E30010                        sw              r6,16[sp]
FFFFFFFFFFFFDDE4        67E38018                        sw              r7,24[sp]
FFFFFFFFFFFFEEEC        67E38018                        sw              r7,24[sp]
FFFFFFFFFFFFDDE8        1603803F                        lw      r7,#63          ; n = 64
FFFFFFFFFFFFEEF0        1603803F                        lw      r7,#63          ; n = 64
FFFFFFFFFFFFDDEC        0452940A                        xor             r5,r5,r5        ; w = 0
FFFFFFFFFFFFEEF4        0452940A                        xor             r5,r5,r5        ; w = 0
FFFFFFFFFFFFDDF0        0463180A                        xor             r6,r6,r6        ; r = 0
FFFFFFFFFFFFEEF8        0463180A                        xor             r6,r6,r6        ; r = 0
FFFFFFFFFFFFDDF4                                 mod2:
FFFFFFFFFFFFEEFC                                 mod2:
FFFFFFFFFFFFDDF4        06108202                        roli    r1,r1,#1        ; a <<= 1
FFFFFFFFFFFFEEFC        06108202                        roli    r1,r1,#1        ; a <<= 1
FFFFFFFFFFFFDDF8        14118001                        andi    r3,r1,#1
FFFFFFFFFFFFEF00        14118001                        andi    r3,r1,#1
FFFFFFFFFFFFDDFC        06630200                        shli    r6,r6,#1        ; r <<= 1
FFFFFFFFFFFFEF04        06630200                        shli    r6,r6,#1        ; r <<= 1
FFFFFFFFFFFFDE00        04619809                        or              r6,r6,r3
FFFFFFFFFFFFEF08        04619809                        or              r6,r6,r3
FFFFFFFFFFFFDE04        1410FFFE                        andi    r1,r1,#-2
FFFFFFFFFFFFEF0C        1410FFFE                        andi    r1,r1,#-2
FFFFFFFFFFFFDE08        BE230047                        bgtu    r2,r6,mod1      ; b < r ?
FFFFFFFFFFFFEF10        BE230047                        bgtu    r2,r6,mod1      ; b < r ?
FFFFFFFFFFFFDE0C        04611805                        subu    r6,r6,r2        ; r -= b
FFFFFFFFFFFFEF14        04611805                        subu    r6,r6,r2        ; r -= b
FFFFFFFFFFFFDE10                                 mod1:
FFFFFFFFFFFFEF18                                 mod1:
FFFFFFFFFFFFDE10        BE03FF2F                     loop       r7,mod2         ; n--
FFFFFFFFFFFFEF18        BE03FF2F                     loop       r7,mod2         ; n--
FFFFFFFFFFFFDE14        02608009                        mov             r1,r6
FFFFFFFFFFFFEF1C        02608009                        mov             r1,r6
FFFFFFFFFFFFDE18        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFEF20        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFDE1C        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFEF24        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFDE20        47E30010                        lw              r6,16[sp]
FFFFFFFFFFFFEF28        47E30010                        lw              r6,16[sp]
FFFFFFFFFFFFDE24        47E38018                        lw              r7,24[sp]
FFFFFFFFFFFFEF2C        47E38018                        lw              r7,24[sp]
FFFFFFFFFFFFDE28        37EF8020                        ret             #32
FFFFFFFFFFFFEF30        37EF8020                        ret             #32
 
 
 
 
                                                 ; ===== The ABS function returns an absolute value in r2.
                                                 ; ===== The ABS function returns an absolute value in r2.
                                                 ;
                                                 ;
FFFFFFFFFFFFDE2C                                 ABS:
FFFFFFFFFFFFEF34                                 ABS:
FFFFFFFFFFFFDE2C        31FFF6DF                        call    PARN            ; get the following expr.'s value
FFFFFFFFFFFFEF34        31FFFB21                        call    PARN            ; get the following expr.'s value
FFFFFFFFFFFFDE30        02108007                        abs             r1,r1
FFFFFFFFFFFFEF38        02108007                        abs             r1,r1
FFFFFFFFFFFFDE34        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEF3C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDE38        37EF8018                        ret             #24
FFFFFFFFFFFFEF40        37EF8018                        ret             #24
 
 
                                                 ; ===== The SGN function returns the sign in r1. +1,0, or -1
                                                 ; ===== The SGN function returns the sign in r1. +1,0, or -1
                                                 ;
                                                 ;
FFFFFFFFFFFFDE3C                                 SGN:
FFFFFFFFFFFFEF44                                 SGN:
FFFFFFFFFFFFDE3C        31FFF6DF                        call    PARN            ; get the following expr.'s value
FFFFFFFFFFFFEF44        31FFFB21                        call    PARN            ; get the following expr.'s value
FFFFFFFFFFFFDE40        02108008                        sgn             r1,r1
FFFFFFFFFFFFEF48        02108008                        sgn             r1,r1
FFFFFFFFFFFFDE44        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEF4C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDE48        37EF8018                        ret             #24
FFFFFFFFFFFFEF50        37EF8018                        ret             #24
 
 
                                                 ; ===== The SIZE function returns the size of free memory in r1.
                                                 ; ===== The SIZE function returns the size of free memory in r1.
                                                 ;
                                                 ;
FFFFFFFFFFFFDE4C                                 SIZEX:
FFFFFFFFFFFFEF54                                 SIZEX:
FFFFFFFFFFFFDE4C        460090D8                        lw              r1,VARBGN       ; get the number of free bytes...
FFFFFFFFFFFFEF54        460090D8                        lw              r1,VARBGN       ; get the number of free bytes...
FFFFFFFFFFFFDE50        460110D0                        lw              r2,TXTUNF       ; between 'TXTUNF' and 'VARBGN'
FFFFFFFFFFFFEF58        460110D0                        lw              r2,TXTUNF       ; between 'TXTUNF' and 'VARBGN'
FFFFFFFFFFFFDE54        04110405                        subu    r1,r1,r2
FFFFFFFFFFFFEF5C        04110405                        subu    r1,r1,r2
FFFFFFFFFFFFDE58        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFEF60        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDE5C        37EF8018                        ret             #24                     ; return the number in r2
FFFFFFFFFFFFEF64        37EF8018                        ret             #24                     ; return the number in r2
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
                                                 ; *** SETVAL *** FIN *** ENDCHK *** ERROR (& friends) ***
                                                 ; *** SETVAL *** FIN *** ENDCHK *** ERROR (& friends) ***
Line 4558... Line 6137...
                                                 ;
                                                 ;
 
 
                                                 ; returns
                                                 ; returns
                                                 ; r2 = variable's address
                                                 ; r2 = variable's address
                                                 ;
                                                 ;
FFFFFFFFFFFFDE60                                 SETVAL:
FFFFFFFFFFFFEF68                                 SETVAL:
FFFFFFFFFFFFDE60        0FEF0010                     subui   sp,sp,#16
FFFFFFFFFFFFEF68        0FEF0010                     subui   sp,sp,#16
FFFFFFFFFFFFDE64        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFEF6C        67EF8000                     sw      lr,[sp]
FFFFFFFFFFFFDE68        E0400001                     setlo      r1,#1           ; allocate var
FFFFFFFFFFFFEF70        E0400001                     setlo      r1,#1           ; allocate var
FFFFFFFFFFFFDE6C        31FFF6EC                     call       TSTV            ; variable name?
FFFFFFFFFFFFEF74        31FFFB2E                     call       TSTV            ; variable name?
FFFFFFFFFFFFDE70        BE100069                     bne                r1,r0,sv2
FFFFFFFFFFFFEF78        BE100069                     bne                r1,r0,sv2
FFFFFFFFFFFFDE74        9A00E6AA                        lea             r1,msgVar
FFFFFFFFFFFFEF7C        9A00F7A2                        lea             r1,msgVar
FFFFFFFFFFFFDE78        BE00054A                        bra             ERROR
FFFFFFFFFFFFEF80        BE00054A                        bra             ERROR
FFFFFFFFFFFFDE7C                                 sv2:
FFFFFFFFFFFFEF84                                 sv2:
FFFFFFFFFFFFDE7C        67E08008                        sw      r1,8[sp]    ; save the variable's address
FFFFFFFFFFFFEF84        67E08008                        sw      r1,8[sp]    ; save the variable's address
FFFFFFFFFFFFDE80        E0C0003D                        setlo   r3,#'='
FFFFFFFFFFFFEF88        E0C0003D                        setlo   r3,#'='
FFFFFFFFFFFFDE84        9A025EA4                        lea             r4,SV1
FFFFFFFFFFFFEF8C        9A026FAC                        lea             r4,SV1
FFFFFFFFFFFFDE88        31FFF8F1                        call    TSTC            ; get past the "=" sign
FFFFFFFFFFFFEF90        31FFFD30                        call    TSTC            ; get past the "=" sign
FFFFFFFFFFFFDE8C        31FFF63A                        call    OREXPR          ; evaluate the expression
FFFFFFFFFFFFEF94        31FFFA7C                        call    OREXPR          ; evaluate the expression
FFFFFFFFFFFFDE90        47E10008                        lw      r2,8[sp]    ; get back the variable's address
FFFFFFFFFFFFEF98        47E10008                        lw      r2,8[sp]    ; get back the variable's address
FFFFFFFFFFFFDE94        66208000                        sw      r1,[r2]     ; and save value in the variable
FFFFFFFFFFFFEF9C        66208000                        sw      r1,[r2]     ; and save value in the variable
FFFFFFFFFFFFDE98        04200409                        lw              r1,r2           ; return r1 = variable address
FFFFFFFFFFFFEFA0        04200409                        lw              r1,r2           ; return r1 = variable address
FFFFFFFFFFFFDE9C        47EF8000                        lw      lr,[sp]
FFFFFFFFFFFFEFA4        47EF8000                        lw      lr,[sp]
FFFFFFFFFFFFDEA0        37EF8010                        ret             #16
FFFFFFFFFFFFEFA8        37EF8010                        ret             #16
FFFFFFFFFFFFDEA4                                 SV1:
FFFFFFFFFFFFEFAC                                 SV1:
FFFFFFFFFFFFDEA4        BE0003CA                     bra            QWHAT               ; if no "=" sign
FFFFFFFFFFFFEFAC        BE0003CA                     bra            QWHAT               ; if no "=" sign
 
 
 
 
FFFFFFFFFFFFDEA8                                 FIN:
FFFFFFFFFFFFEFB0                                 FIN:
FFFFFFFFFFFFDEA8        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFEFB0        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFDEAC        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFEFB4        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDEB0        E0C0003A                        setlo   r3,#':'
FFFFFFFFFFFFEFB8        E0C0003A                        setlo   r3,#':'
FFFFFFFFFFFFDEB4        9A025EC4                        lea             r4,FI1
FFFFFFFFFFFFEFBC        9A026FCC                        lea             r4,FI1
FFFFFFFFFFFFDEB8        31FFF8F1                        call    TSTC            ; *** FIN ***
FFFFFFFFFFFFEFC0        31FFFD30                        call    TSTC            ; *** FIN ***
FFFFFFFFFFFFDEBC        0BEF0008                        addui   sp,sp,#8        ; if ":", discard return address
FFFFFFFFFFFFEFC4        0BEF0008                        addui   sp,sp,#8        ; if ":", discard return address
FFFFFFFFFFFFDEC0        BE0020AA                        bra             RUNSML          ; continue on the same line
FFFFFFFFFFFFEFC8        BE0020AA                        bra             RUNSML          ; continue on the same line
FFFFFFFFFFFFDEC4                                 FI1:
FFFFFFFFFFFFEFCC                                 FI1:
FFFFFFFFFFFFDEC4        E0C0000D                        setlo   r3,#CR
FFFFFFFFFFFFEFCC        E0C0000D                        setlo   r3,#CR
FFFFFFFFFFFFDEC8        9A025EDC                        lea             r4,FI2
FFFFFFFFFFFFEFD0        9A026FE4                        lea             r4,FI2
FFFFFFFFFFFFDECC        31FFF8F1                        call    TSTC            ; not ":", is it a CR?
FFFFFFFFFFFFEFD4        31FFFD30                        call    TSTC            ; not ":", is it a CR?
FFFFFFFFFFFFDED0        47EF8000                        lw              lr,[sp] ; else return to the caller
FFFFFFFFFFFFEFD8        47EF8000                        lw              lr,[sp] ; else return to the caller
FFFFFFFFFFFFDED4        0BEF0008                        addui   sp,sp,#8        ; yes, purge return address
FFFFFFFFFFFFEFDC        0BEF0008                        addui   sp,sp,#8        ; yes, purge return address
FFFFFFFFFFFFDED8        BE001EAA                        bra             RUNNXL          ; execute the next line
FFFFFFFFFFFFEFE0        BE001EAA                        bra             RUNNXL          ; execute the next line
FFFFFFFFFFFFDEDC                                 FI2:
FFFFFFFFFFFFEFE4                                 FI2:
FFFFFFFFFFFFDEDC        47EF8000                        lw              lr,[sp] ; else return to the caller
FFFFFFFFFFFFEFE4        47EF8000                        lw              lr,[sp] ; else return to the caller
FFFFFFFFFFFFDEE0        37EF8008                        ret             #8
FFFFFFFFFFFFEFE8        37EF8008                        ret             #8
 
 
 
 
                                                 ; Check that there is nothing else on the line
                                                 ; Check that there is nothing else on the line
                                                 ; Registers Affected
                                                 ; Registers Affected
                                                 ;   r1
                                                 ;   r1
                                                 ;
                                                 ;
FFFFFFFFFFFFDEE4                                 ENDCHK:
FFFFFFFFFFFFEFEC                                 ENDCHK:
FFFFFFFFFFFFDEE4        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFEFEC        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFDEE8        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFEFF0        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDEEC        31FFF914                        call    IGNBLK
FFFFFFFFFFFFEFF4        31FFFD55                        call    IGNBLK
FFFFFFFFFFFFDEF0        40808000                        lb              r1,[r8]
FFFFFFFFFFFFEFF8        40808000                        lb              r1,[r8]
FFFFFFFFFFFFDEF4        B010040D                        beq             r1,#CR,ec1      ; does it end with a CR?
FFFFFFFFFFFFEFFC        B010040D                        beq             r1,#CR,ec1      ; does it end with a CR?
FFFFFFFFFFFFDEF8        E07FE784                        setlo   r1,#
FFFFFFFFFFFFF000        E07FF87C                        setlo   r1,#
FFFFFFFFFFFFDEFC        F04FFFFF                        sethi   r1,#>msgExtraChars
FFFFFFFFFFFFF004        F04FFFFF                        sethi   r1,#>msgExtraChars
FFFFFFFFFFFFDF00        33FFF7C8                        jmp             ERROR
FFFFFFFFFFFFF008        33FFFC0A                        jmp             ERROR
FFFFFFFFFFFFDF04                                 ec1:
FFFFFFFFFFFFF00C                                 ec1:
FFFFFFFFFFFFDF04        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFF00C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFDF08        37EF8008                        ret             #8
FFFFFFFFFFFFF010        37EF8008                        ret             #8
 
 
 
 
FFFFFFFFFFFFDF0C                                 TOOBIG:
FFFFFFFFFFFFF014                                 TOOBIG:
FFFFFFFFFFFFDF0C        9A00E76F                        lea             r1,msgTooBig
FFFFFFFFFFFFF014        9A00F867                        lea             r1,msgTooBig
FFFFFFFFFFFFDF10        BE00008A                        bra             ERROR
FFFFFFFFFFFFF018        BE00008A                        bra             ERROR
FFFFFFFFFFFFDF14                                 QSORRY:
FFFFFFFFFFFFF01C                                 QSORRY:
FFFFFFFFFFFFDF14        9A00E605                     lea                r1,SRYMSG
FFFFFFFFFFFFF01C        9A00F6FD                     lea                r1,SRYMSG
FFFFFFFFFFFFDF18        BE00004A                        bra         ERROR
FFFFFFFFFFFFF020        BE00004A                        bra         ERROR
FFFFFFFFFFFFDF1C                                 QWHAT:
FFFFFFFFFFFFF024                                 QWHAT:
FFFFFFFFFFFFDF1C        9A00E5FD                        lea             r1,msgWhat
FFFFFFFFFFFFF024        9A00F6F5                        lea             r1,msgWhat
FFFFFFFFFFFFDF20                                 ERROR:
FFFFFFFFFFFFF028                                 ERROR:
FFFFFFFFFFFFDF20        31FFF940                        call    PRMESG          ; display the error message
FFFFFFFFFFFFF028        31FFFD81                        call    PRMESG          ; display the error message
FFFFFFFFFFFFDF24        46009090                        lw              r1,CURRNT       ; get the current line number
FFFFFFFFFFFFF02C        46009090                        lw              r1,CURRNT       ; get the current line number
FFFFFFFFFFFFDF28        BE107E88                        beq             r1,r0,WSTART    ; if zero, do a warm start
FFFFFFFFFFFFF030        BE107EA8                        beq             r1,r0,WSTART    ; if zero, do a warm start
FFFFFFFFFFFFDF2C        B01D9AFF                        beq             r1,#-1,INPERR           ; is the line no. pointer = -1? if so, redo input
FFFFFFFFFFFFF034        B01D9AFF                        beq             r1,#-1,INPERR           ; is the line no. pointer = -1? if so, redo input
FFFFFFFFFFFFDF30        40828000                        lb              r5,[r8]         ; save the char. pointed to
FFFFFFFFFFFFF038        40828000                        lb              r5,[r8]         ; save the char. pointed to
FFFFFFFFFFFFDF34        60800000                        sb              r0,[r8]         ; put a zero where the error is
FFFFFFFFFFFFF03C        60800000                        sb              r0,[r8]         ; put a zero where the error is
FFFFFFFFFFFFDF38        46009090                        lw              r1,CURRNT       ; point to start of current line
FFFFFFFFFFFFF040        46009090                        lw              r1,CURRNT       ; point to start of current line
FFFFFFFFFFFFDF3C        31FFF8DF                        call    PRTLN           ; display the line in error up to the 0
FFFFFFFFFFFFF044        31FFFD1E                        call    PRTLN           ; display the line in error up to the 0
FFFFFFFFFFFFDF40        04101809                        or      r6,r1,r0    ; save off end pointer
FFFFFFFFFFFFF048        04101809                        or      r6,r1,r0    ; save off end pointer
FFFFFFFFFFFFDF44        60828000                        sb              r5,[r8]         ; restore the character
FFFFFFFFFFFFF04C        60828000                        sb              r5,[r8]         ; restore the character
FFFFFFFFFFFFDF48        E040003F                        setlo   r1,#'?'         ; display a "?"
FFFFFFFFFFFFF050        E040003F                        setlo   r1,#'?'         ; display a "?"
FFFFFFFFFFFFDF4C        31FFF393                        call    GOOUT
FFFFFFFFFFFFF054        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFDF50        E0800000                        setlo   r2,#0       ; stop char = 0
FFFFFFFFFFFFF058        E0800000                        setlo   r2,#0       ; stop char = 0
FFFFFFFFFFFFDF54        0E608001                        subui   r1,r6,#1        ; point back to the error char.
FFFFFFFFFFFFF05C        0E608001                        subui   r1,r6,#1        ; point back to the error char.
FFFFFFFFFFFFDF58        31FFF851                        call    PRTSTG          ; display the rest of the line
FFFFFFFFFFFFF060        31FFFC93                        call    PRTSTG          ; display the rest of the line
FFFFFFFFFFFFDF5C        33FFF3BE                        jmp         WSTART              ; and do a warm start
FFFFFFFFFFFFF064        33FFF801                        jmp         WSTART              ; and do a warm start
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
                                                 ; *** GETLN *** FNDLN (& friends) ***
                                                 ; *** GETLN *** FNDLN (& friends) ***
                                                 ;
                                                 ;
Line 4658... Line 6237...
                                                 ; entered (if there is one), and control-X is used to delete the
                                                 ; entered (if there is one), and control-X is used to delete the
                                                 ; whole line and start over again. CR signals the end of a line,
                                                 ; whole line and start over again. CR signals the end of a line,
                                                 ; and causes 'GETLN' to return.
                                                 ; and causes 'GETLN' to return.
                                                 ;
                                                 ;
                                                 ;
                                                 ;
FFFFFFFFFFFFDF60                                 GETLN:
FFFFFFFFFFFFF068                                 GETLN:
FFFFFFFFFFFFDF60        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFF068        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFDF64        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFF06C        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFDF68        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFF070        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFDF6C        31FFF393                        call    GOOUT           ; display the prompt
FFFFFFFFFFFFF074        31FFF7D5                        call    GOOUT           ; display the prompt
FFFFFFFFFFFFDF70        E0400001                        setlo   r1,#1           ; turn on cursor flash
FFFFFFFFFFFFF078        E0400001                        setlo   r1,#1           ; turn on cursor flash
FFFFFFFFFFFFDF74        60009046                        sb              r1,cursFlash
FFFFFFFFFFFFF07C        60009052                        sb              r1,cursFlash
FFFFFFFFFFFFDF78        E0400020                        setlo   r1,#' '         ; and a space
FFFFFFFFFFFFF080        E0400020                        setlo   r1,#' '         ; and a space
FFFFFFFFFFFFDF7C        31FFF393                        call    GOOUT
FFFFFFFFFFFFF084        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFDF80        E200111B                        setlo   r8,#
FFFFFFFFFFFFF088        E200111B                        setlo   r8,#
FFFFFFFFFFFFDF84        F2000000                        sethi   r8,#>BUFFER
FFFFFFFFFFFFF08C        F2000000                        sethi   r8,#>BUFFER
FFFFFFFFFFFFDF88                                 GL1:
FFFFFFFFFFFFF090                                 GL1:
FFFFFFFFFFFFDF88        31FFF936                        call    CHKIO           ; check keyboard
FFFFFFFFFFFFF090        31FFFD77                        call    CHKIO           ; check keyboard
FFFFFFFFFFFFDF8C        BE107FE8                        beq             r1,r0,GL1       ; wait for a char. to come in
FFFFFFFFFFFFF094        BE107FE8                        beq             r1,r0,GL1       ; wait for a char. to come in
FFFFFFFFFFFFDF90        B0100B08                        beq             r1,#CTRLH,GL3   ; delete last character? if so
FFFFFFFFFFFFF098        B0100B08                        beq             r1,#CTRLH,GL3   ; delete last character? if so
FFFFFFFFFFFFDF94        B0101418                        beq             r1,#CTRLX,GL4   ; delete the whole line?
FFFFFFFFFFFFF09C        B0101418                        beq             r1,#CTRLX,GL4   ; delete the whole line?
FFFFFFFFFFFFDF98        B010020D                        beq             r1,#CR,GL2      ; accept a CR
FFFFFFFFFFFFF0A0        B010020D                        beq             r1,#CR,GL2      ; accept a CR
FFFFFFFFFFFFDF9C        A81FFB20                        bltu    r1,#' ',GL1     ; if other control char., discard it
FFFFFFFFFFFFF0A4        A81FFB20                        bltu    r1,#' ',GL1     ; if other control char., discard it
FFFFFFFFFFFFDFA0                                 GL2:
FFFFFFFFFFFFF0A8                                 GL2:
FFFFFFFFFFFFDFA0        60808000                        sb              r1,[r8]         ; save the char.
FFFFFFFFFFFFF0A8        60808000                        sb              r1,[r8]         ; save the char.
FFFFFFFFFFFFDFA4        08840001                        add             r8,r8,#1
FFFFFFFFFFFFF0AC        08840001                        add             r8,r8,#1
FFFFFFFFFFFFDFA8        31FFF393                        call    GOOUT           ; echo the char back out
FFFFFFFFFFFFF0B0        31FFF7D5                        call    GOOUT           ; echo the char back out
FFFFFFFFFFFFDFAC        4080FFFF                        lb      r1,-1[r8]   ; get char back (GOOUT destroys r1)
FFFFFFFFFFFFF0B4        4080FFFF                        lb      r1,-1[r8]   ; get char back (GOOUT destroys r1)
FFFFFFFFFFFFDFB0        B010190D                        beq             r1,#CR,GL7      ; if it's a CR, end the line
FFFFFFFFFFFFF0B8        B010190D                        beq             r1,#CR,GL7      ; if it's a CR, end the line
FFFFFFFFFFFFDFB4        1280916A                        cmpui   r1,r8,#BUFFER+BUFLEN-1  ; any more room?
FFFFFFFFFFFFF0BC        1280916A                        cmpui   r1,r8,#BUFFER+BUFLEN-1  ; any more room?
FFFFFFFFFFFFDFB8        BE107E80                        blt             r1,r0,GL1       ; yes: get some more, else delete last char.
FFFFFFFFFFFFF0C0        BE107E80                        blt             r1,r0,GL1       ; yes: get some more, else delete last char.
FFFFFFFFFFFFDFBC                                 GL3:
FFFFFFFFFFFFF0C4                                 GL3:
FFFFFFFFFFFFDFBC        E0400008                        setlo   r1,#CTRLH       ; delete a char. if possible
FFFFFFFFFFFFF0C4        E0400008                        setlo   r1,#CTRLH       ; delete a char. if possible
FFFFFFFFFFFFDFC0        31FFF393                        call    GOOUT
FFFFFFFFFFFFF0C8        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFDFC4        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFF0CC        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFDFC8        31FFF393                        call    GOOUT
FFFFFFFFFFFFF0D0        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFDFCC        1280911B                        cmpui   r1,r8,#BUFFER   ; any char.'s left?
FFFFFFFFFFFFF0D4        1280911B                        cmpui   r1,r8,#BUFFER   ; any char.'s left?
FFFFFFFFFFFFDFD0        BE107DC2                        ble             r1,r0,GL1               ; if not
FFFFFFFFFFFFF0D8        BE107DC2                        ble             r1,r0,GL1               ; if not
FFFFFFFFFFFFDFD4        E0400008                        setlo   r1,#CTRLH       ; if so, finish the BS-space-BS sequence
FFFFFFFFFFFFF0DC        E0400008                        setlo   r1,#CTRLH       ; if so, finish the BS-space-BS sequence
FFFFFFFFFFFFDFD8        31FFF393                        call    GOOUT
FFFFFFFFFFFFF0E0        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFDFDC        0C840001                        sub             r8,r8,#1        ; decrement the text pointer
FFFFFFFFFFFFF0E4        0C840001                        sub             r8,r8,#1        ; decrement the text pointer
FFFFFFFFFFFFDFE0        BE007D4A                        bra             GL1                     ; back for more
FFFFFFFFFFFFF0E8        BE007D4A                        bra             GL1                     ; back for more
FFFFFFFFFFFFDFE4                                 GL4:
FFFFFFFFFFFFF0EC                                 GL4:
FFFFFFFFFFFFDFE4        04800409                        or              r1,r8,r0                ; delete the whole line
FFFFFFFFFFFFF0EC        04800409                        or              r1,r8,r0                ; delete the whole line
FFFFFFFFFFFFDFE8        0E12911B                        subui   r5,r1,#BUFFER   ; figure out how many backspaces we need
FFFFFFFFFFFFF0F0        0E12911B                        subui   r5,r1,#BUFFER   ; figure out how many backspaces we need
FFFFFFFFFFFFDFEC        BE500108                        beq             r5,r0,GL6               ; if none needed, brnch
FFFFFFFFFFFFF0F4        BE500108                        beq             r5,r0,GL6               ; if none needed, brnch
FFFFFFFFFFFFDFF0                                 GL5:
FFFFFFFFFFFFF0F8                                 GL5:
FFFFFFFFFFFFDFF0        E0400008                        setlo   r1,#CTRLH       ; and display BS-space-BS sequences
FFFFFFFFFFFFF0F8        E0400008                        setlo   r1,#CTRLH       ; and display BS-space-BS sequences
FFFFFFFFFFFFDFF4        31FFF393                        call    GOOUT
FFFFFFFFFFFFF0FC        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFDFF8        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFF100        E0400020                        setlo   r1,#' '
FFFFFFFFFFFFDFFC        31FFF393                        call    GOOUT
FFFFFFFFFFFFF104        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE000        E0400008                        setlo   r1,#CTRLH
FFFFFFFFFFFFF108        E0400008                        setlo   r1,#CTRLH
FFFFFFFFFFFFE004        31FFF393                        call    GOOUT
FFFFFFFFFFFFF10C        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE008        BE02FF4F                        loop    r5,GL5
FFFFFFFFFFFFF110        BE02FF4F                        loop    r5,GL5
FFFFFFFFFFFFE00C                                 GL6:
FFFFFFFFFFFFF114                                 GL6:
FFFFFFFFFFFFE00C        9A04111B                        lea             r8,BUFFER       ; reinitialize the text pointer
FFFFFFFFFFFFF114        9A04111B                        lea             r8,BUFFER       ; reinitialize the text pointer
FFFFFFFFFFFFE010        BE007BCA                        bra             GL1                     ; and go back for more
FFFFFFFFFFFFF118        BE007BCA                        bra             GL1                     ; and go back for more
FFFFFFFFFFFFE014                                 GL7:
FFFFFFFFFFFFF11C                                 GL7:
FFFFFFFFFFFFE014        E0400000                        setlo   r1,#0           ; turn off cursor flash
FFFFFFFFFFFFF11C        E0400000                        setlo   r1,#0           ; turn off cursor flash
FFFFFFFFFFFFE018        60009046                        sb              r1,cursFlash
FFFFFFFFFFFFF120        60009052                        sb              r1,cursFlash
FFFFFFFFFFFFE01C        E040000A                        setlo   r1,#LF          ; echo a LF for the CR
FFFFFFFFFFFFF124        E040000A                        setlo   r1,#LF          ; echo a LF for the CR
FFFFFFFFFFFFE020        31FFF393                        call    GOOUT
FFFFFFFFFFFFF128        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE024        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFF12C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFE028        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFF130        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFE02C        37EF8010                        ret             #16
FFFFFFFFFFFFF134        37EF8010                        ret             #16
 
 
 
 
                                                 ; 'FNDLN' finds a line with a given line no. (in r1) in the
                                                 ; 'FNDLN' finds a line with a given line no. (in r1) in the
                                                 ; text save area.  r9 is used as the text pointer. If the line
                                                 ; text save area.  r9 is used as the text pointer. If the line
                                                 ; is found, r9 will point to the beginning of that line
                                                 ; is found, r9 will point to the beginning of that line
Line 4748... Line 6327...
                                                 ; return Z=1 if line is found, r9 = pointer to line
                                                 ; return Z=1 if line is found, r9 = pointer to line
                                                 ;
                                                 ;
                                                 ; Parameters
                                                 ; Parameters
                                                 ;      r1 = line number to find
                                                 ;      r1 = line number to find
                                                 ;
                                                 ;
FFFFFFFFFFFFE030                                 FNDLN:
FFFFFFFFFFFFF138                                 FNDLN:
FFFFFFFFFFFFE030        AC1003FF                        bleui   r1,#0xFFFF,fl1  ; line no. must be < 65535
FFFFFFFFFFFFF138        AC1003FF                        bleui   r1,#0xFFFF,fl1  ; line no. must be < 65535
FFFFFFFFFFFFE034        9A00E694                        lea             r1,msgLineRange
FFFFFFFFFFFFF13C        9A00F78C                        lea             r1,msgLineRange
FFFFFFFFFFFFE038        BE00774A                        bra             ERROR
FFFFFFFFFFFFF140        BE00774A                        bra             ERROR
FFFFFFFFFFFFE03C                                 fl1:
FFFFFFFFFFFFF144                                 fl1:
FFFFFFFFFFFFE03C        4604CE60                        lw              r9,TXTBGN       ; init. the text save pointer
FFFFFFFFFFFFF144        4604DF68                        lw              r9,TXTBGN       ; init. the text save pointer
 
 
FFFFFFFFFFFFE040                                 FNDLNP:
FFFFFFFFFFFFF148                                 FNDLNP:
FFFFFFFFFFFFE040        460510D0                        lw              r10,TXTUNF      ; check if we passed the end
FFFFFFFFFFFFF148        460510D0                        lw              r10,TXTUNF      ; check if we passed the end
FFFFFFFFFFFFE044        0EA50001                        subui   r10,r10,#1
FFFFFFFFFFFFF14C        0EA50001                        subui   r10,r10,#1
FFFFFFFFFFFFE048        BE950127                        bgtu    r9,r10,FNDRET1          ; if so, return with r9=0,r1=0
FFFFFFFFFFFFF150        BE950127                        bgtu    r9,r10,FNDRET1          ; if so, return with r9=0,r1=0
FFFFFFFFFFFFE04C        4A918000                        lbu             r3,[r9]         ; get low order byte of line number
FFFFFFFFFFFFF154        4A918000                        lbu             r3,[r9]         ; get low order byte of line number
FFFFFFFFFFFFE050        4A910001                        lbu             r2,1[r9]        ; get high order byte
FFFFFFFFFFFFF158        4A910001                        lbu             r2,1[r9]        ; get high order byte
FFFFFFFFFFFFE054        06211000                        shli    r2,r2,#8
FFFFFFFFFFFFF15C        06211000                        shli    r2,r2,#8
FFFFFFFFFFFFE058        04218809                        or              r2,r2,r3        ; build whole line number
FFFFFFFFFFFFF160        04218809                        or              r2,r2,r3        ; build whole line number
FFFFFFFFFFFFE05C        BE110127                        bgtu    r1,r2,FNDNXT    ; is this the line we want? no, not there yet
FFFFFFFFFFFFF164        BE110127                        bgtu    r1,r2,FNDNXT    ; is this the line we want? no, not there yet
FFFFFFFFFFFFE060        BE1100C8                        beq             r1,r2,FNDRET2
FFFFFFFFFFFFF168        BE1100C8                        beq             r1,r2,FNDRET2
FFFFFFFFFFFFE064                                 FNDRET:
FFFFFFFFFFFFF16C                                 FNDRET:
FFFFFFFFFFFFE064        0410840A                        xor             r1,r1,r1        ; line not found, but r9=next line pointer
FFFFFFFFFFFFF16C        0410840A                        xor             r1,r1,r1        ; line not found, but r9=next line pointer
FFFFFFFFFFFFE068        37EF8000                        ret                     ; return the cond. codes
FFFFFFFFFFFFF170        37EF8000                        ret                     ; return the cond. codes
FFFFFFFFFFFFE06C                                 FNDRET1:
FFFFFFFFFFFFF174                                 FNDRET1:
FFFFFFFFFFFFE06C        0494A40A                        xor             r9,r9,r9        ; no higher line
FFFFFFFFFFFFF174        0494A40A                        xor             r9,r9,r9        ; no higher line
FFFFFFFFFFFFE070        0410840A                        xor             r1,r1,r1        ; line not found
FFFFFFFFFFFFF178        0410840A                        xor             r1,r1,r1        ; line not found
FFFFFFFFFFFFE074        37EF8000                        ret
FFFFFFFFFFFFF17C        37EF8000                        ret
FFFFFFFFFFFFE078                                 FNDRET2:
FFFFFFFFFFFFF180                                 FNDRET2:
FFFFFFFFFFFFE078        E0400001                        setlo   r1,#1           ; line found
FFFFFFFFFFFFF180        E0400001                        setlo   r1,#1           ; line found
FFFFFFFFFFFFE07C        37EF8000                        ret
FFFFFFFFFFFFF184        37EF8000                        ret
 
 
FFFFFFFFFFFFE080                                 FNDNXT:
FFFFFFFFFFFFF188                                 FNDNXT:
FFFFFFFFFFFFE080        0A948002                        addui   r9,r9,#2        ; find the next line
FFFFFFFFFFFFF188        0A948002                        addui   r9,r9,#2        ; find the next line
 
 
FFFFFFFFFFFFE084                                 FNDSKP:
FFFFFFFFFFFFF18C                                 FNDSKP:
FFFFFFFFFFFFE084        4A910000                        lbu             r2,[r9]
FFFFFFFFFFFFF18C        4A910000                        lbu             r2,[r9]
FFFFFFFFFFFFE088        0A948001                        addui   r9,r9,#1
FFFFFFFFFFFFF190        0A948001                        addui   r9,r9,#1
FFFFFFFFFFFFE08C        B22FFE0D                        bnei    r2,#CR,FNDSKP           ; try to find a CR, keep looking
FFFFFFFFFFFFF194        B22FFE0D                        bnei    r2,#CR,FNDSKP           ; try to find a CR, keep looking
FFFFFFFFFFFFE090        BE007D8A                        bra             FNDLNP          ; check if end of text
FFFFFFFFFFFFF198        BE007D8A                        bra             FNDLNP          ; check if end of text
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ; 'MVUP' moves a block up from where r1 points to where r2 points
                                                 ; 'MVUP' moves a block up from where r1 points to where r2 points
                                                 ; until r1=r3
                                                 ; until r1=r3
                                                 ;
                                                 ;
FFFFFFFFFFFFE094                                 MVUP1:
FFFFFFFFFFFFF19C                                 MVUP1:
FFFFFFFFFFFFE094        40120000                        lb              r4,[r1]
FFFFFFFFFFFFF19C        40120000                        lb              r4,[r1]
FFFFFFFFFFFFE098        60220000                        sb              r4,[r2]
FFFFFFFFFFFFF1A0        60220000                        sb              r4,[r2]
FFFFFFFFFFFFE09C        08108001                        add             r1,r1,#1
FFFFFFFFFFFFF1A4        08108001                        add             r1,r1,#1
FFFFFFFFFFFFE0A0        08210001                        add             r2,r2,#1
FFFFFFFFFFFFF1A8        08210001                        add             r2,r2,#1
FFFFFFFFFFFFE0A4                                 MVUP:
FFFFFFFFFFFFF1AC                                 MVUP:
FFFFFFFFFFFFE0A4        BE11FF89                        bne             r1,r3,MVUP1
FFFFFFFFFFFFF1AC        BE11FF89                        bne             r1,r3,MVUP1
FFFFFFFFFFFFE0A8                                 MVRET:
FFFFFFFFFFFFF1B0                                 MVRET:
FFFFFFFFFFFFE0A8        37EF8000                        ret
FFFFFFFFFFFFF1B0        37EF8000                        ret
 
 
 
 
                                                 ; 'MVDOWN' moves a block down from where r1 points to where r2
                                                 ; 'MVDOWN' moves a block down from where r1 points to where r2
                                                 ; points until r1=r3
                                                 ; points until r1=r3
                                                 ;
                                                 ;
FFFFFFFFFFFFE0AC                                 MVDOWN1:
FFFFFFFFFFFFF1B4                                 MVDOWN1:
FFFFFFFFFFFFE0AC        0C108001                        sub             r1,r1,#1
FFFFFFFFFFFFF1B4        0C108001                        sub             r1,r1,#1
FFFFFFFFFFFFE0B0        0C210001                        sub             r2,r2,#1
FFFFFFFFFFFFF1B8        0C210001                        sub             r2,r2,#1
FFFFFFFFFFFFE0B4        40120000                        lb              r4,[r1]
FFFFFFFFFFFFF1BC        40120000                        lb              r4,[r1]
FFFFFFFFFFFFE0B8        60220000                        sb              r4,[r2]
FFFFFFFFFFFFF1C0        60220000                        sb              r4,[r2]
FFFFFFFFFFFFE0BC                                 MVDOWN:
FFFFFFFFFFFFF1C4                                 MVDOWN:
FFFFFFFFFFFFE0BC        BE11FF89                        bne             r1,r3,MVDOWN1
FFFFFFFFFFFFF1C4        BE11FF89                        bne             r1,r3,MVDOWN1
FFFFFFFFFFFFE0C0        37EF8000                        ret
FFFFFFFFFFFFF1C8        37EF8000                        ret
 
 
 
 
                                                 ; 'POPA' restores the 'FOR' loop variable save area from the stack
                                                 ; 'POPA' restores the 'FOR' loop variable save area from the stack
                                                 ;
                                                 ;
                                                 ; 'PUSHA' stacks for 'FOR' loop variable save area onto the stack
                                                 ; 'PUSHA' stacks for 'FOR' loop variable save area onto the stack
                                                 ;
                                                 ;
                                                 ; Note: a single zero word is stored on the stack in the
                                                 ; Note: a single zero word is stored on the stack in the
                                                 ; case that no FOR loops need to be saved. This needs to be
                                                 ; case that no FOR loops need to be saved. This needs to be
                                                 ; done because PUSHA / POPA is called all the time.
                                                 ; done because PUSHA / POPA is called all the time.
 
 
FFFFFFFFFFFFE0C4                                 POPA:
FFFFFFFFFFFFF1CC                                 POPA:
FFFFFFFFFFFFE0C4        47E08000                        lw              r1,[sp]         ; restore LOPVAR, but zero means no more
FFFFFFFFFFFFF1CC        47E08000                        lw              r1,[sp]         ; restore LOPVAR, but zero means no more
FFFFFFFFFFFFE0C8        660090A8                        sw              r1,LOPVAR
FFFFFFFFFFFFF1D0        660090A8                        sw              r1,LOPVAR
FFFFFFFFFFFFE0CC        BE100148                        beq             r1,r0,PP1
FFFFFFFFFFFFF1D4        BE100148                        beq             r1,r0,PP1
FFFFFFFFFFFFE0D0        47E08020                        lw              r1,32[sp]       ; if not zero, restore the rest
FFFFFFFFFFFFF1D8        47E08020                        lw              r1,32[sp]       ; if not zero, restore the rest
FFFFFFFFFFFFE0D4        660090C8                        sw              r1,LOPPT
FFFFFFFFFFFFF1DC        660090C8                        sw              r1,LOPPT
FFFFFFFFFFFFE0D8        47E08018                        lw              r1,24[sp]
FFFFFFFFFFFFF1E0        47E08018                        lw              r1,24[sp]
FFFFFFFFFFFFE0DC        660090C0                        sw              r1,LOPLN
FFFFFFFFFFFFF1E4        660090C0                        sw              r1,LOPLN
FFFFFFFFFFFFE0E0        47E08010                        lw              r1,16[sp]
FFFFFFFFFFFFF1E8        47E08010                        lw              r1,16[sp]
FFFFFFFFFFFFE0E4        660090B8                        sw              r1,LOPLMT
FFFFFFFFFFFFF1EC        660090B8                        sw              r1,LOPLMT
FFFFFFFFFFFFE0E8        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFF1F0        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFE0EC        660090B0                        sw              r1,LOPINC
FFFFFFFFFFFFF1F4        660090B0                        sw              r1,LOPINC
FFFFFFFFFFFFE0F0        37EF8028                        ret             #40
FFFFFFFFFFFFF1F8        37EF8028                        ret             #40
FFFFFFFFFFFFE0F4                                 PP1:
FFFFFFFFFFFFF1FC                                 PP1:
FFFFFFFFFFFFE0F4        37EF8008                        ret             #8
FFFFFFFFFFFFF1FC        37EF8008                        ret             #8
 
 
 
 
FFFFFFFFFFFFE0F8                                 PUSHA:
FFFFFFFFFFFFF200                                 PUSHA:
FFFFFFFFFFFFE0F8        460090F8                        lw              r1,STKBOT       ; Are we running out of stack room?
FFFFFFFFFFFFF200        460090F8                        lw              r1,STKBOT       ; Are we running out of stack room?
FFFFFFFFFFFFE0FC        0A108028                        addui   r1,r1,#40       ; we might need this many bytes
FFFFFFFFFFFFF204        0A108028                        addui   r1,r1,#40       ; we might need this many bytes
FFFFFFFFFFFFE100        BFE0F0A4                        bltu    sp,r1,QSORRY    ; out of stack space
FFFFFFFFFFFFF208        BFE0F0A4                        bltu    sp,r1,QSORRY    ; out of stack space
FFFFFFFFFFFFE104        460090A8                        lw              r1,LOPVAR       ; save loop variables
FFFFFFFFFFFFF20C        460090A8                        lw              r1,LOPVAR       ; save loop variables
FFFFFFFFFFFFE108        BE100188                        beq             r1,r0,PU1       ; if LOPVAR is zero, that's all
FFFFFFFFFFFFF210        BE100188                        beq             r1,r0,PU1       ; if LOPVAR is zero, that's all
FFFFFFFFFFFFE10C        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFF214        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFE110        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFF218        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFE114        460090C8                        lw              r1,LOPPT
FFFFFFFFFFFFF21C        460090C8                        lw              r1,LOPPT
FFFFFFFFFFFFE118        67E08020                        sw              r1,32[sp]       ; else save all the others
FFFFFFFFFFFFF220        67E08020                        sw              r1,32[sp]       ; else save all the others
FFFFFFFFFFFFE11C        460090C0                        lw              r1,LOPLN
FFFFFFFFFFFFF224        460090C0                        lw              r1,LOPLN
FFFFFFFFFFFFE120        67E08018                        sw              r1,24[sp]
FFFFFFFFFFFFF228        67E08018                        sw              r1,24[sp]
FFFFFFFFFFFFE124        460090B8                        lw              r1,LOPLMT
FFFFFFFFFFFFF22C        460090B8                        lw              r1,LOPLMT
FFFFFFFFFFFFE128        67E08010                        sw              r1,16[sp]
FFFFFFFFFFFFF230        67E08010                        sw              r1,16[sp]
FFFFFFFFFFFFE12C        460090B0                        lw              r1,LOPINC
FFFFFFFFFFFFF234        460090B0                        lw              r1,LOPINC
FFFFFFFFFFFFE130        67E08008                        sw              r1,8[sp]
FFFFFFFFFFFFF238        67E08008                        sw              r1,8[sp]
FFFFFFFFFFFFE134        37EF8000                        ret
FFFFFFFFFFFFF23C        37EF8000                        ret
FFFFFFFFFFFFE138                                 PU1:
FFFFFFFFFFFFF240                                 PU1:
FFFFFFFFFFFFE138        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFF240        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE13C        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFF244        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFE140        37EF8000                        ret
FFFFFFFFFFFFF248        37EF8000                        ret
 
 
 
 
                                                 ;******************************************************************
                                                 ;******************************************************************
                                                 ;
                                                 ;
                                                 ; *** PRTSTG *** QTSTG *** PRTNUM *** PRTLN ***
                                                 ; *** PRTSTG *** QTSTG *** PRTNUM *** PRTLN ***
Line 4892... Line 6471...
 
 
                                                 ; r1 = pointer to string
                                                 ; r1 = pointer to string
                                                 ; r2 = stop character
                                                 ; r2 = stop character
                                                 ; return r1 = pointer to end of line + 1
                                                 ; return r1 = pointer to end of line + 1
 
 
FFFFFFFFFFFFE144                                 PRTSTG:
FFFFFFFFFFFFF24C                                 PRTSTG:
FFFFFFFFFFFFE144        0DEF0020                     sub     sp,sp,#32
FFFFFFFFFFFFF24C        0FEF0020                     subui   sp,sp,#32
FFFFFFFFFFFFE148        67E28000                     sw         r5,[sp]
FFFFFFFFFFFFF250        67E28000                     sw         r5,[sp]
FFFFFFFFFFFFE14C        67E28008                     sw         r5,8[sp]
FFFFFFFFFFFFF254        67E28008                     sw         r5,8[sp]
FFFFFFFFFFFFE150        67E38010                     sw         r7,16[sp]
FFFFFFFFFFFFF258        67E38010                     sw         r7,16[sp]
FFFFFFFFFFFFE154        67EF8018                     sw         lr,24[sp]
FFFFFFFFFFFFF25C        67EF8018                     sw         lr,24[sp]
FFFFFFFFFFFFE158        02128009                     mov     r5,r1       ; r5 = pointer
FFFFFFFFFFFFF260        02128009                     mov     r5,r1       ; r5 = pointer
FFFFFFFFFFFFE15C        02230009                     mov     r6,r2       ; r6 = stop char
FFFFFFFFFFFFF264        02230009                     mov     r6,r2       ; r6 = stop char
FFFFFFFFFFFFE160                                 PS1:
FFFFFFFFFFFFF268                                 PS1:
FFFFFFFFFFFFE160        4A538000                     lbu     r7,[r5]     ; get a text character
FFFFFFFFFFFFF268        4A538000                     lbu     r7,[r5]     ; get a text character
FFFFFFFFFFFFE164        0A528001                     addui   r5,r5,#1
FFFFFFFFFFFFF26C        0A528001                     addui   r5,r5,#1
FFFFFFFFFFFFE168        BE7300C8                        beq         r7,r6,PRTRET                ; same as stop character? if so, return
FFFFFFFFFFFFF270        BE7300C8                        beq         r7,r6,PRTRET                ; same as stop character? if so, return
FFFFFFFFFFFFE16C        02708009                        mov     r1,r7
FFFFFFFFFFFFF274        02708009                        mov     r1,r7
FFFFFFFFFFFFE170        31FFF393                        call    GOOUT           ; display the char.
FFFFFFFFFFFFF278        31FFF7D5                        call    GOOUT           ; display the char.
FFFFFFFFFFFFE174        B27FFB0D                        bnei    r7,#CR,PS1  ; is it a C.R.? no, go back for more
FFFFFFFFFFFFF27C        B27FFB0D                        bnei    r7,#CR,PS1  ; is it a C.R.? no, go back for more
FFFFFFFFFFFFE178        E040000A                        setlo   r1,#LF      ; yes, add a L.F.
FFFFFFFFFFFFF280        E040000A                        setlo   r1,#LF      ; yes, add a L.F.
FFFFFFFFFFFFE17C        31FFF393                        call    GOOUT
FFFFFFFFFFFFF284        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE180                                 PRTRET:
FFFFFFFFFFFFF288                                 PRTRET:
FFFFFFFFFFFFE180        02710009                     mov     r2,r7       ; return r2 = stop char
FFFFFFFFFFFFF288        02710009                     mov     r2,r7       ; return r2 = stop char
FFFFFFFFFFFFE184        02508009                        mov             r1,r5           ; return r1 = line pointer
FFFFFFFFFFFFF28C        02508009                        mov             r1,r5           ; return r1 = line pointer
FFFFFFFFFFFFE188        47EF8018                     lw         lr,24[sp]
FFFFFFFFFFFFF290        47EF8018                     lw         lr,24[sp]
FFFFFFFFFFFFE18C        47E38010                     lw         r7,16[sp]
FFFFFFFFFFFFF294        47E38010                     lw         r7,16[sp]
FFFFFFFFFFFFE190        47E28008                     lw         r5,8[sp]
FFFFFFFFFFFFF298        47E28008                     lw         r5,8[sp]
FFFFFFFFFFFFE194        47E28000                     lw         r5,[sp]
FFFFFFFFFFFFF29C        47E28000                     lw         r5,[sp]
FFFFFFFFFFFFE198        37EF8020                     ret                #32             ; then return
FFFFFFFFFFFFF2A0        37EF8020                     ret                #32             ; then return
 
 
 
 
FFFFFFFFFFFFE19C                                 QTSTG:
FFFFFFFFFFFFF2A4                                 QTSTG:
FFFFFFFFFFFFE19C        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFF2A4        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE1A0        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFF2A8        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFE1A4        E0C00022                        setlo   r3,#'"'
FFFFFFFFFFFFF2AC        E0C00022                        setlo   r3,#'"'
FFFFFFFFFFFFE1A8        E13FE1D0                        setlo   r4,#
FFFFFFFFFFFFF2B0        9A0272D4                        lea             r4,QT3
FFFFFFFFFFFFE1AC        F10FFFFF                        sethi   r4,#>QT3
FFFFFFFFFFFFF2B4        31FFFD30                        call    TSTC            ; *** QTSTG ***
FFFFFFFFFFFFE1B0        31FFF8F1                        call    TSTC            ; *** QTSTG ***
FFFFFFFFFFFFF2B8        E0800022                        setlo   r2,#'"'         ; it is a "
FFFFFFFFFFFFE1B4        E0800022                        setlo   r2,#'"'         ; it is a "
FFFFFFFFFFFFF2BC                                 QT1:
FFFFFFFFFFFFE1B8                                 QT1:
FFFFFFFFFFFFF2BC        04800409                        or              r1,r8,r0
FFFFFFFFFFFFE1B8        04800409                        or              r1,r8,r0
FFFFFFFFFFFFF2C0        31FFFC93                        call    PRTSTG          ; print until another
FFFFFFFFFFFFE1BC        31FFF851                        call    PRTSTG          ; print until another
FFFFFFFFFFFFF2C4        04102009                        lw              r8,r1
FFFFFFFFFFFFE1C0        04102009                        lw              r8,r1
FFFFFFFFFFFFF2C8        B2200D0A                        bne             r2,#LF,QT2      ; was last one a CR?
FFFFFFFFFFFFE1C4        B2200F0A                        bne             r2,#LF,QT2      ; was last one a CR?
FFFFFFFFFFFFF2CC        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFE1C8        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFF2D0        BE00072A                        bra             RUNNXL          ; if so, run next line
FFFFFFFFFFFFE1CC        BE00070A                        bra             RUNNXL          ; if so, run next line
FFFFFFFFFFFFF2D4                                 QT3:
FFFFFFFFFFFFE1D0                                 QT3:
FFFFFFFFFFFFF2D4        E0C00027                        setlo   r3,#''''
FFFFFFFFFFFFE1D0        E0C00027                        setlo   r3,#''''
FFFFFFFFFFFFF2D8        9A0272E8                        lea             r4,QT4
FFFFFFFFFFFFE1D4        E13FE1E8                        setlo   r4,#
FFFFFFFFFFFFF2DC        31FFFD30                        call    TSTC            ; is it a single quote?
FFFFFFFFFFFFE1D8        F10FFFFF                        sethi   r4,#>QT4
FFFFFFFFFFFFF2E0        E0800027                        setlo   r2,#''''        ; if so, do same as above
FFFFFFFFFFFFE1DC        31FFF8F1                        call    TSTC            ; is it a single quote?
FFFFFFFFFFFFF2E4        BE007ECA                        bra             QT1
FFFFFFFFFFFFE1E0        E0800027                        setlo   r2,#''''        ; if so, do same as above
FFFFFFFFFFFFF2E8                                 QT4:
FFFFFFFFFFFFE1E4        BE007EAA                        bra             QT1
FFFFFFFFFFFFF2E8        E0C0005F                        setlo   r3,#'_'
FFFFFFFFFFFFE1E8                                 QT4:
FFFFFFFFFFFFF2EC        9A027308                        lea             r4,QT5
FFFFFFFFFFFFE1E8        E0C0005F                        setlo   r3,#'_'
FFFFFFFFFFFFF2F0        31FFFD30                        call    TSTC            ; is it an underline?
FFFFFFFFFFFFE1EC        E13FE20C                        setlo   r4,#
FFFFFFFFFFFFF2F4        E040000D                        setlo   r1,#CR          ; if so, output a CR without LF
FFFFFFFFFFFFE1F0        F10FFFFF                        sethi   r4,#>QT5
FFFFFFFFFFFFF2F8        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE1F4        31FFF8F1                        call    TSTC            ; is it an underline?
FFFFFFFFFFFFF2FC                                 QT2:
FFFFFFFFFFFFE1F8        E040000D                        setlo   r1,#CR          ; if so, output a CR without LF
FFFFFFFFFFFFF2FC        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFE1FC        31FFF393                        call    GOOUT
FFFFFFFFFFFFF300        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFE200                                 QT2:
FFFFFFFFFFFFF304        35F00004                        jal             r0,4[lr]                ; skip over next i-word when returning
FFFFFFFFFFFFE200        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFF308                                 QT5:                                           ; not " ' or _
FFFFFFFFFFFFE204        0BEF0008                        addui   sp,sp,#8
FFFFFFFFFFFFF308        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFE208        35F00004                        jal             r0,4[lr]                ; skip over next i-word when returning
FFFFFFFFFFFFF30C        37EF8008                        ret             #8
FFFFFFFFFFFFE20C                                 QT5:                                           ; not " ' or _
 
FFFFFFFFFFFFE20C        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFE210        37EF8008                        ret             #8
 
 
 
 
 
                                                 ; Output a CR LF sequence
                                                 ; Output a CR LF sequence
                                                 ;
                                                 ;
FFFFFFFFFFFFE214                                 prCRLF:
FFFFFFFFFFFFF310                                 prCRLF:
FFFFFFFFFFFFE214        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFF310        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE218        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFF314        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFE21C        E040000D                        setlo   r1,#CR
FFFFFFFFFFFFF318        E040000D                        setlo   r1,#CR
FFFFFFFFFFFFE220        31FFF393                        call    GOOUT
FFFFFFFFFFFFF31C        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE224        E040000A                        setlo   r1,#LF
FFFFFFFFFFFFF320        E040000A                        setlo   r1,#LF
FFFFFFFFFFFFE228        31FFF393                        call    GOOUT
FFFFFFFFFFFFF324        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE22C        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFF328        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFE230        37EF8008                        ret             #8
FFFFFFFFFFFFF32C        37EF8008                        ret             #8
 
 
 
 
                                                 ; r1 = number to print
                                                 ; r1 = number to print
                                                 ; r2 = number of digits
                                                 ; r2 = number of digits
                                                 ; Register Usage
                                                 ; Register Usage
                                                 ;      r5 = number of padding spaces
                                                 ;      r5 = number of padding spaces
FFFFFFFFFFFFE234                                 PRTNUM:
FFFFFFFFFFFFF330                                 PRTNUM:
FFFFFFFFFFFFE234        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFF330        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFE238        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFF334        67E18000                        sw              r3,[sp]
FFFFFFFFFFFFE23C        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFF338        67E28008                        sw              r5,8[sp]
FFFFFFFFFFFFE240        67E30010                        sw              r6,16[sp]
FFFFFFFFFFFFF33C        67E30010                        sw              r6,16[sp]
FFFFFFFFFFFFE244        67E38018                        sw              r7,24[sp]
FFFFFFFFFFFFF340        67E38018                        sw              r7,24[sp]
FFFFFFFFFFFFE248        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFF344        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFE24C        16039100                        ori             r7,r0,#NUMWKA   ; r7 = pointer to numeric work area
FFFFFFFFFFFFF348        9A039100                        lea             r7,NUMWKA       ; r7 = pointer to numeric work area
FFFFFFFFFFFFE250        02130009                        mov             r6,r1           ; save number for later
FFFFFFFFFFFFF34C        02130009                        mov             r6,r1           ; save number for later
FFFFFFFFFFFFE254        02228009                        mov             r5,r2           ; r5 = min number of chars
FFFFFFFFFFFFF350        02228009                        mov             r5,r2           ; r5 = min number of chars
FFFFFFFFFFFFE258        BE100063                        bgt             r1,r0,PN1       ; is it negative? if not
FFFFFFFFFFFFF354        BE100063                        bgt             r1,r0,PN2       ; is it negative? if not
FFFFFFFFFFFFE25C        02108006                        neg             r1,r1           ; else make it positive
FFFFFFFFFFFFF358        02108006                        neg             r1,r1           ; else make it positive
FFFFFFFFFFFFE260        0E528001                        subui   r5,r5,#1        ; one less for width count
FFFFFFFFFFFFF35C        0E528001                        subui   r5,r5,#1        ; one less for width count
FFFFFFFFFFFFE264                                 PN1:
FFFFFFFFFFFFF360                                 PN2:
FFFFFFFFFFFFE264        1601800A                        lw              r3,#10
FFFFFFFFFFFFF360        1601800A                        lw              r3,#10
FFFFFFFFFFFFE268        0411881C                        mod             r2,r1,r3        ; r2 = r1 mod 10
FFFFFFFFFFFFF364                                 PN1:
FFFFFFFFFFFFE26C        1C10800A                        divui   r1,r1,#10       ; r1 /= 10 divide by 10
FFFFFFFFFFFFF364        0411881C                        modu    r2,r1,r3        ; r2 = r1 mod 10
FFFFFFFFFFFFE270        0A210030                        addui   r2,r2,#'0'      ; convert remainder to ascii
FFFFFFFFFFFFF368        1E10800A                        divui   r1,r1,#10       ; r1 /= 10 divide by 10
FFFFFFFFFFFFE274        60710000                        sb              r2,[r7]         ; and store in buffer
FFFFFFFFFFFFF36C        0A210030                        addui   r2,r2,#'0'      ; convert remainder to ascii
FFFFFFFFFFFFE278        0A738001                        addui   r7,r7,#1
FFFFFFFFFFFFF370        60710000                        sb              r2,[r7]         ; and store in buffer
FFFFFFFFFFFFE27C        0E528001                        subui   r5,r5,#1        ; decrement width
FFFFFFFFFFFFF374        0A738001                        addui   r7,r7,#1
FFFFFFFFFFFFE280        BE107F29                        bne             r1,r0,PN1
FFFFFFFFFFFFF378        0E528001                        subui   r5,r5,#1        ; decrement width
FFFFFFFFFFFFE284                                 PN6:
FFFFFFFFFFFFF37C        BE107F49                        bne             r1,r0,PN1
FFFFFFFFFFFFE284        BE500082                        ble             r5,r0,PN4       ; test pad count, skip padding if not needed
FFFFFFFFFFFFF380                                 PN6:
FFFFFFFFFFFFE288                                 PN3:
FFFFFFFFFFFFF380        BE500082                        ble             r5,r0,PN4       ; test pad count, skip padding if not needed
FFFFFFFFFFFFE288        E0400020                        setlo   r1,#' '         ; display the required leading spaces
FFFFFFFFFFFFF384                                 PN3:
FFFFFFFFFFFFE28C        31FFF393                        call    GOOUT
FFFFFFFFFFFFF384        E0400020                        setlo   r1,#' '         ; display the required leading spaces
FFFFFFFFFFFFE290        BE02FFCF                        loop    r5,PN3
FFFFFFFFFFFFF388        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE294                                 PN4:
FFFFFFFFFFFFF38C        BE02FFCF                        loop    r5,PN3
FFFFFFFFFFFFE294        BE600063                        bgt             r6,r0,PN5       ; is number negative?
FFFFFFFFFFFFF390                                 PN4:
FFFFFFFFFFFFE298        E040002D                        setlo   r1,#'-'         ; if so, display the sign
FFFFFFFFFFFFF390        BE600061                        bge             r6,r0,PN5       ; is number negative?
FFFFFFFFFFFFE29C        31FFF393                        call    GOOUT
FFFFFFFFFFFFF394        E040002D                        setlo   r1,#'-'         ; if so, display the sign
FFFFFFFFFFFFE2A0                                 PN5:
FFFFFFFFFFFFF398        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE2A0        0E738001                        subui   r7,r7,#1
FFFFFFFFFFFFF39C                                 PN5:
FFFFFFFFFFFFE2A4        40708000                        lb              r1,[r7]         ; now unstack the digits and display
FFFFFFFFFFFFF39C        0E738001                        subui   r7,r7,#1
FFFFFFFFFFFFE2A8        31FFF393                        call    GOOUT
FFFFFFFFFFFFF3A0        40708000                        lb              r1,[r7]         ; now unstack the digits and display
FFFFFFFFFFFFE2AC        12709100                        cmpui   r1,r7,#NUMWKA
FFFFFFFFFFFFF3A4        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE2B0        BE107F87                        bgtu    r1,r0,PN5
FFFFFFFFFFFFF3A8        12709100                        cmpui   r1,r7,#NUMWKA
FFFFFFFFFFFFE2B4                                 PNRET:
FFFFFFFFFFFFF3AC        BE107F87                        bgtu    r1,r0,PN5
FFFFFFFFFFFFE2B4        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFF3B0                                 PNRET:
FFFFFFFFFFFFE2B8        47E38018                        lw              r7,24[sp]
FFFFFFFFFFFFF3B0        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFE2BC        47E30010                        lw              r6,16[sp]
FFFFFFFFFFFFF3B4        47E38018                        lw              r7,24[sp]
FFFFFFFFFFFFE2C0        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFF3B8        47E30010                        lw              r6,16[sp]
FFFFFFFFFFFFE2C4        47E18000                        lw              r3,[sp]
FFFFFFFFFFFFF3BC        47E28008                        lw              r5,8[sp]
FFFFFFFFFFFFE2C8        37EF8028                        ret             #40
FFFFFFFFFFFFF3C0        47E18000                        lw              r3,[sp]
 
FFFFFFFFFFFFF3C4        37EF8028                        ret             #40
 
 
 
 
                                                 ; r1 = number to print
                                                 ; r1 = number to print
                                                 ; r2 = number of digits
                                                 ; r2 = number of digits
FFFFFFFFFFFFE2CC                                 PRTHEXNUM:
FFFFFFFFFFFFF3C8                                 PRTHEXNUM:
FFFFFFFFFFFFE2CC        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFF3C8        0FEF0028                        subui   sp,sp,#40
FFFFFFFFFFFFE2D0        67E28000                        sw              r5,[sp]
FFFFFFFFFFFFF3CC        67E28000                        sw              r5,[sp]
FFFFFFFFFFFFE2D4        67E30008                        sw              r6,8[sp]
FFFFFFFFFFFFF3D0        67E30008                        sw              r6,8[sp]
FFFFFFFFFFFFE2D8        67E38010                        sw              r7,16[sp]
FFFFFFFFFFFFF3D4        67E38010                        sw              r7,16[sp]
FFFFFFFFFFFFE2DC        67E40018                        sw              r8,24[sp]
FFFFFFFFFFFFF3D8        67E40018                        sw              r8,24[sp]
FFFFFFFFFFFFE2E0        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFF3DC        67EF8020                        sw              lr,32[sp]
FFFFFFFFFFFFE2E4        E1C01100                        setlo   r7,#
FFFFFFFFFFFFF3E0        9A039100                        lea             r7,NUMWKA       ; r7 = pointer to numeric work area
FFFFFFFFFFFFE2E8        F1C00000                        sethi   r7,#>NUMWKA
FFFFFFFFFFFFF3E4        04101809                        or              r6,r1,r0        ; save number for later
FFFFFFFFFFFFE2EC        04101809                        or              r6,r1,r0        ; save number for later
FFFFFFFFFFFFF3E8        E1400014                        setlo   r5,#20          ; r5 = min number of chars
FFFFFFFFFFFFE2F0        E1400014                        setlo   r5,#20          ; r5 = min number of chars
FFFFFFFFFFFFF3EC        02120009                        mov             r4,r1
FFFFFFFFFFFFE2F4        04101009                        or              r4,r1,r0
FFFFFFFFFFFFF3F0        BE400083                        bgt             r4,r0,PHN1              ; is it negative? if not
FFFFFFFFFFFFE2F8        BE400083                        bgt             r4,r0,PHN1              ; is it negative? if not
FFFFFFFFFFFFF3F4        02420006                        neg             r4,r4                   ; else make it positive
FFFFFFFFFFFFE2FC        02420006                        neg             r4,r4                   ; else make it positive
FFFFFFFFFFFFF3F8        0E528001                        subui   r5,r5,#1        ; one less for width count
FFFFFFFFFFFFE300        0C528001                        sub             r5,r5,#1        ; one less for width count
FFFFFFFFFFFFF3FC        E2000014                        setlo   r8,#20          ; maximum of 10 digits
FFFFFFFFFFFFE304        E2000014                        setlo   r8,#20          ; maximum of 10 digits
FFFFFFFFFFFFF400                                 PHN1:
FFFFFFFFFFFFE308                                 PHN1:
FFFFFFFFFFFFF400        02408009                        mov             r1,r4
FFFFFFFFFFFFE308        04400409                        or              r1,r4,r0
FFFFFFFFFFFFF404        1410800F                        andi    r1,r1,#15
FFFFFFFFFFFFE30C        1410800F                        andi    r1,r1,#15
FFFFFFFFFFFFF408        A010030A                        blt             r1,#10,PHN7
FFFFFFFFFFFFE310        A010030A                        blt             r1,#10,PHN7
FFFFFFFFFFFFF40C        0A108037                        addui   r1,r1,#'A'-10
FFFFFFFFFFFFE314        0A108037                        addui   r1,r1,#'A'-10
FFFFFFFFFFFFF410        BE00004A                        bra             PHN8
FFFFFFFFFFFFE318        BE00004A                        bra             PHN8
FFFFFFFFFFFFF414                                 PHN7:
FFFFFFFFFFFFE31C                                 PHN7:
FFFFFFFFFFFFF414        08108030                        add             r1,r1,#'0'              ; convert remainder to ascii
FFFFFFFFFFFFE31C        08108030                        add             r1,r1,#'0'              ; convert remainder to ascii
FFFFFFFFFFFFF418                                 PHN8:
FFFFFFFFFFFFE320                                 PHN8:
FFFFFFFFFFFFF418        60708000                        sb              r1,[r7]         ; and store in buffer
FFFFFFFFFFFFE320        60708000                        sb              r1,[r7]         ; and store in buffer
FFFFFFFFFFFFF41C        0A738001                        addui   r7,r7,#1
FFFFFFFFFFFFE324        08738001                        add             r7,r7,#1
FFFFFFFFFFFFF420        0E528001                        subui   r5,r5,#1        ; decrement width
FFFFFFFFFFFFE328        0C528001                        sub             r5,r5,#1        ; decrement width
FFFFFFFFFFFFF424        06420801                        shrui   r4,r4,#4
FFFFFFFFFFFFE32C                                        shru    r4,r4,#4
FFFFFFFFFFFFF428        BE400048                        beq             r4,r0,PHN6                      ; is it zero yet ?
FFFFFFFFFFFFE32C        BE400048                        beq             r4,r0,PHN6                      ; is it zero yet ?
FFFFFFFFFFFFF42C        BE047EAF                        loop    r8,PHN1         ; safety
FFFFFFFFFFFFE330        BE047ECF                        loop    r8,PHN1         ; safety
FFFFFFFFFFFFF430                                 PHN6:  ; test pad count
FFFFFFFFFFFFE334                                 PHN6:  ; test pad count
FFFFFFFFFFFFF430        BE500082                        ble             r5,r0,PHN4      ; skip padding if not needed
FFFFFFFFFFFFE334        BE500082                        ble             r5,r0,PHN4      ; skip padding if not needed
FFFFFFFFFFFFF434                                 PHN3:
FFFFFFFFFFFFE338                                 PHN3:
FFFFFFFFFFFFF434        E0400020                        setlo   r1,#' '         ; display the required leading spaces
FFFFFFFFFFFFE338        E0400020                        setlo   r1,#' '         ; display the required leading spaces
FFFFFFFFFFFFF438        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE33C        31FFF393                        call    GOOUT
FFFFFFFFFFFFF43C        BE02FFCF                        loop    r5,PHN3
FFFFFFFFFFFFE340        BE02FFCF                        loop    r5,PHN3
FFFFFFFFFFFFF440                                 PHN4:
FFFFFFFFFFFFE344                                 PHN4:
FFFFFFFFFFFFF440        BE600063                        bgt             r6,r0,PHN5      ; is number negative?
FFFFFFFFFFFFE344        BE600063                        bgt             r6,r0,PHN5      ; is number negative?
FFFFFFFFFFFFF444        E040002D                        setlo   r1,#'-'         ; if so, display the sign
FFFFFFFFFFFFE348        E040002D                        setlo   r1,#'-'         ; if so, display the sign
FFFFFFFFFFFFF448        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE34C        31FFF393                        call    GOOUT
FFFFFFFFFFFFF44C                                 PHN5:
FFFFFFFFFFFFE350                                 PHN5:
FFFFFFFFFFFFF44C        0E738001                        subui   r7,r7,#1
FFFFFFFFFFFFE350        0C738001                        sub             r7,r7,#1
FFFFFFFFFFFFF450        40708000                        lb              r1,[r7]         ; now unstack the digits and display
FFFFFFFFFFFFE354        40708000                        lb              r1,[r7]         ; now unstack the digits and display
FFFFFFFFFFFFF454        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE358        31FFF393                        call    GOOUT
FFFFFFFFFFFFF458        12709100                        cmpui   r1,r7,#NUMWKA
FFFFFFFFFFFFE35C        12709100                        cmpui   r1,r7,#NUMWKA
FFFFFFFFFFFFF45C        BE107F83                        bgt             r1,r0,PHN5
FFFFFFFFFFFFE360        BE107F83                        bgt             r1,r0,PHN5
FFFFFFFFFFFFF460                                 PHNRET:
FFFFFFFFFFFFE364                                 PHNRET:
FFFFFFFFFFFFF460        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFE364        47EF8020                        lw              lr,32[sp]
FFFFFFFFFFFFF464        47E40018                        lw              r8,24[sp]
FFFFFFFFFFFFE368        47E40018                        lw              r8,24[sp]
FFFFFFFFFFFFF468        47E38010                        lw              r7,16[sp]
FFFFFFFFFFFFE36C        47E38010                        lw              r7,16[sp]
FFFFFFFFFFFFF46C        47E30008                        lw              r6,8[sp]
FFFFFFFFFFFFE370        47E30008                        lw              r6,8[sp]
FFFFFFFFFFFFF470        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFE374        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFF474        37EF8028                        ret             #40
FFFFFFFFFFFFE378        37EF8028                        ret             #40
 
 
 
 
 
                                                 ; r1 = pointer to line
                                                 ; r1 = pointer to line
                                                 ; returns r1 = pointer to end of line + 1
                                                 ; returns r1 = pointer to end of line + 1
FFFFFFFFFFFFE37C                                 PRTLN:
FFFFFFFFFFFFF478                                 PRTLN:
FFFFFFFFFFFFE37C        0FEF0010                     subui   sp,sp,#16
FFFFFFFFFFFFF478        0FEF0010                     subui   sp,sp,#16
FFFFFFFFFFFFE380        67E28000                     sw         r5,[sp]
FFFFFFFFFFFFF47C        67E28000                     sw         r5,[sp]
FFFFFFFFFFFFE384        67EF8008                     sw         lr,8[sp]
FFFFFFFFFFFFF480        67EF8008                     sw         lr,8[sp]
FFFFFFFFFFFFE388        08128002                     addi    r5,r1,#2
FFFFFFFFFFFFF484        08128002                     addi    r5,r1,#2
FFFFFFFFFFFFE38C        4A50FFFE                     lbu                r1,-2[r5]       ; get the binary line number
FFFFFFFFFFFFF488        4A50FFFE                     lbu                r1,-2[r5]       ; get the binary line number
FFFFFFFFFFFFE390        4A517FFF                     lbu                r2,-1[r5]
FFFFFFFFFFFFF48C        4A517FFF                     lbu                r2,-1[r5]
FFFFFFFFFFFFE394        06211000                     shli       r2,r2,#8
FFFFFFFFFFFFF490        06211000                     shli       r2,r2,#8
FFFFFFFFFFFFE398        04110409                     or         r1,r1,r2
FFFFFFFFFFFFF494        04110409                     or         r1,r1,r2
FFFFFFFFFFFFE39C        E0800000                     setlo   r2,#0       ; display a 0 or more digit line no.
FFFFFFFFFFFFF498        E0800000                     setlo   r2,#0       ; display a 0 or more digit line no.
FFFFFFFFFFFFE3A0        31FFF88D                        call    PRTNUM
FFFFFFFFFFFFF49C        31FFFCCC                        call    PRTNUM
FFFFFFFFFFFFE3A4        E0400020                        setlo   r1,#' '     ; followed by a blank
FFFFFFFFFFFFF4A0        E0400020                        setlo   r1,#' '     ; followed by a blank
FFFFFFFFFFFFE3A8        31FFF393                        call    GOOUT
FFFFFFFFFFFFF4A4        31FFF7D5                        call    GOOUT
FFFFFFFFFFFFE3AC        E0800000                        setlo   r2,#0       ; stop char. is a zero
FFFFFFFFFFFFF4A8        E0800000                        setlo   r2,#0       ; stop char. is a zero
FFFFFFFFFFFFE3B0        04500409                        or      r1,r5,r0
FFFFFFFFFFFFF4AC        04500409                        or      r1,r5,r0
FFFFFFFFFFFFE3B4        31FFF851                        call    PRTSTG          ; display the rest of the line
FFFFFFFFFFFFF4B0        31FFFC93                        call    PRTSTG          ; display the rest of the line
FFFFFFFFFFFFE3B8        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFF4B4        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFE3BC        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFF4B8        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFE3C0        37EF8010                        ret             #16
FFFFFFFFFFFFF4BC        37EF8010                        ret             #16
 
 
 
 
                                                 ; ===== Test text byte following the call to this subroutine. If it
                                                 ; ===== Test text byte following the call to this subroutine. If it
                                                 ;      equals the byte pointed to by r8, return to the code following
                                                 ;      equals the byte pointed to by r8, return to the code following
                                                 ;      the call. If they are not equal, brnch to the point
                                                 ;      the call. If they are not equal, brnch to the point
Line 5112... Line 6688...
                                                 ; Registers Affected
                                                 ; Registers Affected
                                                 ;   r3,r8
                                                 ;   r3,r8
                                                 ; Returns
                                                 ; Returns
                                                 ;      r8 = updated text pointer
                                                 ;      r8 = updated text pointer
                                                 ;
                                                 ;
FFFFFFFFFFFFE3C4                                 TSTC
FFFFFFFFFFFFF4C0                                 TSTC
FFFFFFFFFFFFE3C4        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFF4C0        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFE3C8        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFF4C4        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFE3CC        67E08008                        sw              r1,8[sp]
FFFFFFFFFFFFF4C8        67E08008                        sw              r1,8[sp]
FFFFFFFFFFFFE3D0        31FFF914                        call    IGNBLK          ; ignore leading blanks
FFFFFFFFFFFFF4CC        31FFFD55                        call    IGNBLK          ; ignore leading blanks
FFFFFFFFFFFFE3D4        40808000                        lb              r1,[r8]
FFFFFFFFFFFFF4D0        40808000                        lb              r1,[r8]
FFFFFFFFFFFFE3D8        BE3080A8                        beq             r3,r1,TC1       ; is it = to what r8 points to? if so
FFFFFFFFFFFFF4D4        BE3080A8                        beq             r3,r1,TC1       ; is it = to what r8 points to? if so
FFFFFFFFFFFFE3DC        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFF4D8        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFE3E0        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFF4DC        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFE3E4        0BEF0010                        addui   sp,sp,#16
FFFFFFFFFFFFF4E0        0BEF0010                        addui   sp,sp,#16
FFFFFFFFFFFFE3E8        34400000                        jal             r0,[r4]         ; jump to the routine
FFFFFFFFFFFFF4E4        34400000                        jal             r0,[r4]         ; jump to the routine
FFFFFFFFFFFFE3EC                                 TC1:
FFFFFFFFFFFFF4E8                                 TC1:
FFFFFFFFFFFFE3EC        08840001                        add             r8,r8,#1        ; if equal, bump text pointer
FFFFFFFFFFFFF4E8        0A840001                        addui   r8,r8,#1        ; if equal, bump text pointer
FFFFFFFFFFFFE3F0        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFF4EC        47E08008                        lw              r1,8[sp]
FFFFFFFFFFFFE3F4        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFF4F0        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFE3F8        37EF8010                        ret             #16
FFFFFFFFFFFFF4F4        37EF8010                        ret             #16
 
 
                                                 ; ===== See if the text pointed to by r8 is a number. If so,
                                                 ; ===== See if the text pointed to by r8 is a number. If so,
                                                 ;      return the number in r2 and the number of digits in r3,
                                                 ;      return the number in r2 and the number of digits in r3,
                                                 ;      else return zero in r2 and r3.
                                                 ;      else return zero in r2 and r3.
                                                 ; Registers Affected
                                                 ; Registers Affected
Line 5139... Line 6715...
                                                 ; Returns
                                                 ; Returns
                                                 ;      r1 = number
                                                 ;      r1 = number
                                                 ;      r2 = number of digits in number
                                                 ;      r2 = number of digits in number
                                                 ;      r8 = updated text pointer
                                                 ;      r8 = updated text pointer
                                                 ;
                                                 ;
FFFFFFFFFFFFE3FC                                 TSTNUM:
FFFFFFFFFFFFF4F8                                 TSTNUM:
FFFFFFFFFFFFE3FC        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFF4F8        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE400        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFF4FC        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFE404        31FFF914                        call    IGNBLK          ; skip over blanks
FFFFFFFFFFFFF500        31FFFD55                        call    IGNBLK          ; skip over blanks
FFFFFFFFFFFFE408        E0400000                        setlo   r1,#0           ; initialize return parameters
FFFFFFFFFFFFF504        E0400000                        setlo   r1,#0           ; initialize return parameters
FFFFFFFFFFFFE40C        E0800000                        setlo   r2,#0
FFFFFFFFFFFFF508        E0800000                        setlo   r2,#0
FFFFFFFFFFFFE410                                 TN1:
FFFFFFFFFFFFF50C                                 TN1:
FFFFFFFFFFFFE410        40818000                        lb              r3,[r8]
FFFFFFFFFFFFF50C        40818000                        lb              r3,[r8]
FFFFFFFFFFFFE414        A8300D30                        bltui   r3,#'0',TSNMRET ; is it less than zero?
FFFFFFFFFFFFF510        A8300F30                        bltui   r3,#'0',TSNMRET ; is it less than zero?
FFFFFFFFFFFFE418        AE300C39                        bgtui   r3,#'9',TSNMRET ; is it greater than nine?
FFFFFFFFFFFFF514        AE300E39                        bgtui   r3,#'9',TSNMRET ; is it greater than nine?
FFFFFFFFFFFFE41C        E13FFFFF                        setlo   r4,#0xFFFFFFFF
FFFFFFFFFFFFF518        E6BFFFFF                ; SETLO
FFFFFFFFFFFFE420        F10FFFFF                        sethi   r4,#0x07FFFFFF
FFFFFFFFFFFFF51C        EEBFFFFF                ; SETMID
FFFFFFFFFFFFE424        BE120066                        bleu    r1,r4,TN2       ; see if there's room for new digit
FFFFFFFFFFFFF520        F6807FFF                ; SETHI
FFFFFFFFFFFFE428        E07FE629                        setlo   r1,msgNumTooBig
FFFFFFFFFFFFF524        040D1009                        lw              r4,#0x07FFFFFF_FFFFFFFF
FFFFFFFFFFFFE42C        BE0057AA                        bra             ERROR           ; if not, we've overflowd
FFFFFFFFFFFFF528        BE120066                        bleu    r1,r4,TN2       ; see if there's room for new digit
FFFFFFFFFFFFE430                                 TN2:
FFFFFFFFFFFFF52C        9A00F721                        lea             r1,msgNumTooBig
FFFFFFFFFFFFE430        1A10800A                        mului   r1,r1,#10       ; quickly multiply result by 10
FFFFFFFFFFFFF530        BE0057CA                        bra             ERROR           ; if not, we've overflowd
FFFFFFFFFFFFE434        08840001                        addi    r8,r8,#1        ; adjust text pointer
FFFFFFFFFFFFF534                                 TN2:
FFFFFFFFFFFFE438        1431800F                        andi    r3,r3,#0x0F     ; add in the new digit
FFFFFFFFFFFFF534        1A10800A                        mului   r1,r1,#10       ; quickly multiply result by 10
FFFFFFFFFFFFE43C        04118402                        add             r1,r1,r3
FFFFFFFFFFFFF538        0A840001                        addui   r8,r8,#1        ; adjust text pointer
FFFFFFFFFFFFE440        08210001                        addi    r2,r2,#1        ; increment the no. of digits
FFFFFFFFFFFFF53C        1431800F                        andi    r3,r3,#0x0F     ; add in the new digit
FFFFFFFFFFFFE444        BE007E6A                        bra             TN1
FFFFFFFFFFFFF540        04118403                        addu    r1,r1,r3
FFFFFFFFFFFFE448                                 TSNMRET:
FFFFFFFFFFFFF544        0A210001                        addui   r2,r2,#1        ; increment the no. of digits
FFFFFFFFFFFFE448        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFF548        BE007E2A                        bra             TN1
FFFFFFFFFFFFE44C        37EF8008                        ret             #8
FFFFFFFFFFFFF54C                                 TSNMRET:
 
FFFFFFFFFFFFF54C        47EF8000                        lw              lr,[sp]
 
FFFFFFFFFFFFF550        37EF8008                        ret             #8
 
 
 
 
                                                 ;===== Skip over blanks in the text pointed to by r8.
                                                 ;===== Skip over blanks in the text pointed to by r8.
                                                 ;
                                                 ;
                                                 ; Registers Affected:
                                                 ; Registers Affected:
                                                 ;      r8
                                                 ;      r8
                                                 ; Returns
                                                 ; Returns
                                                 ;      r8 = pointer updateded past any spaces or tabs
                                                 ;      r8 = pointer updateded past any spaces or tabs
                                                 ;
                                                 ;
FFFFFFFFFFFFE450                                 IGNBLK:
FFFFFFFFFFFFF554                                 IGNBLK:
FFFFFFFFFFFFE450        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFF554        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE454        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFF558        67E08000                        sw              r1,[sp]
FFFFFFFFFFFFE458                                 IGB2:
FFFFFFFFFFFFF55C                                 IGB2:
FFFFFFFFFFFFE458        40808000                        lb              r1,[r8]                 ; get char
FFFFFFFFFFFFF55C        40808000                        lb              r1,[r8]                 ; get char
FFFFFFFFFFFFE45C        B0100220                        beqi    r1,#' ',IGB1    ; see if it's a space
FFFFFFFFFFFFF560        B0100220                        beqi    r1,#' ',IGB1    ; see if it's a space
FFFFFFFFFFFFE460        B2100300                        bnei    r1,#'\t',IGBRET ; or a tab
FFFFFFFFFFFFF564        B2100300                        bnei    r1,#'\t',IGBRET ; or a tab
FFFFFFFFFFFFE464                                 IGB1:
FFFFFFFFFFFFF568                                 IGB1:
FFFFFFFFFFFFE464        08840001                        add             r8,r8,#1                ; increment the text pointer
FFFFFFFFFFFFF568        0A840001                        addui   r8,r8,#1                ; increment the text pointer
FFFFFFFFFFFFE468        BE007F8A                        bra             IGB2
FFFFFFFFFFFFF56C        BE007F8A                        bra             IGB2
FFFFFFFFFFFFE46C                                 IGBRET:
FFFFFFFFFFFFF570                                 IGBRET:
FFFFFFFFFFFFE46C        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFF570        47E08000                        lw              r1,[sp]
FFFFFFFFFFFFE470        37EF8008                        ret             #8
FFFFFFFFFFFFF574        37EF8008                        ret             #8
 
 
 
 
                                                 ; ===== Convert the line of text in the input buffer to upper
                                                 ; ===== Convert the line of text in the input buffer to upper
                                                 ;      case (except for stuff between quotes).
                                                 ;      case (except for stuff between quotes).
                                                 ;
                                                 ;
                                                 ; Registers Affected
                                                 ; Registers Affected
                                                 ;   r1,r3
                                                 ;   r1,r3
                                                 ; Returns
                                                 ; Returns
                                                 ;      r8 = pointing to end of text in buffer
                                                 ;      r8 = pointing to end of text in buffer
                                                 ;
                                                 ;
FFFFFFFFFFFFE474                                 TOUPBUF:
FFFFFFFFFFFFF578                                 TOUPBUF:
FFFFFFFFFFFFE474        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFF578        0FEF0008                        subui   sp,sp,#8
FFFFFFFFFFFFE478        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFF57C        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFE47C        E200111B                        setlo   r8,BUFFER       ; set up text pointer
FFFFFFFFFFFFF580        9A04111B                        lea             r8,BUFFER       ; set up text pointer
FFFFFFFFFFFFE480        E0C00000                        setlo   r3,#0           ; clear quote flag
FFFFFFFFFFFFF584        E0C00000                        setlo   r3,#0           ; clear quote flag
FFFFFFFFFFFFE484                                 TOUPB1:
FFFFFFFFFFFFF588                                 TOUPB1:
FFFFFFFFFFFFE484        40808000                        lb              r1,[r8]         ; get the next text char.
FFFFFFFFFFFFF588        40808000                        lb              r1,[r8]         ; get the next text char.
FFFFFFFFFFFFE488        08840001                        add             r8,r8,#1
FFFFFFFFFFFFF58C        0A840001                        addui   r8,r8,#1
FFFFFFFFFFFFE48C        B0100D0D                        beqi    r1,#CR,TOUPBRT          ; is it end of line?
FFFFFFFFFFFFF590        B0100D0D                        beqi    r1,#CR,TOUPBRT          ; is it end of line?
FFFFFFFFFFFFE490        B0100622                        beqi    r1,#'"',DOQUO   ; a double quote?
FFFFFFFFFFFFF594        B0100622                        beqi    r1,#'"',DOQUO   ; a double quote?
FFFFFFFFFFFFE494        B0100527                        beqi    r1,#'''',DOQUO  ; or a single quote?
FFFFFFFFFFFFF598        B0100527                        beqi    r1,#'''',DOQUO  ; or a single quote?
FFFFFFFFFFFFE498        BE307F69                        bne             r3,r0,TOUPB1    ; inside quotes?
FFFFFFFFFFFFF59C        BE307F69                        bne             r3,r0,TOUPB1    ; inside quotes?
FFFFFFFFFFFFE49C        31FFF932                        call    toUpper         ; convert to upper case
FFFFFFFFFFFFF5A0        31FFFD73                        call    toUpper         ; convert to upper case
FFFFFFFFFFFFE4A0        6080FFFF                        sb              r1,-1[r8]       ; store it
FFFFFFFFFFFFF5A4        6080FFFF                        sb              r1,-1[r8]       ; store it
FFFFFFFFFFFFE4A4        BE007F0A                        bra             TOUPB1          ; and go back for more
FFFFFFFFFFFFF5A8        BE007F0A                        bra             TOUPB1          ; and go back for more
FFFFFFFFFFFFE4A8                                 DOQUO:
FFFFFFFFFFFFF5AC                                 DOQUO:
FFFFFFFFFFFFE4A8        BE300069                        bne             r3,r0,DOQUO1; are we inside quotes?
FFFFFFFFFFFFF5AC        BE300069                        bne             r3,r0,DOQUO1; are we inside quotes?
FFFFFFFFFFFFE4AC        04100C09                        or              r3,r1,r0        ; if not, toggle inside-quotes flag
FFFFFFFFFFFFF5B0        02118009                        mov             r3,r1           ; if not, toggle inside-quotes flag
FFFFFFFFFFFFE4B0        BE007EAA                        bra             TOUPB1
FFFFFFFFFFFFF5B4        BE007EAA                        bra             TOUPB1
FFFFFFFFFFFFE4B4                                 DOQUO1:
FFFFFFFFFFFFF5B8                                 DOQUO1:
FFFFFFFFFFFFE4B4        BE30FE89                        bne             r3,r1,TOUPB1            ; make sure we're ending proper quote
FFFFFFFFFFFFF5B8        BE30FE89                        bne             r3,r1,TOUPB1            ; make sure we're ending proper quote
FFFFFFFFFFFFE4B8        E0C00000                        setlo   r3,#0           ; else clear quote flag
FFFFFFFFFFFFF5BC        E0C00000                        setlo   r3,#0           ; else clear quote flag
FFFFFFFFFFFFE4BC        BE007E4A                        bra             TOUPB1
FFFFFFFFFFFFF5C0        BE007E4A                        bra             TOUPB1
FFFFFFFFFFFFE4C0                                 TOUPBRT:
FFFFFFFFFFFFF5C4                                 TOUPBRT:
FFFFFFFFFFFFE4C0        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFF5C4        47EF8000                        lw              lr,[sp]
FFFFFFFFFFFFE4C4        37EF8008                        ret             #8
FFFFFFFFFFFFF5C8        37EF8008                        ret             #8
 
 
 
 
                                                 ; ===== Convert the character in r1 to upper case
                                                 ; ===== Convert the character in r1 to upper case
                                                 ;
                                                 ;
FFFFFFFFFFFFE4C8                                 toUpper
FFFFFFFFFFFFF5CC                                 toUpper
FFFFFFFFFFFFE4C8        A0100361                        blt             r1,#'a',TOUPRET ; is it < 'a'?
FFFFFFFFFFFFF5CC        A0100361                        blti    r1,#'a',TOUPRET ; is it < 'a'?
FFFFFFFFFFFFE4CC        A610027A                        bgt             r1,#'z',TOUPRET ; or > 'z'?
FFFFFFFFFFFFF5D0        A610027A                        bgti    r1,#'z',TOUPRET ; or > 'z'?
FFFFFFFFFFFFE4D0        0C108020                        sub             r1,r1,#32       ; if not, make it upper case
FFFFFFFFFFFFF5D4        0E108020                        subui   r1,r1,#32       ; if not, make it upper case
FFFFFFFFFFFFE4D4                                 TOUPRET
FFFFFFFFFFFFF5D8                                 TOUPRET
FFFFFFFFFFFFE4D4        37EF8000                        ret
FFFFFFFFFFFFF5D8        37EF8000                        ret
 
 
 
 
                                                 ; 'CHKIO' checks the input. If there's no input, it will return
                                                 ; 'CHKIO' checks the input. If there's no input, it will return
                                                 ; to the caller with the r1=0. If there is input, the input byte is in r1.
                                                 ; to the caller with the r1=0. If there is input, the input byte is in r1.
                                                 ; However, if a control-C is read, 'CHKIO' will warm-start BASIC and will
                                                 ; However, if a control-C is read, 'CHKIO' will warm-start BASIC and will
                                                 ; not return to the caller.
                                                 ; not return to the caller.
                                                 ;
                                                 ;
FFFFFFFFFFFFE4D8                                 CHKIO:
FFFFFFFFFFFFF5DC                                 CHKIO:
FFFFFFFFFFFFE4D8        0FEF0008                        subui   sp,sp,#8        ; save link reg
FFFFFFFFFFFFF5DC        0FEF0008                        subui   sp,sp,#8        ; save link reg
FFFFFFFFFFFFE4DC        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFF5E0        67EF8000                        sw              lr,[sp]
FFFFFFFFFFFFE4E0        31FFF394                        call    GOIN            ; get input if possible
FFFFFFFFFFFFF5E4        31FFF7D6                        call    GOIN            ; get input if possible
FFFFFFFFFFFFE4E4        B01003FF                        beq             r1,#-1,CHKRET2          ; if Zero, no input
FFFFFFFFFFFFF5E8        B01003FF                        beqi    r1,#-1,CHKRET2          ; if Zero, no input
FFFFFFFFFFFFE4E8        B2100303                        bnei    r1,#CTRLC,CHKRET        ; is it control-C?
FFFFFFFFFFFFF5EC        B2100303                        bnei    r1,#CTRLC,CHKRET        ; is it control-C?
FFFFFFFFFFFFE4EC        33FFF3BE                        jmp             WSTART          ; if so, do a warm start
FFFFFFFFFFFFF5F0        33FFF801                        jmp             WSTART          ; if so, do a warm start
FFFFFFFFFFFFE4F0                                 CHKRET2:
FFFFFFFFFFFFF5F4                                 CHKRET2:
FFFFFFFFFFFFE4F0        0410840A                        xor             r1,r1,r1
FFFFFFFFFFFFF5F4        0410840A                        xor             r1,r1,r1
FFFFFFFFFFFFE4F4                                 CHKRET:
FFFFFFFFFFFFF5F8                                 CHKRET:
FFFFFFFFFFFFE4F4        47EF8000                        lw              lr,[sp]         ;r1=0
FFFFFFFFFFFFF5F8        47EF8000                        lw              lr,[sp]         ;r1=0
FFFFFFFFFFFFE4F8        37EF8008                        ret             #8
FFFFFFFFFFFFF5FC        37EF8008                        ret             #8
 
 
 
 
                                                 ; ===== Display a CR-LF sequence
                                                 ; ===== Display a CR-LF sequence
                                                 ;
                                                 ;
FFFFFFFFFFFFE4FC                                 CRLF:
FFFFFFFFFFFFF600                                 CRLF:
FFFFFFFFFFFFE4FC        E07FE60B                        setlo   r1,CLMSG
FFFFFFFFFFFFF600        E07FF703                        setlo   r1,CLMSG
 
 
 
 
                                                 ; ===== Display a zero-ended string pointed to by register r1
                                                 ; ===== Display a zero-ended string pointed to by register r1
                                                 ; Registers Affected
                                                 ; Registers Affected
                                                 ;   r1,r2,r4
                                                 ;   r1,r2,r4
                                                 ;
                                                 ;
FFFFFFFFFFFFE500                                 PRMESG:
FFFFFFFFFFFFF604                                 PRMESG:
FFFFFFFFFFFFE500        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFF604        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFE504        67E28000                        sw              r5,[sp]
FFFFFFFFFFFFF608        67E28000                        sw              r5,[sp]
FFFFFFFFFFFFE508        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFF60C        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFE50C        02128009                        mov     r5,r1       ; r5 = pointer to message
FFFFFFFFFFFFF610        02128009                        mov     r5,r1       ; r5 = pointer to message
FFFFFFFFFFFFE510                                 PRMESG1:
FFFFFFFFFFFFF614                                 PRMESG1:
FFFFFFFFFFFFE510        08528001                        add             r5,r5,#1
FFFFFFFFFFFFF614        0A528001                        addui   r5,r5,#1
FFFFFFFFFFFFE514        4050FFFF                        lb              r1,-1[r5]       ;       get the char.
FFFFFFFFFFFFF618        4A50FFFF                        lbu             r1,-1[r5]       ;       get the char.
FFFFFFFFFFFFE518        BE100068                        beq             r1,r0,PRMRET
FFFFFFFFFFFFF61C        BE100068                        beq             r1,r0,PRMRET
FFFFFFFFFFFFE51C        31FFF393                        call    GOOUT           ;else display it trashes r4
FFFFFFFFFFFFF620        31FFF7D5                        call    GOOUT           ;else display it trashes r4
FFFFFFFFFFFFE520        BE007F8A                        bra             PRMESG1
FFFFFFFFFFFFF624        BE007F8A                        bra             PRMESG1
FFFFFFFFFFFFE524                                 PRMRET:
FFFFFFFFFFFFF628                                 PRMRET:
FFFFFFFFFFFFE524        02508009                        mov             r1,r5
FFFFFFFFFFFFF628        02508009                        mov             r1,r5
FFFFFFFFFFFFE528        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFF62C        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFE52C        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFF630        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFE530        37EF8010                        ret             #16
FFFFFFFFFFFFF634        37EF8010                        ret             #16
 
 
 
 
                                                 ; ===== Display a zero-ended string pointed to by register r1
                                                 ; ===== Display a zero-ended string pointed to by register r1
                                                 ; Registers Affected
                                                 ; Registers Affected
                                                 ;   r1,r2,r3
                                                 ;   r1,r2,r3
                                                 ;
                                                 ;
FFFFFFFFFFFFE534                                 PRMESGAUX:
FFFFFFFFFFFFF638                                 PRMESGAUX:
FFFFFFFFFFFFE534        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFF638        0FEF0010                        subui   sp,sp,#16
FFFFFFFFFFFFE538        67E28000                        sw              r5,[sp]
FFFFFFFFFFFFF63C        67E28000                        sw              r5,[sp]
FFFFFFFFFFFFE53C        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFF640        67EF8008                        sw              lr,8[sp]
FFFFFFFFFFFFE540        02128009                        mov     r5,r1       ; r3 = pointer
FFFFFFFFFFFFF644        02128009                        mov     r5,r1       ; r3 = pointer
FFFFFFFFFFFFE544                                 PRMESGA1:
FFFFFFFFFFFFF648                                 PRMESGA1:
FFFFFFFFFFFFE544        0A528001                        addui   r5,r5,#1
FFFFFFFFFFFFF648        0A528001                        addui   r5,r5,#1
FFFFFFFFFFFFE548        4050FFFF                        lb              r1,-1[r5]       ;       get the char.
FFFFFFFFFFFFF64C        4050FFFF                        lb              r1,-1[r5]       ;       get the char.
FFFFFFFFFFFFE54C        BE100068                        beq             r1,r0,PRMRETA
FFFFFFFFFFFFF650        BE100068                        beq             r1,r0,PRMRETA
FFFFFFFFFFFFE550        31FFF395                        call    GOAUXO          ;else display it
FFFFFFFFFFFFF654        31FFF7D7                        call    GOAUXO          ;else display it
FFFFFFFFFFFFE554        BE007F8A                        bra             PRMESGA1
FFFFFFFFFFFFF658        BE007F8A                        bra             PRMESGA1
FFFFFFFFFFFFE558                                 PRMRETA:
FFFFFFFFFFFFF65C                                 PRMRETA:
FFFFFFFFFFFFE558        02508009                        mov             r1,r5
FFFFFFFFFFFFF65C        02508009                        mov             r1,r5
FFFFFFFFFFFFE55C        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFF660        47EF8008                        lw              lr,8[sp]
FFFFFFFFFFFFE560        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFF664        47E28000                        lw              r5,[sp]
FFFFFFFFFFFFE564        37EF8010                        ret             #16
FFFFFFFFFFFFF668        37EF8010                        ret             #16
 
 
                                                 ;*****************************************************
                                                 ;*****************************************************
                                                 ; The following routines are the only ones that need *
                                                 ; The following routines are the only ones that need *
                                                 ; to be changed for a different I/O environment.     *
                                                 ; to be changed for a different I/O environment.     *
                                                 ;*****************************************************
                                                 ;*****************************************************
 
 
 
 
                                                 ; ===== Output character to the console (Port 1) from register r1
                                                 ; ===== Output character to the console (Port 1) from register r1
                                                 ;      (Preserves all registers.)
                                                 ;      (Preserves all registers.)
                                                 ;
                                                 ;
FFFFFFFFFFFFE568                                 OUTC:
FFFFFFFFFFFFF66C                                 OUTC:
FFFFFFFFFFFFE568        33FFEF47                        jmp             DisplayChar
FFFFFFFFFFFFF66C        33FFF07F                        jmp             DisplayChar
 
 
 
 
                                                 ; ===== Input a character from the console into register D0 (or
                                                 ; ===== Input a character from the console into register R1 (or
                                                 ;      return Zero status if there's no character available).
                                                 ;      return Zero status if there's no character available).
                                                 ;
                                                 ;
FFFFFFFFFFFFE56C                                 INC:
FFFFFFFFFFFFF670                                 INC:
FFFFFFFFFFFFE56C        33FFEE08                        jmp             KeybdGetChar
FFFFFFFFFFFFF670        33FFEF07                        jmp             KeybdGetChar
 
 
 
 
                                                 ;*
                                                 ;*
                                                 ;* ===== Input a character from the host into register r1 (or
                                                 ;* ===== Input a character from the host into register r1 (or
                                                 ;*     return Zero status if there's no character available).
                                                 ;*     return Zero status if there's no character available).
                                                 ;*
                                                 ;*
FFFFFFFFFFFFE570                                 AUXIN:
FFFFFFFFFFFFF674                                 AUXIN:
FFFFFFFFFFFFE570        31FFED54                        call    SerialGetChar
FFFFFFFFFFFFF674        31FFEDA4                        call    SerialGetChar
FFFFFFFFFFFFE574        B01003FF                        beqi    r1,#-1,AXIRET_ZERO
FFFFFFFFFFFFF678        B01003FF                        beqi    r1,#-1,AXIRET_ZERO
FFFFFFFFFFFFE578        1410807F                        andi    r1,r1,#0x7f             ;zero out the high bit
FFFFFFFFFFFFF67C        1410807F                        andi    r1,r1,#0x7f             ;zero out the high bit
FFFFFFFFFFFFE57C                                 AXIRET:
FFFFFFFFFFFFF680                                 AXIRET:
FFFFFFFFFFFFE57C        37EF8000                        ret
FFFFFFFFFFFFF680        37EF8000                        ret
FFFFFFFFFFFFE580                                 AXIRET_ZERO:
FFFFFFFFFFFFF684                                 AXIRET_ZERO:
FFFFFFFFFFFFE580        0410840A                        xor             r1,r1,r1
FFFFFFFFFFFFF684        0410840A                        xor             r1,r1,r1
FFFFFFFFFFFFE584        37EF8000                        ret
FFFFFFFFFFFFF688        37EF8000                        ret
 
 
                                                 ; ===== Output character to the host (Port 2) from register r1
                                                 ; ===== Output character to the host (Port 2) from register r1
                                                 ;      (Preserves all registers.)
                                                 ;      (Preserves all registers.)
                                                 ;
                                                 ;
FFFFFFFFFFFFE588                                 AUXOUT
FFFFFFFFFFFFF68C                                 AUXOUT
FFFFFFFFFFFFE588        33FFED0C                        jmp             SerialPutChar   ; call boot rom routine
FFFFFFFFFFFFF68C        33FFED5C                        jmp             SerialPutChar   ; call boot rom routine
 
 
 
 
FFFFFFFFFFFFE58C                                 _cls
FFFFFFFFFFFFF690                                 _cls
FFFFFFFFFFFFE58C        31FFEED9                        call    clearScreen
FFFFFFFFFFFFF690        31FFF011                        call    clearScreen
FFFFFFFFFFFFE590        BE00740A                        bra             FINISH
FFFFFFFFFFFFF694        BE00742A                        bra             FINISH
 
 
FFFFFFFFFFFFE594                                 _wait10
FFFFFFFFFFFFF698                                 _wait10
FFFFFFFFFFFFE594        37EF8000                        ret
FFFFFFFFFFFFF698        37EF8000                        ret
FFFFFFFFFFFFE598                                 _getATAStatus
FFFFFFFFFFFFF69C                                 _getATAStatus
FFFFFFFFFFFFE598        37EF8000                        ret
FFFFFFFFFFFFF69C        37EF8000                        ret
FFFFFFFFFFFFE59C                                 _waitCFNotBusy
FFFFFFFFFFFFF6A0                                 _waitCFNotBusy
FFFFFFFFFFFFE59C        37EF8000                        ret
FFFFFFFFFFFFF6A0        37EF8000                        ret
FFFFFFFFFFFFE5A0                                 _rdcf
FFFFFFFFFFFFF6A4                                 _rdcf
FFFFFFFFFFFFE5A0        BE00738A                        br              FINISH
FFFFFFFFFFFFF6A4        BE0073AA                        br              FINISH
FFFFFFFFFFFFE5A4                                 rdcf6
FFFFFFFFFFFFF6A8                                 rdcf6
FFFFFFFFFFFFE5A4        BE004BEA                        br              ERROR
FFFFFFFFFFFFF6A8        BE004C0A                        br              ERROR
 
 
 
 
                                                 ; ===== Return to the resident monitor, operating system, etc.
                                                 ; ===== Return to the resident monitor, operating system, etc.
                                                 ;
                                                 ;
FFFFFFFFFFFFE5A8                                 BYEBYE:
FFFFFFFFFFFFF6AC                                 BYEBYE:
FFFFFFFFFFFFE5A8        460F1088                        lw              sp,OSSP
FFFFFFFFFFFFF6AC        460F1088                        lw              sp,OSSP
FFFFFFFFFFFFE5AC        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFF6B0        47EF8000                     lw      lr,[sp]
FFFFFFFFFFFFE5B0        37EF8008                        ret             #8
FFFFFFFFFFFFF6B4        37EF8008                        ret             #8
 
 
                                                 ;      MOVE.B  #228,D7         return to Tutor
                                                 ;      MOVE.B  #228,D7         return to Tutor
                                                 ;      TRAP    #14
                                                 ;      TRAP    #14
 
 
FFFFFFFFFFFFE5B0 C44E4100BCBD3CBD               .align  16
FFFFFFFFFFFFF6B8 726F747061520A0D        msgInit db     CR,LF,"Raptor64 Tiny BASIC v1.0",CR,LF,"(C) 2013  Robert Finch",CR,LF,LF,0
FFFFFFFFFFFFE5B8 0000000000D24F00
FFFFFFFFFFFFF6C0 20796E6954203436
FFFFFFFFFFFFE5C0                                        .align  16
FFFFFFFFFFFFF6C8 3176204349534142
FFFFFFFFFFFFE5C0 726F747061520A0D        msgInit db     CR,LF,"Raptor64 Tiny BASIC v1.0",CR,LF,"(C) 2012  Robert Finch",CR,LF,LF,0
FFFFFFFFFFFFF6D0 202943280A0D302E
FFFFFFFFFFFFE5C8 20796E6954203436
FFFFFFFFFFFFF6D8 6F52202033313032
FFFFFFFFFFFFE5D0 3176204349534142
FFFFFFFFFFFFF6E0 6E69462074726562
FFFFFFFFFFFFE5D8 202943280A0D302E
FFFFFFFFFFFFF6E8 0A0D000A0A0D6863        OKMSG  db      CR,LF,"OK",CR,LF,0
FFFFFFFFFFFFE5E0 6F52202032313032
FFFFFFFFFFFFF6F0 616857000A0D4B4F        msgWhat        db      "What?",CR,LF,0
FFFFFFFFFFFFE5E8 6E69462074726562
FFFFFFFFFFFFF6F8 726F53000A0D3F74        SRYMSG db      "Sorry."
FFFFFFFFFFFFE5F0 0A0D000A0A0D6863        OKMSG  db      CR,LF,"OK",CR,LF,0
FFFFFFFFFFFFF700 6F43000A0D2E7972        msgReadError   db      "Compact FLASH read error",CR,LF,0
FFFFFFFFFFFFE5F8 616857000A0D4B4F        msgWhat        db      "What?",CR,LF,0
FFFFFFFFFFFFF708 4C4620746361706D
FFFFFFFFFFFFE600 726F53000A0D3F74        SRYMSG db      "Sorry."
FFFFFFFFFFFFF710 6461657220485341
FFFFFFFFFFFFE608 6F43000A0D2E7972        msgReadError   db      "Compact FLASH read error",CR,LF,0
FFFFFFFFFFFFF718 0A0D726F72726520
FFFFFFFFFFFFE610 4C4620746361706D
FFFFFFFFFFFFF720 207265626D754E00        msgNumTooBig   db      "Number is too big",CR,LF,0
FFFFFFFFFFFFE618 6461657220485341
FFFFFFFFFFFFF728 62206F6F74207369
FFFFFFFFFFFFE620 0A0D726F72726520
FFFFFFFFFFFFF730 766944000A0D6769        msgDivZero             db      "Division by zero",CR,LF,0
FFFFFFFFFFFFE628 207265626D754E00        msgNumTooBig   db      "Number is too big",CR,LF,0
FFFFFFFFFFFFF738 7962206E6F697369
FFFFFFFFFFFFE630 62206F6F74207369
FFFFFFFFFFFFF740 000A0D6F72657A20
FFFFFFFFFFFFE638 766944000A0D6769        msgDivZero             db      "Division by zero",CR,LF,0
FFFFFFFFFFFFF748 7620666F2074754F        msgVarSpace     db  "Out of variable space",CR,LF,0
FFFFFFFFFFFFE640 7962206E6F697369
FFFFFFFFFFFFF750 20656C6261697261
FFFFFFFFFFFFE648 000A0D6F72657A20
FFFFFFFFFFFFF758 000A0D6563617073
FFFFFFFFFFFFE650 7620666F2074754F        msgVarSpace     db  "Out of variable space",CR,LF,0
FFFFFFFFFFFFF760 6620736574796220        msgBytesFree   db      " bytes free",CR,LF,0
FFFFFFFFFFFFE658 20656C6261697261
FFFFFFFFFFFFF768 0A0D000A0D656572        msgReady               db      CR,LF,"Ready",CR,LF,0
FFFFFFFFFFFFE660 000A0D6563617073
FFFFFFFFFFFFF770 000A0D7964616552
FFFFFFFFFFFFE668 6620736574796220        msgBytesFree   db      " bytes free",CR,LF,0
FFFFFFFFFFFFF778 6E69746365707845        msgComma               db      "Expecting a comma",CR,LF,0
FFFFFFFFFFFFE670 0A0D000A0D656572        msgReady               db      CR,LF,"Ready",CR,LF,0
FFFFFFFFFFFFF780 6D6D6F6320612067
FFFFFFFFFFFFE678 000A0D7964616552
FFFFFFFFFFFFF788 656E694C000A0D61        msgLineRange   db      "Line number too big",CR,LF,0
FFFFFFFFFFFFE680 6E69746365707845        msgComma               db      "Expecting a comma",CR,LF,0
FFFFFFFFFFFFF790 207265626D756E20
FFFFFFFFFFFFE688 6D6D6F6320612067
FFFFFFFFFFFFF798 0D676962206F6F74
FFFFFFFFFFFFE690 656E694C000A0D61        msgLineRange   db      "Line number too big",CR,LF,0
FFFFFFFFFFFFF7A0 746365707845000A        msgVar                 db      "Expecting a variable",CR,LF,0
FFFFFFFFFFFFE698 207265626D756E20
FFFFFFFFFFFFF7A8 6176206120676E69
FFFFFFFFFFFFE6A0 0D676962206F6F74
FFFFFFFFFFFFF7B0 0A0D656C62616972
FFFFFFFFFFFFE6A8 746365707845000A        msgVar                 db      "Expecting a variable",CR,LF,0
FFFFFFFFFFFFF7B8 64616220444E5200        msgRNDBad              db      "RND bad parameter",CR,LF,0
FFFFFFFFFFFFE6B0 6176206120676E69
FFFFFFFFFFFFF7C0 74656D6172617020
FFFFFFFFFFFFE6B8 0A0D656C62616972
FFFFFFFFFFFFF7C8 535953000A0D7265        msgSYSBad              db      "SYS bad address",CR,LF,0
FFFFFFFFFFFFE6C0 64616220444E5200        msgRNDBad              db      "RND bad parameter",CR,LF,0
FFFFFFFFFFFFF7D0 6464612064616220
FFFFFFFFFFFFE6C8 74656D6172617020
FFFFFFFFFFFFF7D8 49000A0D73736572        msgInputVar            db      "INPUT expecting a variable",CR,LF,0
FFFFFFFFFFFFE6D0 535953000A0D7265        msgSYSBad              db      "SYS bad address",CR,LF,0
FFFFFFFFFFFFF7E0 707865205455504E
FFFFFFFFFFFFE6D8 6464612064616220
FFFFFFFFFFFFF7E8 6120676E69746365
FFFFFFFFFFFFE6E0 49000A0D73736572        msgInputVar            db      "INPUT expecting a variable",CR,LF,0
FFFFFFFFFFFFF7F0 6C62616972617620
FFFFFFFFFFFFE6E8 707865205455504E
FFFFFFFFFFFFF7F8 5458454E000A0D65        msgNextFor             db      "NEXT without FOR",CR,LF,0
FFFFFFFFFFFFE6F0 6120676E69746365
FFFFFFFFFFFFF800 74756F6874697720
FFFFFFFFFFFFE6F8 6C62616972617620
FFFFFFFFFFFFF808 4E000A0D524F4620        msgNextVar             db      "NEXT expecting a defined variable",CR,LF,0
FFFFFFFFFFFFE700 5458454E000A0D65        msgNextFor             db      "NEXT without FOR",CR,LF,0
FFFFFFFFFFFFF810 6570786520545845
FFFFFFFFFFFFE708 74756F6874697720
FFFFFFFFFFFFF818 206120676E697463
FFFFFFFFFFFFE710 4E000A0D524F4620        msgNextVar             db      "NEXT expecting a defined variable",CR,LF,0
FFFFFFFFFFFFF820 2064656E69666564
FFFFFFFFFFFFE718 6570786520545845
FFFFFFFFFFFFF828 656C626169726176
FFFFFFFFFFFFE720 206120676E697463
FFFFFFFFFFFFF830 2F4F544F47000A0D        msgBadGotoGosub        db      "GOTO/GOSUB bad line number",CR,LF,0
FFFFFFFFFFFFE728 2064656E69666564
FFFFFFFFFFFFF838 6162204255534F47
FFFFFFFFFFFFE730 656C626169726176
FFFFFFFFFFFFF840 6E20656E696C2064
FFFFFFFFFFFFE738 2F4F544F47000A0D        msgBadGotoGosub        db      "GOTO/GOSUB bad line number",CR,LF,0
FFFFFFFFFFFFF848 000A0D7265626D75
FFFFFFFFFFFFE740 6162204255534F47
FFFFFFFFFFFFF850 77204E5255544552        msgRetWoGosub   db     "RETURN without GOSUB",CR,LF,0
FFFFFFFFFFFFE748 6E20656E696C2064
FFFFFFFFFFFFF858 472074756F687469
FFFFFFFFFFFFE750 000A0D7265626D75
FFFFFFFFFFFFF860 50000A0D4255534F        msgTooBig              db      "Program is too big",CR,LF,0
FFFFFFFFFFFFE758 77204E5255544552        msgRetWoGosub   db     "RETURN without GOSUB",CR,LF,0
FFFFFFFFFFFFF868 69206D6172676F72
FFFFFFFFFFFFE760 472074756F687469
FFFFFFFFFFFFF870 6962206F6F742073
FFFFFFFFFFFFE768 50000A0D4255534F        msgTooBig              db      "Program is too big",CR,LF,0
FFFFFFFFFFFFF878 72747845000A0D67        msgExtraChars  db      "Extra characters on line ignored",CR,LF,0
FFFFFFFFFFFFE770 69206D6172676F72
FFFFFFFFFFFFF880 6361726168632061
FFFFFFFFFFFFE778 6962206F6F742073
FFFFFFFFFFFFF888 206E6F2073726574
FFFFFFFFFFFFE780 72747845000A0D67        msgExtraChars  db      "Extra characters on line ignored",CR,LF,0
FFFFFFFFFFFFF890 6E676920656E696C
FFFFFFFFFFFFE788 6361726168632061
 
FFFFFFFFFFFFE790 206E6F2073726574
 
FFFFFFFFFFFFE798 6E676920656E696C
 
 
 
FFFFFFFFFFFFE7A0 00000A0D6465726F               align   8
FFFFFFFFFFFFF898 00000A0D6465726F               align   8
FFFFFFFFFFFFE7A8                                        align   8
FFFFFFFFFFFFF8A0                                        align   8
                                                 LSTROM equ     *               ; end of possible ROM area
                                                 LSTROM equ     *               ; end of possible ROM area
                                                 ;      END
                                                 ;      END
 
 
                                                 ;*
                                                 ;*
                                                 ;* ===== Return to the resident monitor, operating system, etc.
                                                 ;* ===== Return to the resident monitor, operating system, etc.
                                                 ;*
                                                 ;*
FFFFFFFFFFFFE7A8                                 BYEBYE:
FFFFFFFFFFFFF8A0                                 BYEBYE:
FFFFFFFFFFFFE7A8        33FFF096                        jmp             Monitor
FFFFFFFFFFFFF8A0        33FFF20A                        jmp             Monitor
                                                 ;    MOVE.B    #228,D7         ;return to Tutor
                                                 ;    MOVE.B    #228,D7         ;return to Tutor
                                                 ;      TRAP    #14
                                                 ;      TRAP    #14
 
 
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ; Checkerboard RAM tester
                                                 ; Checkerboard RAM tester
                                                 ;==============================================================================
                                                 ;==============================================================================
                                                 ;
                                                 ;
FFFFFFFFFFFFE7AC                                        code
FFFFFFFFFFFFF8A4                                        code
FFFFFFFFFFFFE7A8 0000000033FFF096               align   16
FFFFFFFFFFFFF8A0 0000000033FFF20A               align   16
FFFFFFFFFFFFE7B0                                        align   16
FFFFFFFFFFFFF8A8 0000000000000000
FFFFFFFFFFFFE7B0                                 ramtest:
FFFFFFFFFFFFF8B0                                        align   16
FFFFFFFFFFFFE7B0        04002009                        or              r8,r0,r0                ; r8 = 0
FFFFFFFFFFFFF8B0                                 ramtest:
FFFFFFFFFFFFE7B4        E6AA5555                ; SETLO
FFFFFFFFFFFFF8B0        04002009                        or              r8,r0,r0                ; r8 = 0
FFFFFFFFFFFFE7B8        EE9556AA                ; SETMID
FFFFFFFFFFFFF8B4        E6AA5555                ; SETLO
FFFFFFFFFFFFE7BC        F68AAAA5                ; SETHI
FFFFFFFFFFFFF8B8        EE9556AA                ; SETMID
FFFFFFFFFFFFE7C0        040D0409                        ori             r1,r0,#0xAAAA5555AAAA5555       ; checkerboard pattern
FFFFFFFFFFFFF8BC        F68AAAA5                ; SETHI
FFFFFFFFFFFFE7C4                                 ramtest2:
FFFFFFFFFFFFF8C0        040D0409                        ori             r1,r0,#0xAAAA5555AAAA5555       ; checkerboard pattern
FFFFFFFFFFFFE7C4        66808000                        sw              r1,[r8]                 ; save the checkerboard to memory
FFFFFFFFFFFFF8C4                                 ramtest2:
FFFFFFFFFFFFE7C8        46810000                        lw              r2,[r8]                 ; read it back
FFFFFFFFFFFFF8C4        66808000                        sw              r1,[r8]                 ; save the checkerboard to memory
FFFFFFFFFFFFE7CC        04110C06                        cmp             r3,r1,r2                ; is it the same ?
FFFFFFFFFFFFF8C8        46810000                        lw              r2,[r8]                 ; read it back
FFFFFFFFFFFFE7D0        BE3000C9                        bne     r3,r0,ramtest1
FFFFFFFFFFFFF8CC        04110C06                        cmp             r3,r1,r2                ; is it the same ?
FFFFFFFFFFFFE7D4        0A840008                        addui   r8,r8,#8                ; increment RAM pointer
FFFFFFFFFFFFF8D0        BE3000C9                        bne     r3,r0,ramtest1
FFFFFFFFFFFFE7D8        E6800000                ; SETLO
FFFFFFFFFFFFF8D4        0A840008                        addui   r8,r8,#8                ; increment RAM pointer
FFFFFFFFFFFFE7DC        EE800010                ; SETMID
FFFFFFFFFFFFF8D8        E6800000                ; SETLO
FFFFFFFFFFFFE7E0        048D0C06                        cmpi    r3,r8,#0x0000_0000_0400_0000
FFFFFFFFFFFFF8DC        EE800010                ; SETMID
FFFFFFFFFFFFE7E4        BE307F00                        blt             r3,r0,ramtest2
FFFFFFFFFFFFF8E0        048D0C06                        cmpi    r3,r8,#0x0000_0000_0400_0000
FFFFFFFFFFFFE7E8                                 ramtest1:
FFFFFFFFFFFFF8E4        BE307F00                        blt             r3,r0,ramtest2
FFFFFFFFFFFFE7E8        04802809                        or              r10,r8,r0               ; r10 = max ram address
FFFFFFFFFFFFF8E8                                 ramtest1:
 
FFFFFFFFFFFFF8E8        04802809                        or              r10,r8,r0               ; r10 = max ram address
                                                        ; readback the checkerboard pattern
                                                        ; readback the checkerboard pattern
FFFFFFFFFFFFE7EC        04002009                        or              r8,r0,r0                ; r8 = 0
FFFFFFFFFFFFF8EC        04002009                        or              r8,r0,r0                ; r8 = 0
FFFFFFFFFFFFE7F0                                 ramtest4:
FFFFFFFFFFFFF8F0                                 ramtest4:
FFFFFFFFFFFFE7F0        46810000                        lw              r2,[r8]
FFFFFFFFFFFFF8F0        46810000                        lw              r2,[r8]
FFFFFFFFFFFFE7F4        E6AA5555                ; SETLO
FFFFFFFFFFFFF8F4        E6AA5555                ; SETLO
FFFFFFFFFFFFE7F8        EE9556AA                ; SETMID
FFFFFFFFFFFFF8F8        EE9556AA                ; SETMID
FFFFFFFFFFFFE7FC        F68AAAA5                ; SETHI
FFFFFFFFFFFFF8FC        F68AAAA5                ; SETHI
FFFFFFFFFFFFE800        042D0C06                        cmpi    r3,r2,#0xAAAA5555AAAA5555
FFFFFFFFFFFFF900        042D0C06                        cmpi    r3,r2,#0xAAAA5555AAAA5555
FFFFFFFFFFFFE804        BE3000C9                        bne             r3,r0,ramtest3
FFFFFFFFFFFFF904        BE3000C9                        bne             r3,r0,ramtest3
FFFFFFFFFFFFE808        08840008                        addi    r8,r8,#8
FFFFFFFFFFFFF908        08840008                        addi    r8,r8,#8
FFFFFFFFFFFFE80C        E6800000                ; SETLO
FFFFFFFFFFFFF90C        E6800000                ; SETLO
FFFFFFFFFFFFE810        EE800004                ; SETMID
FFFFFFFFFFFFF910        EE800004                ; SETMID
FFFFFFFFFFFFE814        048D0C06                        cmpi    r3,r8,#0x0000_0000_0100_0000
FFFFFFFFFFFFF914        048D0C06                        cmpi    r3,r8,#0x0000_0000_0100_0000
FFFFFFFFFFFFE818        BE307EC0                        blt     r3,r0,ramtest4
FFFFFFFFFFFFF918        BE307EC0                        blt     r3,r0,ramtest4
FFFFFFFFFFFFE81C                                 ramtest3:
FFFFFFFFFFFFF91C                                 ramtest3:
FFFFFFFFFFFFE81C        BE850389                        bne             r8,r10,ramtest8 ; check for equal maximum address
FFFFFFFFFFFFF91C        BE850389                        bne             r8,r10,ramtest8 ; check for equal maximum address
 
 
                                                        ; perform ramtest again with inverted checkerboard
                                                        ; perform ramtest again with inverted checkerboard
FFFFFFFFFFFFE820        04002009                        or              r8,r0,r0                ; r8 = 0
FFFFFFFFFFFFF920        04002009                        or              r8,r0,r0                ; r8 = 0
FFFFFFFFFFFFE824        E695AAAA                ; SETLO
FFFFFFFFFFFFF924        E695AAAA                ; SETLO
FFFFFFFFFFFFE828        EEAAA955                ; SETMID
FFFFFFFFFFFFF928        EEAAA955                ; SETMID
FFFFFFFFFFFFE82C        F685555A                ; SETHI
FFFFFFFFFFFFF92C        F685555A                ; SETHI
FFFFFFFFFFFFE830        040D0409                        ori             r1,r0,#0x5555AAAA5555AAAA
FFFFFFFFFFFFF930        040D0409                        ori             r1,r0,#0x5555AAAA5555AAAA
FFFFFFFFFFFFE834                                 ramtest5:
FFFFFFFFFFFFF934                                 ramtest5:
FFFFFFFFFFFFE834        66808000                        sw              r1,[r8]
FFFFFFFFFFFFF934        66808000                        sw              r1,[r8]
FFFFFFFFFFFFE838        46810000                        lw              r2,[r8]
FFFFFFFFFFFFF938        46810000                        lw              r2,[r8]
FFFFFFFFFFFFE83C        04110C06                        cmp             r3,r1,r2
FFFFFFFFFFFFF93C        04110C06                        cmp             r3,r1,r2
FFFFFFFFFFFFE840        BE3000C9                        bne             r3,r0,ramtest6
FFFFFFFFFFFFF940        BE3000C9                        bne             r3,r0,ramtest6
FFFFFFFFFFFFE844        08840008                        addi    r8,r8,#8
FFFFFFFFFFFFF944        08840008                        addi    r8,r8,#8
FFFFFFFFFFFFE848        E6800000                ; SETLO
FFFFFFFFFFFFF948        E6800000                ; SETLO
FFFFFFFFFFFFE84C        EE800004                ; SETMID
FFFFFFFFFFFFF94C        EE800004                ; SETMID
FFFFFFFFFFFFE850        048D0C06                        cmpi    r3,r8,#0x0000_0000_0100_0000
FFFFFFFFFFFFF950        048D0C06                        cmpi    r3,r8,#0x0000_0000_0100_0000
FFFFFFFFFFFFE854        BE307F00                        blt             r3,r0,ramtest5
FFFFFFFFFFFFF954        BE307F00                        blt             r3,r0,ramtest5
FFFFFFFFFFFFE858                                 ramtest6:
FFFFFFFFFFFFF958                                 ramtest6:
FFFFFFFFFFFFE858        04802C09                        or              r11,r8,r0               ; r11 = max ram address
FFFFFFFFFFFFF958        04802C09                        or              r11,r8,r0               ; r11 = max ram address
                                                        ; readback checkerboard
                                                        ; readback checkerboard
FFFFFFFFFFFFE85C        04002009                        or              r8,r0,r0
FFFFFFFFFFFFF95C        04002009                        or              r8,r0,r0
FFFFFFFFFFFFE860                                 ramtest7:
FFFFFFFFFFFFF960                                 ramtest7:
FFFFFFFFFFFFE860        46810000                        lw              r2,[r8]
FFFFFFFFFFFFF960        46810000                        lw              r2,[r8]
FFFFFFFFFFFFE864        E695AAAA                ; SETLO
FFFFFFFFFFFFF964        E695AAAA                ; SETLO
FFFFFFFFFFFFE868        EEAAA955                ; SETMID
FFFFFFFFFFFFF968        EEAAA955                ; SETMID
FFFFFFFFFFFFE86C        F685555A                ; SETHI
FFFFFFFFFFFFF96C        F685555A                ; SETHI
FFFFFFFFFFFFE870        042D0C06                        cmpi    r3,r2,#0x5555AAAA5555AAAA
FFFFFFFFFFFFF970        042D0C06                        cmpi    r3,r2,#0x5555AAAA5555AAAA
FFFFFFFFFFFFE874        BE3000C9                        bne             r3,r0,ramtest8
FFFFFFFFFFFFF974        BE3000C9                        bne             r3,r0,ramtest8
FFFFFFFFFFFFE878        08840008                        addi    r8,r8,#8
FFFFFFFFFFFFF978        08840008                        addi    r8,r8,#8
FFFFFFFFFFFFE87C        E6800000                ; SETLO
FFFFFFFFFFFFF97C        E6800000                ; SETLO
FFFFFFFFFFFFE880        EE800004                ; SETMID
FFFFFFFFFFFFF980        EE800004                ; SETMID
FFFFFFFFFFFFE884        048D0C06                        cmpi    r3,r8,#0x0000_0000_0100_0000
FFFFFFFFFFFFF984        048D0C06                        cmpi    r3,r8,#0x0000_0000_0100_0000
FFFFFFFFFFFFE888        BE307EC0                        blt             r3,r0,ramtest7
FFFFFFFFFFFFF988        BE307EC0                        blt             r3,r0,ramtest7
FFFFFFFFFFFFE88C                                 ramtest8:
FFFFFFFFFFFFF98C                                 ramtest8:
FFFFFFFFFFFFE88C        BE858048                        beq             r8,r11,ramtest9
FFFFFFFFFFFFF98C        BE858048                        beq             r8,r11,ramtest9
FFFFFFFFFFFFE890        0485A014                        min             r8,r8,r11
FFFFFFFFFFFFF990        0485A014                        min             r8,r8,r11
FFFFFFFFFFFFE894                                 ramtest9:
FFFFFFFFFFFFF994                                 ramtest9:
FFFFFFFFFFFFE894        BE850048                        beq             r8,r10,ramtest10
FFFFFFFFFFFFF994        BE850048                        beq             r8,r10,ramtest10
FFFFFFFFFFFFE898        04852014                        min             r8,r8,r10
FFFFFFFFFFFFF998        04852014                        min             r8,r8,r10
FFFFFFFFFFFFE89C                                 ramtest10:
FFFFFFFFFFFFF99C                                 ramtest10:
FFFFFFFFFFFFE89C        66040400                        sw              r8,0x00000400   ;memend
FFFFFFFFFFFFF99C        66040400                        sw              r8,0x00000400   ;memend
FFFFFFFFFFFFE8A0        37EF8000                        ret
FFFFFFFFFFFFF9A0        37EF8000                        ret
 
 
                                                 ;-------------------------------------------
                                                 ;-------------------------------------------
                                                 ;-------------------------------------------
                                                 ;-------------------------------------------
                                                 ;
                                                 ;
FFFFFFFFFFFFE8A4                                 iberr_rout:
FFFFFFFFFFFFF9A4                                 iberr_rout:
FFFFFFFFFFFFE8A4        9A00E92B                        lea             r1,msgiberr
FFFFFFFFFFFFF9A4        9A00FA3B                        lea             r1,msgiberr
FFFFFFFFFFFFE8A8        31FFEFE7                        call    DisplayString
FFFFFFFFFFFFF9A8        31FFF122                        call    DisplayString
FFFFFFFFFFFFE8AC        020085E8                        mfspr   r1,EPC
FFFFFFFFFFFFF9AC        020085E8                        mfspr   r1,EPC
FFFFFFFFFFFFE8B0        31FFF019                        call    DisplayWord
FFFFFFFFFFFFF9B0        31FFF169                        call    DisplayWord
FFFFFFFFFFFFE8B4        00000028                        wait
FFFFFFFFFFFFF9B4        00000028                        wait
FFFFFFFFFFFFE8B8        33FFEC07                        jmp             start
FFFFFFFFFFFFF9B8        33FFEC0B                        jmp             start
FFFFFFFFFFFFE8BC                                 dberr_rout:
FFFFFFFFFFFFF9BC                                 dberr_rout:
FFFFFFFFFFFFE8BC        9A00E910                        lea             r1,msgdberr
FFFFFFFFFFFFF9BC        E6A00100                ; SETLO
FFFFFFFFFFFFE8C0        31FFEFE7                        call    DisplayString
FFFFFFFFFFFFF9C0        EE800400                ; SETMID
FFFFFFFFFFFFE8C4        02008628                        mfspr   r1,ERRADR
FFFFFFFFFFFFF9C4        040D7809                        lw              sp,#0x100200100
FFFFFFFFFFFFE8C8        31FFF019                        call    DisplayWord
FFFFFFFFFFFFF9C8        9A00FA20                        lea             r1,msgdberr
FFFFFFFFFFFFE8CC        9A00E924                        lea             r1,msgEPC
FFFFFFFFFFFFF9CC        31FFF122                        call    DisplayString
FFFFFFFFFFFFE8D0        31FFEFE7                        call    DisplayString
FFFFFFFFFFFFF9D0        02008628                        mfspr   r1,ERRADR
FFFFFFFFFFFFE8D4        020085E8                        mfspr   r1,EPC
FFFFFFFFFFFFF9D4        31FFF169                        call    DisplayWord
FFFFFFFFFFFFE8D8        31FFF019                        call    DisplayWord
FFFFFFFFFFFFF9D8        9A00FA34                        lea             r1,msgEPC
FFFFFFFFFFFFE8DC        31FFF93F                        call    CRLF
FFFFFFFFFFFFF9DC        31FFF122                        call    DisplayString
FFFFFFFFFFFFE8E0        1601001F                        lw              r2,#31
FFFFFFFFFFFFF9E0        020085E8                        mfspr   r1,EPC
FFFFFFFFFFFFE8E4                                 dberr1:
FFFFFFFFFFFFF9E4        31FFF169                        call    DisplayWord
FFFFFFFFFFFFE8E4        02200FA9                        mtspr   PCHI,r2
FFFFFFFFFFFFF9E8        31FFFD80                        call    CRLF
FFFFFFFFFFFFE8E8        DE000000                        nop
FFFFFFFFFFFFF9EC        1601001F                        lw              r2,#31
FFFFFFFFFFFFE8EC        DE000000                        nop
FFFFFFFFFFFFF9F0                                 dberr1:
FFFFFFFFFFFFE8F0        DE000000                        nop
FFFFFFFFFFFFF9F0        02200FA9                        mtspr   PCHI,r2
FFFFFFFFFFFFE8F4        02008FE8                        mfspr   r1,PCHISTORIC
FFFFFFFFFFFFF9F4        DE000000                        nop
FFFFFFFFFFFFE8F8        31FFF019                        call    DisplayWord
FFFFFFFFFFFFF9F8        DE000000                        nop
FFFFFFFFFFFFE8FC        31FFF93F                        call    CRLF
FFFFFFFFFFFFF9FC        DE000000                        nop
FFFFFFFFFFFFE900        BE017F2F                        loop    r2,dberr1
FFFFFFFFFFFFFA00        02008FE8                        mfspr   r1,PCHISTORIC
FFFFFFFFFFFFE904        00000028                        wait
FFFFFFFFFFFFFA04        31FFF169                        call    DisplayWord
FFFFFFFFFFFFE908        33FFEC07                        jmp             start
FFFFFFFFFFFFFA08        31FFFD80                        call    CRLF
FFFFFFFFFFFFE908 0000000033FFEC07               .align  16
FFFFFFFFFFFFFA0C        BE017F2F                        loop    r2,dberr1
FFFFFFFFFFFFE910                                        .align  16
FFFFFFFFFFFFFA10        00000028                        wait
FFFFFFFFFFFFE910                                 msgdberr:
FFFFFFFFFFFFFA14        33FFEC0B                        jmp             start
FFFFFFFFFFFFE910 7375622061746144               db      "Data bus error at: ",0
FFFFFFFFFFFFFA18 0000000000000000               .align  16
FFFFFFFFFFFFE918 6120726F72726520
FFFFFFFFFFFFFA20                                        .align  16
FFFFFFFFFFFFE924                                 msgEPC:
FFFFFFFFFFFFFA20                                 msgdberr:
FFFFFFFFFFFFE920 4350452000203A74               db      " EPC: ",0
FFFFFFFFFFFFFA20 7375622061746144               db      "Data bus error at: ",0
FFFFFFFFFFFFE92B                                 msgiberr:
FFFFFFFFFFFFFA28 6120726F72726520
FFFFFFFFFFFFE928 662072724500203A               db      "Err fetching instruction at: ",0
FFFFFFFFFFFFFA34                                 msgEPC:
FFFFFFFFFFFFE930 20676E6968637465
FFFFFFFFFFFFFA30 4350452000203A74               db      " EPC: ",0
FFFFFFFFFFFFE938 7463757274736E69
FFFFFFFFFFFFFA3B                                 msgiberr:
FFFFFFFFFFFFE940 203A7461206E6F69
FFFFFFFFFFFFFA38 662072724500203A               db      "Err fetching instruction at: ",0
FFFFFFFFFFFFE948 0000000000000000               .align  16
FFFFFFFFFFFFFA40 20676E6968637465
FFFFFFFFFFFFE950                                        .align  16
FFFFFFFFFFFFFA48 7463757274736E69
 
FFFFFFFFFFFFFA50 203A7461206E6F69
 
FFFFFFFFFFFFFA5C                                        .align  4
 
 
                                                 ;------------------------------------------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; IRQ routine
                                                 ; IRQ routine
                                                 ;------------------------------------------------------------------------------
 
                                                 ;
                                                 ;
FFFFFFFFFFFFE950                                 irqrout:
                                                 ; Interrupts are automatically disabled at the time of the interrupt in order
FFFFFFFFFFFFE950        0FEF0020                        subui   sp,sp,#32
                                                 ; to prevent nested interrupts from occuring. Interrupts are re-enabled by
FFFFFFFFFFFFE954        67E08000                        sw              r1,[sp]                                 ; save off a working register
                                                 ; the IRET instruction at the end of the interrupt routine. If the interrupt
FFFFFFFFFFFFE958        67E10008                        sw              r2,8[sp]                                ; and a second work register
                                                 ; turns out to not match a hardware interrupt, then a software context
FFFFFFFFFFFFE95C        67ED0010                        sw              r26,16[sp]                              ; save off implicit constant builder reg
                                                 ; switching interrupt is assumed.
FFFFFFFFFFFFE960        67EF8018                        sw              lr,24[sp]
                                                 ;
FFFFFFFFFFFFE964        E69C0FF0                ; SETLO
                                                 ; This routine uses it's own private interrupt stack; the stack of the
FFFFFFFFFFFFE968        EE800003                ; SETMID
                                                 ; interrupted context is not used at all. A couple of working registers are
FFFFFFFFFFFFE96C        6A0D0421                        inch    r1,PIC                                  ; r1= which IRQ line is active
                                                 ; saved off not on the stack. We can get away with this because nested
 
                                                 ; interrupts are not allowed.
 
                                                 ;------------------------------------------------------------------------------
 
                                                 ;
 
FFFFFFFFFFFFFA5C                                 irqrout:
 
FFFFFFFFFFFFFA5C        660F1460                        sw              sp,sp_save                              ; use our own private stack for interrupt processing
 
FFFFFFFFFFFFFA60        660F9468                        sw              lr,lr_save                              ; so, save off the sp and working registers
 
FFFFFFFFFFFFFA64        660D1480                        sw              r26,r26_save
 
FFFFFFFFFFFFFA68        66009470                        sw              r1,r1_save
 
FFFFFFFFFFFFFA6C        66011478                        sw              r2,r2_save
 
 
 
FFFFFFFFFFFFFA70        E6801000                ; SETLO
 
FFFFFFFFFFFFFA74        EE800400                ; SETMID
 
FFFFFFFFFFFFFA78        040D7809                        lw              sp,#0x1_00001000                ; the second two kbytes
 
FFFFFFFFFFFFFA7C        E69C0FF0                ; SETLO
 
FFFFFFFFFFFFFA80        EE800003                ; SETMID
 
FFFFFFFFFFFFFA84        6A0D0421                        inch    r1,PIC                                  ; r1= which IRQ line is active
 
 
 
                                                 ; Dispatch fork, in order of required timeliness
 
 
 
FFFFFFFFFFFFFA88        B0100D02                        beqi    r1,#2,irq1000Hz
 
FFFFFFFFFFFFFA8C        B0101903                        beqi    r1,#3,irq100Hz
 
FFFFFFFFFFFFFA90        B0102008                        beqi    r1,#8,irqSerial
 
FFFFFFFFFFFFFA94        B010220D                        beqi    r1,#13,irqRaster
 
FFFFFFFFFFFFFA98        B010240F                        beqi    r1,#15,irqKeybd
 
FFFFFFFFFFFFFA9C        B0102601                        beqi    r1,#1,irqColdStart              ; CTRL-ALT-DEL interrupt
 
 
 
                                                 ; Here, none of the hardware interrupts were active so
 
                                                 ; assume software context switch interrupt
 
                                                 ;
 
FFFFFFFFFFFFFAA0        460F1460                        lw              sp,sp_save
 
FFFFFFFFFFFFFAA4        460F9468                        lw              lr,lr_save
 
FFFFFFFFFFFFFAA8        460D1480                        lw              r26,r26_save
 
FFFFFFFFFFFFFAAC        46009470                        lw              r1,r1_save
 
FFFFFFFFFFFFFAB0        46011478                        lw              r2,r2_save
 
FFFFFFFFFFFFFAB4        0000000F                        iepp
 
FFFFFFFFFFFFFAB8        01900020                        iret
 
 
                                                 ; 1000 Hz interrupt
                                                 ; 1000 Hz interrupt
                                                 ; This IRQ must be fast, so it's placed inline
                                                 ; This IRQ must be fast, so it's placed inline. It's also the first
 
                                                 ; IRQ checked for in the interrupt dispatch.
                                                 ; Increments the millisecond counter, and switches to the next context
                                                 ; Increments the millisecond counter, and switches to the next context
                                                 ;
                                                 ;
FFFFFFFFFFFFE970                                 irq1000Hz:
FFFFFFFFFFFFFABC                                 irq1000Hz:
FFFFFFFFFFFFE970        B2101602                        bnei    r1,#2,irq100Hz
FFFFFFFFFFFFFABC        E69CFFFD                ; SETLO
FFFFFFFFFFFFE974        E6BF0000                ; SETLO
FFFFFFFFFFFFFAC0        EE800003                ; SETMID
FFFFFFFFFFFFE978        6A0D0028                        outb    r0,0xFFFFFFFF_FFFF0000  ; acknowledge interrupt
FFFFFFFFFFFFFAC4        6A0D0028                        outb    r0,0xDCFFFD                             ; acknowledge interrupt
FFFFFFFFFFFFE97C        46009400                        lw              r1,Milliseconds                 ; increment milliseconds count
FFFFFFFFFFFFFAC8        46009400                        lw              r1,Milliseconds                 ; increment milliseconds count
FFFFFFFFFFFFE980        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFFACC        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFE984        66009400                        sw              r1,Milliseconds
FFFFFFFFFFFFFAD0        66009400                        sw              r1,Milliseconds
FFFFFFFFFFFFE988        E6900000                ; SETLO
FFFFFFFFFFFFFAD4        460F1460                        lw              sp,sp_save
FFFFFFFFFFFFE98C        EE800003                ; SETMID
FFFFFFFFFFFFFAD8        460F9468                        lw              lr,lr_save
FFFFFFFFFFFFE990        6A0D082D                        lea             r2,TEXTSCR
FFFFFFFFFFFFFADC        460D1480                        lw              r26,r26_save
FFFFFFFFFFFFE994        8220814C                        inch    r1,332[r2]
FFFFFFFFFFFFFAE0        46009470                        lw              r1,r1_save
FFFFFFFFFFFFE998        0A108001                        addui   r1,r1,#1
FFFFFFFFFFFFFAE4        46011478                        lw              r2,r2_save
FFFFFFFFFFFFE99C        9220814C                        outc    r1,332[r2]
FFFFFFFFFFFFFAE8        0000000F                        iepp                                                    ; move to the next context
FFFFFFFFFFFFE9A0        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFFAEC        01900020                        iret                                                    ; return to the next context
FFFFFFFFFFFFE9A4        47ED0010                        lw              r26,16[sp]                              ; restore registers from stack
 
FFFFFFFFFFFFE9A8        47E10008                        lw              r2,8[sp]
 
FFFFFFFFFFFFE9AC        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFE9B0        0BEF0020                        addui   sp,sp,#32                               ; restore stack pointer
 
FFFFFFFFFFFFE9B4        0000000F                        iepp                                                    ; move to the next context
 
FFFFFFFFFFFFE9B8        DE000000                        nop
 
FFFFFFFFFFFFE9BC        DE000000                        nop
 
FFFFFFFFFFFFE9C0        DE000000                        nop
 
FFFFFFFFFFFFE9C4        01900020                        iret                                                    ; return to the next context
 
 
 
                                                 ; 100 Hz interrupt
                                                 ; 100 Hz interrupt
                                                 ; This IRQ could have some work to do, including flashing a cursor. So
                                                 ; This IRQ could have some work to do, including flashing a cursor. So
                                                 ; we call a subroutine.
                                                 ; we call a subroutine.
                                                 ;
                                                 ;
FFFFFFFFFFFFE9C8                                 irq100Hz:
FFFFFFFFFFFFFAF0                                 irq100Hz:
FFFFFFFFFFFFE9C8        B2100403                        bnei    r1,#3,irqSerial
FFFFFFFFFFFFFAF0        4600B000                        lw              r1,p100IRQvec
FFFFFFFFFFFFE9CC        4600B000                        lw              r1,p100IRQvec
 
                                                 ;      jal             lr,[r1]
                                                 ;      jal             lr,[r1]
FFFFFFFFFFFFE9D0        31FFEE3B                        call    Pulse100
FFFFFFFFFFFFFAF4        31FFEF73                        call    Pulse100
FFFFFFFFFFFFE9D4        BE0001AA                        bra             irqret
FFFFFFFFFFFFFAF8                                 irqret:
 
FFFFFFFFFFFFFAF8        460F1460                        lw              sp,sp_save
 
FFFFFFFFFFFFFAFC        460F9468                        lw              lr,lr_save
 
FFFFFFFFFFFFFB00        460D1480                        lw              r26,r26_save
 
FFFFFFFFFFFFFB04        46009470                        lw              r1,r1_save
 
FFFFFFFFFFFFFB08        46011478                        lw              r2,r2_save
 
FFFFFFFFFFFFFB0C        01900020                        iret
 
 
 
FFFFFFFFFFFFFB10                                 irqSerial:
 
FFFFFFFFFFFFFB10        4600B010                        lw              r1,serialIRQvec
 
FFFFFFFFFFFFFB14        341F8000                        jal             lr,[r1]
 
FFFFFFFFFFFFFB18        BE007F0A                        bra             irqret
 
 
FFFFFFFFFFFFE9D8                                 irqSerial:
FFFFFFFFFFFFFB1C                                 irqRaster:
FFFFFFFFFFFFE9D8        B2100408                        bnei    r1,#8,irqRaster
FFFFFFFFFFFFFB1C        4600B018                        lw              r1,rasterIRQvec
FFFFFFFFFFFFE9DC        4600B010                        lw              r1,serialIRQvec
 
FFFFFFFFFFFFE9E0        341F8000                        jal             lr,[r1]
 
FFFFFFFFFFFFE9E4        BE00012A                        bra             irqret
 
 
 
FFFFFFFFFFFFE9E8                                 irqRaster:
 
FFFFFFFFFFFFE9E8        B210040D                        bnei    r1,#13,irqKeybd
 
FFFFFFFFFFFFE9EC        4600B018                        lw              r1,rasterIRQvec
 
                                                 ;      jal             lr,[r1]
                                                 ;      jal             lr,[r1]
FFFFFFFFFFFFE9F0        31FFF2B1                        call    RasterIRQfn
FFFFFFFFFFFFFB20        31FFF46B                        call    RasterIRQfn
FFFFFFFFFFFFE9F4        BE0000AA                        bra             irqret
FFFFFFFFFFFFFB24        BE007EAA                        bra             irqret
 
 
FFFFFFFFFFFFE9F8                                 irqKeybd:
FFFFFFFFFFFFFB28                                 irqKeybd:
FFFFFFFFFFFFE9F8        B0118901                        beqi    r1,#1,ColdStart                 ; CTRL-ALT-DEL interrupt
FFFFFFFFFFFFFB28        4600B008                        lw              r1,keybdIRQvec
FFFFFFFFFFFFE9FC        B210030F                        bnei    r1,#15,irqret
FFFFFFFFFFFFFB2C        31FFEEF0                        call    KeybdIRQ
FFFFFFFFFFFFEA00        4600B008                        lw              r1,keybdIRQvec
 
FFFFFFFFFFFFEA04        31FFEDF1                        call    KeybdIRQ
 
                                                 ;      jal             lr,[r1]
                                                 ;      jal             lr,[r1]
 
FFFFFFFFFFFFFB30        BE007E4A                        bra             irqret
 
 
FFFFFFFFFFFFEA08                                 irqret:
FFFFFFFFFFFFFB34                                 irqColdStart:
FFFFFFFFFFFFEA08        47EF8018                        lw              lr,24[sp]
FFFFFFFFFFFFFB34        33FFEC0B                        jmp             ColdStart
FFFFFFFFFFFFEA0C        47ED0010                        lw              r26,16[sp]                              ; restore registers from stack
 
FFFFFFFFFFFFEA10        47E10008                        lw              r2,8[sp]
 
FFFFFFFFFFFFEA14        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFEA18        0BEF0020                        addui   sp,sp,#32                               ; restore stack pointer
 
FFFFFFFFFFFFEA1C        01900020                        iret
 
 
 
                                                 ;-------------------------------------------
                                                 ;------------------------------------------------------------------------------
                                                 ; NMI routine
                                                 ; NMI routine
 
                                                 ;
 
                                                 ; The NMI line is tied to the parity error signal. But also any non-initialized
 
                                                 ; interrupts get sent here.
 
                                                 ;------------------------------------------------------------------------------
 
                                                 ;
 
FFFFFFFFFFFFFB38                                 nmirout:
 
FFFFFFFFFFFFFB38        660F1460                        sw              sp,sp_save
 
FFFFFFFFFFFFFB3C        66009470                        sw              r1,r1_save
 
FFFFFFFFFFFFFB40        660D1480                        sw              r26,r26_save
 
FFFFFFFFFFFFFB44        E6801000                ; SETLO
 
FFFFFFFFFFFFFB48        EE800400                ; SETMID
 
FFFFFFFFFFFFFB4C        040D7809                        lw              sp,#0x100001000
 
FFFFFFFFFFFFFB50        E69CFFFE                ; SETLO
 
FFFFFFFFFFFFFB54        EE800003                ; SETMID
 
FFFFFFFFFFFFFB58        6A0D0028                        outb    r0,0xDCFFFE             ; acknowledge interrupt
 
FFFFFFFFFFFFFB5C        9A00FB80                        lea             r1,msgPerr
 
FFFFFFFFFFFFFB60        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFFB64        02008868                        mfspr   r1,IPC
 
FFFFFFFFFFFFFB68        31FFF169                        call    DisplayWord
 
FFFFFFFFFFFFFB6C        31FFFD80                        call    CRLF
 
FFFFFFFFFFFFFB70        460F1460                        lw              sp,sp_save
 
FFFFFFFFFFFFFB74        46009470                        lw              r1,r1_save
 
FFFFFFFFFFFFFB78        460D1480                        lw              r26,r26_save
 
FFFFFFFFFFFFFB7C        01900020                        iret
 
 
 
FFFFFFFFFFFFFB80                                 msgPerr:
 
FFFFFFFFFFFFFB80 6520797469726150               db      "Parity error at: ",0
 
FFFFFFFFFFFFFB88 3A746120726F7272
 
 
 
 
 
                                                 ;-------------------------------------------
 
                                                 ; Unimplemented instructions end up here
                                                 ;-------------------------------------------
                                                 ;-------------------------------------------
FFFFFFFFFFFFEA20                                 nmirout:
FFFFFFFFFFFFFB94                                        .align 4
FFFFFFFFFFFFEA20        01900020                        iret
FFFFFFFFFFFFFB94                                 ui_irout:
 
FFFFFFFFFFFFFB94        0FEF0008                        subui   sp,sp,#8
 
FFFFFFFFFFFFFB98        67E08000                        sw              r1,[sp]
 
FFFFFFFFFFFFFB9C        9A00FBC0                        lea             r1,msgUnimp
 
FFFFFFFFFFFFFBA0        31FFF122                        call    DisplayString
 
FFFFFFFFFFFFFBA4        02008868                        mfspr   r1,IPC
 
FFFFFFFFFFFFFBA8        31FFF169                        call    DisplayWord
 
FFFFFFFFFFFFFBAC        31FFFD80                        call    CRLF
 
FFFFFFFFFFFFFBB0        47E08000                        lw              r1,[sp]
 
FFFFFFFFFFFFFBB4        0BEF0008                        addui   sp,sp,#8
 
                                                        ; hang the context
 
FFFFFFFFFFFFFBB8                                 ui_irout1:
 
FFFFFFFFFFFFFBB8        BE00000A                        bra             ui_irout1
 
FFFFFFFFFFFFFBBC        01900020                        iret
 
 
 
FFFFFFFFFFFFFBC0                                 msgUnimp:
 
FFFFFFFFFFFFFBC0 6D656C706D696E55               db      "Unimplemented instruction at: ",0
 
FFFFFFFFFFFFFBC8 6E69206465746E65
 
FFFFFFFFFFFFFBD0 6F69746375727473
 
 
                                                 ;-------------------------------------------
                                                 ;-------------------------------------------
                                                 ; Handle miss on Data TLB
                                                 ; Handle miss on Data TLB
                                                 ;-------------------------------------------
                                                 ;-------------------------------------------
FFFFFFFFFFFFEA24                                 DTLBHandler:
FFFFFFFFFFFFFBD8 0000203A7461206E               .align  4
FFFFFFFFFFFFEA24        E6BF0000                ; SETLO
FFFFFFFFFFFFFBE0                                        .align  4
FFFFFFFFFFFFEA28        6A0D0413                        sw              r1,0xFFFF_FFFF_FFFF_0000
FFFFFFFFFFFFFBE0                                 DTLBHandler:
FFFFFFFFFFFFEA2C        E6BF0008                ; SETLO
FFFFFFFFFFFFFBE0        E6BF0000                ; SETLO
FFFFFFFFFFFFEA30        6A0D0813                        sw              r2,0xFFFF_FFFF_FFFF_0008
FFFFFFFFFFFFFBE4        6A0D0413                        sw              r1,0xFFFF_FFFF_FFFF_0000
FFFFFFFFFFFFEA34                                 dh1:
FFFFFFFFFFFFFBE8        E6BF0008                ; SETLO
FFFFFFFFFFFFEA34        02008034                        omgi    r1,#0           ; try open mutex gate #0 (TLB protector)
FFFFFFFFFFFFFBEC        6A0D0813                        sw              r2,0xFFFF_FFFF_FFFF_0008
FFFFFFFFFFFFEA38        BE107FE9                        bne             r1,r0,dh1       ; spinlock if gate is closed
FFFFFFFFFFFFFBF0                                 dh1:
FFFFFFFFFFFFEA3C        02008128                        mfspr   r1,PTA          ; get the page table address
FFFFFFFFFFFFFBF0        02008034                        omgi    r1,#0           ; try open mutex gate #0 (TLB protector)
FFFFFFFFFFFFEA40        02010228                        mfspr   r2,BadVAddr     ; get the bad virtual address
FFFFFFFFFFFFFBF4        BE107FE9                        bne             r1,r0,dh1       ; spinlock if gate is closed
FFFFFFFFFFFFEA44        022002E9                        mtspr   TLBVirtPage,r2  ; which virtual address to update
FFFFFFFFFFFFFBF8        02008128                        mfspr   r1,PTA          ; get the page table address
FFFFFFFFFFFFEA48        06211A01                        shrui   r2,r2,#13       ; turn va into index
FFFFFFFFFFFFFBFC        02010228                        mfspr   r2,BadVAddr     ; get the bad virtual address
FFFFFFFFFFFFEA4C        04110403                        addu    r1,r1,r2
FFFFFFFFFFFFFC00        022002E9                        mtspr   TLBVirtPage,r2  ; which virtual address to update
FFFFFFFFFFFFEA50        46110000                        lw              r2,[r1]         ; get the physical address from the table
FFFFFFFFFFFFFC04        06211A01                        shrui   r2,r2,#13       ; turn va into index
FFFFFFFFFFFFEA54        14210000                        and             r2,r2,#FFFF_FFFF_FFFF_E000      ; mask off lower bits
FFFFFFFFFFFFFC08        04110403                        addu    r1,r1,r2
FFFFFFFFFFFFEA58        022002A9                        mtspr   TLBPhysPage0,r2 ;
FFFFFFFFFFFFFC0C        46110000                        lw              r2,[r1]         ; get the physical address from the table
FFFFFFFFFFFFEA5C        46110008                        lw              r2,8[r1]        ; get the physical address from the table
FFFFFFFFFFFFFC10        14210000                        and             r2,r2,#FFFF_FFFF_FFFF_E000      ; mask off lower bits
FFFFFFFFFFFFEA60        14210000                        and             r2,r2,#FFFF_FFFF_FFFF_E000      ; mask off lower bits
FFFFFFFFFFFFFC14        022002A9                        mtspr   TLBPhysPage0,r2 ;
FFFFFFFFFFFFEA64        022002E9                        mtspr   TLBPhysPage1,r2 ;
FFFFFFFFFFFFFC18        46110008                        lw              r2,8[r1]        ; get the physical address from the table
FFFFFFFFFFFFEA68        02000034                        tlbwr                           ; update a random entry in the TLB
FFFFFFFFFFFFFC1C        14210000                        and             r2,r2,#FFFF_FFFF_FFFF_E000      ; mask off lower bits
FFFFFFFFFFFFEA6C        02000035                        cmgi    #0                      ; close the mutex gate
FFFFFFFFFFFFFC20        022002E9                        mtspr   TLBPhysPage1,r2 ;
FFFFFFFFFFFFEA70        E6BF0000                ; SETLO
FFFFFFFFFFFFFC24        02000034                        tlbwr                           ; update a random entry in the TLB
FFFFFFFFFFFFEA74        6A0D0403                        lw              r1,0xFFFF_FFFF_FFFF_0000
FFFFFFFFFFFFFC28        02000035                        cmgi    #0                      ; close the mutex gate
FFFFFFFFFFFFEA78        E6BF0008                ; SETLO
FFFFFFFFFFFFFC2C        E6BF0000                ; SETLO
FFFFFFFFFFFFEA7C        6A0D0803                        lw              r2,0xFFFF_FFFF_FFFF_0008
FFFFFFFFFFFFFC30        6A0D0403                        lw              r1,0xFFFF_FFFF_FFFF_0000
FFFFFFFFFFFFEA80        01900020                        iret
FFFFFFFFFFFFFC34        E6BF0008                ; SETLO
FFFFFFFFFFFFEA80 0000000001900020               .align  32
FFFFFFFFFFFFFC38        6A0D0803                        lw              r2,0xFFFF_FFFF_FFFF_0008
FFFFFFFFFFFFEA88 6A0D0803E6BF0008
FFFFFFFFFFFFFC3C        01900020                        iret
FFFFFFFFFFFFEA90 0000000000000000
FFFFFFFFFFFFFC40                                        .align  32
FFFFFFFFFFFFEA98 0000000000000000
 
FFFFFFFFFFFFEAA0                                        .align  32
 
 
 
FFFFFFFFFFFFFFB0                                        org             0xFFFF_FFFF_FFFF_FFB0
FFFFFFFFFFFFFFB0                                        org             0xFFFF_FFFF_FFFF_FFB0
FFFFFFFFFFFFFFB0        33FFFA89                        jmp             DTLBHandler
FFFFFFFFFFFFFFB0        33FFFEF8                        jmp             DTLBHandler
FFFFFFFFFFFFFFB4        DE000000                        nop
FFFFFFFFFFFFFFB4        DE000000                        nop
FFFFFFFFFFFFFFB8        DE000000                        nop
FFFFFFFFFFFFFFB8        DE000000                        nop
FFFFFFFFFFFFFFC0                                        org             0xFFFF_FFFF_FFFF_FFC0
FFFFFFFFFFFFFFC0                                        org             0xFFFF_FFFF_FFFF_FFC0
FFFFFFFFFFFFFFC0        33FFFA89                        jmp             DTLBHandler
FFFFFFFFFFFFFFC0        33FFFEF8                        jmp             DTLBHandler
FFFFFFFFFFFFFFC4        DE000000                        nop
FFFFFFFFFFFFFFC4        DE000000                        nop
FFFFFFFFFFFFFFC8        DE000000                        nop
FFFFFFFFFFFFFFC8        DE000000                        nop
 
 
                                                        ; NMI vector
 
FFFFFFFFFFFFFFE0                                        org     0xFFFF_FFFF_FFFF_FFE0
FFFFFFFFFFFFFFE0                                        org     0xFFFF_FFFF_FFFF_FFE0
FFFFFFFFFFFFFFE0        33FFFA88                        jmp             nmirout
FFFFFFFFFFFFFFE0 0000000000000000               dw              0                ;
FFFFFFFFFFFFFFE4        DE000000                        nop
FFFFFFFFFFFFFFE8 0000000000000000               dw              0                ;
FFFFFFFFFFFFFFE8        DE000000                        nop
 
 
 
                                                        ; RST vector
                                                        ; RST vector
FFFFFFFFFFFFFFF0                                        org             0xFFFF_FFFF_FFFF_FFF0
FFFFFFFFFFFFFFF0                                        org             0xFFFF_FFFF_FFFF_FFF0
FFFFFFFFFFFFFFF0        33FFEC07                        jmp             start
FFFFFFFFFFFFFFF0        33FFEC0B                        jmp             start
FFFFFFFFFFFFFFF4        DE000000                        nop
 
FFFFFFFFFFFFFFF8        DE000000                        nop
 
 
 
 
                                                 ; ROM checksum goes here
 
 
 
FFFFFFFFFFFFFFF8                                        org             0xFFFF_FFFF_FFFF_FFF8
 
FFFFFFFFFFFFFFF8 0000000000000000               dw              0
 
 
FFFFFFFFFFFFFFFC        00000000
 
0000000000000000        00000000
0000000000000000        00000000
 
0000000000000004        00000000
 
 
 
 
Symbol Table:
Symbol Table:
==========================================================
==========================================================
Name                   Typ  Segment     Address/Value
Name                   Typ  Segment     Address/Value
Line 5735... Line 7384...
CR                      C       constant        000000000000000D
CR                      C       constant        000000000000000D
LF                      C       constant        000000000000000A
LF                      C       constant        000000000000000A
TAB                     C       constant        0000000000000009
TAB                     C       constant        0000000000000009
CTRLC                   C       constant        0000000000000003
CTRLC                   C       constant        0000000000000003
CTRLH                   C       constant        0000000000000008
CTRLH                   C       constant        0000000000000008
 
CTRLI                   C       constant        0000000000000009
 
CTRLJ                   C       constant        000000000000000A
 
CTRLK                   C       constant        000000000000000B
 
CTRLM                   C       constant        000000000000000D
CTRLS                   C       constant        0000000000000013
CTRLS                   C       constant        0000000000000013
CTRLX                   C       constant        0000000000000018
CTRLX                   C       constant        0000000000000018
XON                     C       constant        0000000000000011
XON                     C       constant        0000000000000011
XOFF                    C       constant        0000000000000013
XOFF                    C       constant        0000000000000013
 
EX_IRQ                  C       constant        00000000000001C1
DATA_PRESENT            C       constant        0000000000000001
DATA_PRESENT            C       constant        0000000000000001
XMIT_NOT_FULL           C       constant        0000000000000020
XMIT_NOT_FULL           C       constant        0000000000000020
BUFLEN                  C       constant        0000000000000050
BUFLEN                  C       constant        0000000000000050
STACKTOP0               C       constant        FFFFFFFFFFFEFFF8
STACKTOP0               C       constant        FFFFFFFFFFFEFFF8
STACKTOP1               C       constant        FFFFFFFFFFFEFBF8
STACKTOP1               C       constant        FFFFFFFFFFFEFBF8
Line 5791... Line 7445...
TCBr27                  C       constant        00000000000000D0
TCBr27                  C       constant        00000000000000D0
TCBr28                  C       constant        00000000000000D8
TCBr28                  C       constant        00000000000000D8
TCBr29                  C       constant        00000000000000E0
TCBr29                  C       constant        00000000000000E0
TCBr30                  C       constant        00000000000000E8
TCBr30                  C       constant        00000000000000E8
TCBr31                  C       constant        00000000000000F0
TCBr31                  C       constant        00000000000000F0
 
SCREENGATE              C       constant        0000000000000000
 
KEYBDGATE               C       constant        0000000000000001
 
VIDEOGATE               C       constant        0000000000000002
 
CARDGATE                C       constant        0000000000000003
warmStart               C       constant        0000000000001020
warmStart               C       constant        0000000000001020
usrJmp                  C       constant        0000000000001028
usrJmp                  C       constant        0000000000001028
TickIRQAddr             C       constant        0000000000001030
TickIRQAddr             C       constant        0000000000001030
TaskBlock               C       constant        0000000000001038
TaskBlock               C       constant        0000000000001038
tencount                C       constant        00000000000013F8
 
Milliseconds            C       constant        0000000000001400
Milliseconds            C       constant        0000000000001400
Lastloc                 C       constant        0000000000001408
Lastloc                 C       constant        0000000000001408
 
CharColor               C       constant        0000000000001410
ScreenColor             C       constant        0000000000001414
ScreenColor             C       constant        0000000000001414
CursorRow               C       constant        0000000000001416
CursorRow               C       constant        0000000000001417
CursorCol               C       constant        0000000000001418
CursorCol               C       constant        0000000000001418
CursorFlash             C       constant        000000000000141A
CursorFlash             C       constant        000000000000141A
KeybdEcho               C       constant        000000000000141C
KeybdEcho               C       constant        000000000000141C
KeybdBuffer             C       constant        0000000000001440
KeybdBuffer             C       constant        0000000000001440
KeybdHead               C       constant        0000000000001450
KeybdHead               C       constant        0000000000001450
KeybdTail               C       constant        0000000000001451
KeybdTail               C       constant        0000000000001451
 
sp_save                 C       constant        0000000000001460
 
lr_save                 C       constant        0000000000001468
 
r1_save                 C       constant        0000000000001470
 
r2_save                 C       constant        0000000000001478
 
r26_save                C       constant        0000000000001480
Score                   C       constant        0000000000001500
Score                   C       constant        0000000000001500
Manpos                  C       constant        0000000000001508
Manpos                  C       constant        0000000000001508
MissileActive           C       constant        0000000000001510
MissileActive           C       constant        0000000000001510
MissileX                C       constant        0000000000001512
MissileX                C       constant        0000000000001512
MissileY                C       constant        0000000000001514
MissileY                C       constant        0000000000001514
Line 5848... Line 7511...
RunningTCB              C       constant        00000000000020A6
RunningTCB              C       constant        00000000000020A6
NextToRunTCB            C       constant        00000000000020A8
NextToRunTCB            C       constant        00000000000020A8
r1save                  C       constant        00000000000020B0
r1save                  C       constant        00000000000020B0
r2save                  C       constant        00000000000020B8
r2save                  C       constant        00000000000020B8
AXCstart                C       constant        00000000000020C0
AXCstart                C       constant        00000000000020C0
 
ctx0start               C       constant        00000000000020D0
 
ctx1start               C       constant        00000000000020D8
 
ctx2start               C       constant        00000000000020E0
 
ctx3start               C       constant        00000000000020E8
 
ctx4start               C       constant        00000000000020F0
 
ctx5start               C       constant        00000000000020F8
 
ctx6start               C       constant        0000000000002100
 
ctx7start               C       constant        0000000000002108
 
ctx8start               C       constant        0000000000002110
 
ctx9start               C       constant        0000000000002118
 
ctx10start              C       constant        0000000000002120
 
ctx11start              C       constant        0000000000002128
 
ctx12start              C       constant        0000000000002130
 
ctx13start              C       constant        0000000000002138
 
ctx14start              C       constant        0000000000002140
 
ctx15start              C       constant        0000000000002148
 
sp_saves                C       constant        0000000000002200
 
sp_saves_end            C       constant        0000000000002280
p100IRQvec              C       constant        0000000000003000
p100IRQvec              C       constant        0000000000003000
keybdIRQvec             C       constant        0000000000003008
keybdIRQvec             C       constant        0000000000003008
serialIRQvec            C       constant        0000000000003010
serialIRQvec            C       constant        0000000000003010
rasterIRQvec            C       constant        0000000000003018
rasterIRQvec            C       constant        0000000000003018
 
startSector             C       constant        00000000000030F8
 
BPB                     C       constant        0000000000003100
TEXTSCR                 C       constant        0000000000D00000
TEXTSCR                 C       constant        0000000000D00000
COLORSCR                C       constant        0000000000D10000
COLORSCR                C       constant        0000000000D10000
TEXTREG                 C       constant        0000000000DA0000
TEXTREG                 C       constant        0000000000DA0000
TEXT_COLS               C       constant        0000000000000000
TEXT_COLS               C       constant        0000000000000000
TEXT_ROWS               C       constant        0000000000000002
TEXT_ROWS               C       constant        0000000000000002
Line 5866... Line 7549...
UART_LS                 C       constant        0000000000DC0A01
UART_LS                 C       constant        0000000000DC0A01
UART_IS                 C       constant        0000000000DC0A03
UART_IS                 C       constant        0000000000DC0A03
UART_IE                 C       constant        0000000000DC0A04
UART_IE                 C       constant        0000000000DC0A04
UART_MC                 C       constant        0000000000DC0A06
UART_MC                 C       constant        0000000000DC0A06
DATETIME                C       constant        0000000000DC0400
DATETIME                C       constant        0000000000DC0400
 
SPIMASTER               C       constant        0000000000DC0500
 
SPI_MASTER_VERSION_REG  C       constant        0000000000000000
 
SPI_MASTER_CONTROL_REG  C       constant        0000000000000001
 
SPI_TRANS_TYPE_REG      C       constant        0000000000000002
 
SPI_TRANS_CTRL_REG      C       constant        0000000000000003
 
SPI_TRANS_STATUS_REG    C       constant        0000000000000004
 
SPI_TRANS_ERROR_REG     C       constant        0000000000000005
 
SPI_DIRECT_ACCESS_DATA_REG      C       constant        0000000000000006
 
SPI_SD_ADDR_7_0_REG     C       constant        0000000000000007
 
SPI_SD_ADDR_15_8_REG    C       constant        0000000000000008
 
SPI_SD_ADDR_23_16_REG   C       constant        0000000000000009
 
SPI_SD_ADDR_31_24_REG   C       constant        000000000000000A
 
SPI_RX_FIFO_DATA_REG    C       constant        0000000000000010
 
SPI_RX_FIFO_DATA_COUNT_MSB      C       constant        0000000000000012
 
SPI_RX_FIFO_DATA_COUNT_LSB      C       constant        0000000000000013
 
SPI_RX_FIFO_CTRL_REG    C       constant        0000000000000014
 
SPI_TX_FIFO_DATA_REG    C       constant        0000000000000020
 
SPI_TX_FIFO_CTRL_REG    C       constant        0000000000000024
 
SPI_INIT_SD             C       constant        0000000000000001
 
SPI_TRANS_START         C       constant        0000000000000001
 
SPI_TRANS_BUSY          C       constant        0000000000000001
 
SPI_INIT_NO_ERROR       C       constant        0000000000000000
 
SPI_READ_NO_ERROR       C       constant        0000000000000000
 
RW_READ_SD_BLOCK        C       constant        0000000000000002
 
RW_WRITE_SD_BLOCK       C       constant        0000000000000003
PIC                     C       constant        0000000000DC0FF0
PIC                     C       constant        0000000000DC0FF0
PIC_IE                  C       constant        0000000000DC0FF2
PIC_IE                  C       constant        0000000000DC0FF2
PSG                     C       constant        0000000000D50000
PSG                     C       constant        0000000000D50000
PSGFREQ0                C       constant        0000000000D50000
PSGFREQ0                C       constant        0000000000D50000
PSGPW0                  C       constant        0000000000D50002
PSGPW0                  C       constant        0000000000D50002
PSGCTRL0                C       constant        0000000000D50004
PSGCTRL0                C       constant        0000000000D50004
PSGADSR0                C       constant        0000000000D50006
PSGADSR0                C       constant        0000000000D50006
SPRRAM                  C       constant        0000000000D80000
SPRRAM                  C       constant        0000000000D80000
AC97                    C       constant        0000000000DC1000
AC97                    C       constant        0000000000DC1000
 
TMP                     C       constant        0000000000DC0300
LED                     C       constant        0000000000DC0600
LED                     C       constant        0000000000DC0600
 
ETHMAC                  C       constant        0000000000DC2000
 
CONFIGREC               C       constant        0000000000DCFFFF
 
MIIMODER                C       constant        0000000000000028
 
MIIADDRESS              C       constant        0000000000000030
GACCEL                  C       constant        0000000000DAE000
GACCEL                  C       constant        0000000000DAE000
RASTERIRQ               C       constant        0000000000DA0100
RASTERIRQ               C       constant        0000000000DA0100
BOOT_STACK              C       constant        FFFFFFFFFFFEFFF8
BOOT_STACK              C       constant        FFFFFFFFFFFEFFF8
SPRITEREGS              C       constant        0000000000DAD000
SPRITEREGS              C       constant        0000000000DAD000
BITMAPSCR               C       constant        0000000100200000
BITMAPSCR               C       constant        0000000100200000
 
BOOTJMP                 C       constant        0000000100800204
txempty                 C       constant        0000000000000040
txempty                 C       constant        0000000000000040
rxfull                  C       constant        0000000000000001
rxfull                  C       constant        0000000000000001
txtWidth                L       bss             0000000000001038
txtWidth                L       bss             0000000000001048
txtHeight               L       bss             0000000000001039
txtHeight               L       bss             0000000000001049
cursx                   L       bss             000000000000103A
cursx                   L       bss             000000000000104A
cursy                   L       bss             000000000000103B
cursy                   L       bss             000000000000104B
pos                     L       bss             000000000000103C
pos                     L       bss             000000000000104C
dh                      L       bss             000000000000103C
dh                      L       bss             000000000000104C
0                       L       bss             000000000000103C
0                       L       bss             000000000000104C
charToPrint             L       bss             0000000000001040
charToPrint             L       bss             000000000000104C
fgColor                 L       bss             0000000000001042
fgColor                 L       bss             000000000000104E
bkColor                 L       bss             0000000000001045
bkColor                 L       bss             0000000000001051
cursFlash               L       bss             0000000000001046
cursFlash               L       bss             0000000000001052
lineLinkTbl             L       bss             0000000000001047
lineLinkTbl             L       bss             0000000000001053
typef                   L       bss             0000000000001080
typef                   L       bss             0000000000001085
OSSP                    L       bss             0000000000001088
OSSP                    L       bss             0000000000001088
CURRNT                  L       bss             0000000000001090
CURRNT                  L       bss             0000000000001090
STKGOS                  L       bss             0000000000001098
STKGOS                  L       bss             0000000000001098
STKINP                  L       bss             00000000000010A0
STKINP                  L       bss             00000000000010A0
LOPVAR                  L       bss             00000000000010A8
LOPVAR                  L       bss             00000000000010A8
Line 5914... Line 7628...
FVARBGN                 L       bss             00000000000010F0
FVARBGN                 L       bss             00000000000010F0
STKBOT                  L       bss             00000000000010F8
STKBOT                  L       bss             00000000000010F8
NUMWKA                  L       bss             0000000000001100
NUMWKA                  L       bss             0000000000001100
BUFFER                  L       bss             000000000000111B
BUFFER                  L       bss             000000000000111B
TXT                     C       constant        0000000100600000
TXT                     C       constant        0000000100600000
SerialGetChar           L       code            FFFFFFFFFFFFB550
start                   L       code            FFFFFFFFFFFFB02C
SerialPutChar           L       code            FFFFFFFFFFFFB430
ColdStart               L       code            FFFFFFFFFFFFB02C
SetKeyboardEcho         L       code            FFFFFFFFFFFFB818
ict1                    L       code            FFFFFFFFFFFFB084
KeybdCheckForKey        L       code            FFFFFFFFFFFFB874
ctxstart3               L       code            FFFFFFFFFFFFB214
KeybdGetChar            L       code            FFFFFFFFFFFFB820
ctxstart2               L       code            FFFFFFFFFFFFB224
DisplayChar             L       code            FFFFFFFFFFFFBD1C
ctxstart                L       code            FFFFFFFFFFFFB228
DisplayString           L       code            FFFFFFFFFFFFBF9C
ctxstart1               L       code            FFFFFFFFFFFFB3FC
start                   L       code            FFFFFFFFFFFFB01C
csj5                    L       code            FFFFFFFFFFFFB240
ColdStart               L       code            FFFFFFFFFFFFB01C
skip5                   L       code            FFFFFFFFFFFFB2E4
ict1                    L       code            FFFFFFFFFFFFB028
skip4                   L       code            FFFFFFFFFFFFB2FC
ctxstart3               L       code            FFFFFFFFFFFFB1F8
dcokay                  L       code            FFFFFFFFFFFFB330
ctxstart2               L       code            FFFFFFFFFFFFB210
skip1                   L       code            FFFFFFFFFFFFB368
ctxstart                L       code            FFFFFFFFFFFFB214
skip2                   L       code            FFFFFFFFFFFFB3B0
ctxstart1               L       code            FFFFFFFFFFFFB318
skip3                   L       code            FFFFFFFFFFFFB3D8
csj5                    L       code            FFFFFFFFFFFFB22C
skip_spi_read           L       code            FFFFFFFFFFFFB3F0
SerialInit              L       code            FFFFFFFFFFFFB3B0
j4                      L       code            FFFFFFFFFFFFB3F4
KeybdInit               L       code            FFFFFFFFFFFFB7B0
ctx12                   L       code            FFFFFFFFFFFFB410
PICInit                 L       code            FFFFFFFFFFFFB390
context1disp            L       code            FFFFFFFFFFFFB428
SetupRasterIRQ          L       code            FFFFFFFFFFFFCA64
ctx11                   L       code            FFFFFFFFFFFFB448
dcokay                  L       code            FFFFFFFFFFFFB2C4
HelloWorld              L       code            FFFFFFFFFFFFB460
ClearScreen             L       code            FFFFFFFFFFFFBB64
j3                      L       code            FFFFFFFFFFFFB478
ClearBmpScreen          L       code            FFFFFFFFFFFFBB10
j2                      L       code            FFFFFFFFFFFFB48C
RandomizeSprram         L       code            FFFFFFFFFFFFC7B4
MSG                     L       code            FFFFFFFFFFFFB4A0
DisplayStringCRLF       L       code            FFFFFFFFFFFFBFD4
MSGSTART                L       code            FFFFFFFFFFFFB4AD
Monitor                 L       code            FFFFFFFFFFFFC258
PICInit                 L       code            FFFFFFFFFFFFB4D0
SetupAC97               L       code            FFFFFFFFFFFFC7DC
PICret                  L       code            FFFFFFFFFFFFB4EC
Beep                    L       code            FFFFFFFFFFFFC884
SerialInit              L       code            FFFFFFFFFFFFB4F0
j4                      L       code            FFFFFFFFFFFFB310
SerialGetCharDirect     L       code            FFFFFFFFFFFFB534
HelloWorld              L       code            FFFFFFFFFFFFB31C
sgc1                    L       code            FFFFFFFFFFFFCDC0
j3                      L       code            FFFFFFFFFFFFB334
SerialCheckForCharDirect        L       code            FFFFFFFFFFFFB558
j2                      L       code            FFFFFFFFFFFFB348
SerialPutChar           L       code            FFFFFFFFFFFFB570
MSG                     L       code            FFFFFFFFFFFFB360
spcb1                   L       code            FFFFFFFFFFFFB5D0
MSGSTART                L       code            FFFFFFFFFFFFB36D
spcb3                   L       code            FFFFFFFFFFFFB5B0
PICret                  L       code            FFFFFFFFFFFFB3AC
spcabort                L       code            FFFFFFFFFFFFB658
SerialGetCharDirect     L       code            FFFFFFFFFFFFB3F4
spcb2                   L       code            FFFFFFFFFFFFB600
sgc1                    L       code            FFFFFFFFFFFFC6E0
spcb4                   L       code            FFFFFFFFFFFFB5E0
SerialCheckForCharDirect        L       code            FFFFFFFFFFFFB418
spcb5                   L       code            FFFFFFFFFFFFB61C
spcb1                   L       code            FFFFFFFFFFFFB490
spcb6                   L       code            FFFFFFFFFFFFB608
spcb3                   L       code            FFFFFFFFFFFFB470
spcb8                   L       code            FFFFFFFFFFFFB624
spcabort                L       code            FFFFFFFFFFFFB518
spcb7                   L       code            FFFFFFFFFFFFB64C
spcb2                   L       code            FFFFFFFFFFFFB4C0
CharsInRxBuf            L       code            FFFFFFFFFFFFB66C
spcb4                   L       code            FFFFFFFFFFFFB4A0
cirxb1                  L       code            FFFFFFFFFFFFB68C
spcb5                   L       code            FFFFFFFFFFFFB4DC
SerialGetChar           L       code            FFFFFFFFFFFFB690
spcb6                   L       code            FFFFFFFFFFFFB4C8
sgcfifo1                L       code            FFFFFFFFFFFFB750
spcb8                   L       code            FFFFFFFFFFFFB4E4
sgcfifo2                L       code            FFFFFFFFFFFFB73C
spcb7                   L       code            FFFFFFFFFFFFB50C
sgcfifo3                L       code            FFFFFFFFFFFFB700
CharsInRxBuf            L       code            FFFFFFFFFFFFB52C
sgcfifo4                L       code            FFFFFFFFFFFFB724
cirxb1                  L       code            FFFFFFFFFFFFB54C
sgcfifo5                L       code            FFFFFFFFFFFFB73C
sgcfifo1                L       code            FFFFFFFFFFFFB610
SerialIRQ               L       code            FFFFFFFFFFFFB768
sgcfifo2                L       code            FFFFFFFFFFFFB5FC
sirq1                   L       code            FFFFFFFFFFFFB7A0
sgcfifo3                L       code            FFFFFFFFFFFFB5C0
srxirq                  L       code            FFFFFFFFFFFFB7C8
sgcfifo4                L       code            FFFFFFFFFFFFB5E4
stxirq                  L       code            FFFFFFFFFFFFB7C4
sgcfifo5                L       code            FFFFFFFFFFFFB5FC
smsirq                  L       code            FFFFFFFFFFFFB7B8
SerialIRQ               L       code            FFFFFFFFFFFFB628
srxirq1                 L       code            FFFFFFFFFFFFB7C8
sirq1                   L       code            FFFFFFFFFFFFB660
srxirq3                 L       code            FFFFFFFFFFFFB7F8
srxirq                  L       code            FFFFFFFFFFFFB688
srxirq2                 L       code            FFFFFFFFFFFFB7EC
stxirq                  L       code            FFFFFFFFFFFFB684
srxirq5                 L       code            FFFFFFFFFFFFB814
smsirq                  L       code            FFFFFFFFFFFFB678
srxirq8                 L       code            FFFFFFFFFFFFB8A4
srxirq1                 L       code            FFFFFFFFFFFFB688
srxirq6                 L       code            FFFFFFFFFFFFB868
srxirq3                 L       code            FFFFFFFFFFFFB6B8
srxirq7                 L       code            FFFFFFFFFFFFB88C
srxirq2                 L       code            FFFFFFFFFFFFB6AC
VideoSC                 L       code            FFFFFFFFFFFFB8A8
srxirq5                 L       code            FFFFFFFFFFFFB6D4
Video1                  L       code            FFFFFFFFFFFFB8D0
srxirq8                 L       code            FFFFFFFFFFFFB764
Video_x02               L       code            FFFFFFFFFFFFB90C
srxirq6                 L       code            FFFFFFFFFFFFB728
Video_x03               L       code            FFFFFFFFFFFFB91C
srxirq7                 L       code            FFFFFFFFFFFFB74C
Video_x06               L       code            FFFFFFFFFFFFB928
KeybdSC                 L       code            FFFFFFFFFFFFB768
Video_x09               L       code            FFFFFFFFFFFFB930
kbdsc1                  L       code            FFFFFFFFFFFFB77C
Video_x0A               L       code            FFFFFFFFFFFFB944
kbdscRet                L       code            FFFFFFFFFFFFB7A4
Video_x0C               L       code            FFFFFFFFFFFFB954
kbdsc2                  L       code            FFFFFFFFFFFFB78C
Video_x0D               L       code            FFFFFFFFFFFFB98C
kbdsc3                  L       code            FFFFFFFFFFFFB798
Video_x14               L       code            FFFFFFFFFFFFB9E0
kbdsc4                  L       code            FFFFFFFFFFFFB7A4
Video_x15               L       code            FFFFFFFFFFFFB9EC
KeybdIRQ                L       code            FFFFFFFFFFFFB7C4
Video_x16               L       code            FFFFFFFFFFFFB9FC
KeybdIRQa               L       code            FFFFFFFFFFFFB7D4
Video_x17               L       code            FFFFFFFFFFFFBA08
KeybdIRQb               L       code            FFFFFFFFFFFFB7FC
Video_x1A               L       code            FFFFFFFFFFFFBA14
KeybdIRQc               L       code            FFFFFFFFFFFFB810
VideoRet                L       code            FFFFFFFFFFFFBA20
nochar                  L       code            FFFFFFFFFFFFB864
Video_x09a              L       code            FFFFFFFFFFFFB938
kgc3                    L       code            FFFFFFFFFFFFB868
Video_x0Aa              L       code            FFFFFFFFFFFFB948
kgc2                    L       code            FFFFFFFFFFFFB85C
vxd1                    L       code            FFFFFFFFFFFFB9C0
CRLF                    L       code            FFFFFFFFFFFFE4FC
SDCARDSC                L       code            FFFFFFFFFFFFBA38
KeybdCheckForKeyDirect  L       code            FFFFFFFFFFFFB884
SDC_1                   L       code            FFFFFFFFFFFFBA60
KeybdGetCharDirect      L       code            FFFFFFFFFFFFB898
SDC_x00                 L       code            FFFFFFFFFFFFBA78
kgc1                    L       code            FFFFFFFFFFFFB8A8
SDC_x01                 L       code            FFFFFFFFFFFFBA80
gk1                     L       code            FFFFFFFFFFFFB8E0
SDC_x02                 L       code            FFFFFFFFFFFFBA90
gk2                     L       code            FFFFFFFFFFFFB8DC
SDCRet                  L       code            FFFFFFFFFFFFBA90
Pulse100                L       code            FFFFFFFFFFFFB8EC
RTCSC                   L       code            FFFFFFFFFFFFBAA8
DisplayDatetime         L       code            FFFFFFFFFFFFCB60
RTC_x00                 L       code            FFFFFFFFFFFFBAD8
SelectNextToRunTCB      L       code            FFFFFFFFFFFFB928
RTC_x01                 L       code            FFFFFFFFFFFFBAE0
SwitchTask              L       code            FFFFFFFFFFFFB930
RTCRet                  L       code            FFFFFFFFFFFFBB00
p1001                   L       code            FFFFFFFFFFFFB920
KeybdSC                 L       code            FFFFFFFFFFFFBB14
swtsk1                  L       code            FFFFFFFFFFFFB950
kbdsc5                  L       code            FFFFFFFFFFFFBB3C
FlashCursor             L       code            FFFFFFFFFFFFBA80
kbd_x00                 L       code            FFFFFFFFFFFFBB60
CalcScreenLoc           L       code            FFFFFFFFFFFFBCDC
kbd_x01                 L       code            FFFFFFFFFFFFBB68
flshcrsr2               L       code            FFFFFFFFFFFFBADC
kbd_x02                 L       code            FFFFFFFFFFFFBB74
flshcrsr3               L       code            FFFFFFFFFFFFBAB4
kbd_x03                 L       code            FFFFFFFFFFFFBB7C
flshcrsr1               L       code            FFFFFFFFFFFFBAC8
kbd_x04                 L       code            FFFFFFFFFFFFBB84
CursorOff               L       code            FFFFFFFFFFFFBAE8
kbd_x05                 L       code            FFFFFFFFFFFFBB8C
CursorOn                L       code            FFFFFFFFFFFFBAFC
kbdscRet                L       code            FFFFFFFFFFFFBB94
csj4                    L       code            FFFFFFFFFFFFBBAC
KeybdInit               L       code            FFFFFFFFFFFFBBAC
AsciiToScreen           L       code            FFFFFFFFFFFFBCAC
KeybdIRQ                L       code            FFFFFFFFFFFFBBC0
ScrollUp                L       code            FFFFFFFFFFFFBBD8
KeybdIRQa               L       code            FFFFFFFFFFFFBBD0
scrup1                  L       code            FFFFFFFFFFFFBC18
KeybdIRQb               L       code            FFFFFFFFFFFFBBF8
BlankLine               L       code            FFFFFFFFFFFFBC58
KeybdIRQc               L       code            FFFFFFFFFFFFBC0C
blnkln1                 L       code            FFFFFFFFFFFFBC90
SetKeyboardEcho         L       code            FFFFFFFFFFFFBC14
atoscr1                 L       code            FFFFFFFFFFFFBCC4
KeybdGetChar            L       code            FFFFFFFFFFFFBC1C
ScreenToAscii           L       code            FFFFFFFFFFFFBCCC
nochar                  L       code            FFFFFFFFFFFFBC60
stasc1                  L       code            FFFFFFFFFFFFBCD8
kgc3                    L       code            FFFFFFFFFFFFBC64
dccr                    L       code            FFFFFFFFFFFFBD3C
kgc2                    L       code            FFFFFFFFFFFFBC58
dcx7                    L       code            FFFFFFFFFFFFBD68
KeybdCheckForKey        L       code            FFFFFFFFFFFFBC70
dcx6                    L       code            FFFFFFFFFFFFBD80
KeybdCheckForKeyDirect  L       code            FFFFFFFFFFFFBC80
dcx8                    L       code            FFFFFFFFFFFFBDB0
KeybdGetCharDirect      L       code            FFFFFFFFFFFFBC94
dcx9                    L       code            FFFFFFFFFFFFBDE0
kgc1                    L       code            FFFFFFFFFFFFBCA4
dcx10                   L       code            FFFFFFFFFFFFBE10
gk1                     L       code            FFFFFFFFFFFFBCDC
dcx11                   L       code            FFFFFFFFFFFFBE44
gk2                     L       code            FFFFFFFFFFFFBCD8
dcx12                   L       code            FFFFFFFFFFFFBE3C
tmp_init                L       code            FFFFFFFFFFFFBCE8
dcx13                   L       code            FFFFFFFFFFFFBE78
tmp_init4               L       code            FFFFFFFFFFFFBCF4
dcx5                    L       code            FFFFFFFFFFFFBE98
tmp_init5               L       code            FFFFFFFFFFFFBD0C
dcx3                    L       code            FFFFFFFFFFFFBECC
tmp_init1               L       code            FFFFFFFFFFFFBD20
dcx4                    L       code            FFFFFFFFFFFFBEF4
tmp_init2               L       code            FFFFFFFFFFFFBD30
dclf                    L       code            FFFFFFFFFFFFBEF0
tmp_init3               L       code            FFFFFFFFFFFFBD48
IncCursorPos            L       code            FFFFFFFFFFFFBF10
tmp_read                L       code            FFFFFFFFFFFFBD4C
IncCursorRow            L       code            FFFFFFFFFFFFBF48
tmp_read1               L       code            FFFFFFFFFFFFBD68
icc1                    L       code            FFFFFFFFFFFFBF84
tmp_read3               L       code            FFFFFFFFFFFFBD80
icr1                    L       code            FFFFFFFFFFFFBF5C
tmp_read2               L       code            FFFFFFFFFFFFBD90
dspj1                   L       code            FFFFFFFFFFFFBFB0
tmp_read4               L       code            FFFFFFFFFFFFBDA8
dsret                   L       code            FFFFFFFFFFFFBFC4
Pulse100                L       code            FFFFFFFFFFFFBDCC
DisplayNybble           L       code            FFFFFFFFFFFFC010
p1001                   L       code            FFFFFFFFFFFFBE00
dispnyb1                L       code            FFFFFFFFFFFFC02C
SelectNextToRunTCB      L       code            FFFFFFFFFFFFBE08
DisplayByte             L       code            FFFFFFFFFFFFC03C
SwitchTask              L       code            FFFFFFFFFFFFBE10
DisplayWord             L       code            FFFFFFFFFFFFC064
swtsk1                  L       code            FFFFFFFFFFFFBE30
dspwd1                  L       code            FFFFFFFFFFFFC078
FlashCursor             L       code            FFFFFFFFFFFFBF60
DisplayMem              L       code            FFFFFFFFFFFFC094
flshcrsr2               L       code            FFFFFFFFFFFFBFBC
dspmem1                 L       code            FFFFFFFFFFFFC0B8
flshcrsr3               L       code            FFFFFFFFFFFFBF94
BinToBCD                L       code            FFFFFFFFFFFFC0E4
flshcrsr1               L       code            FFFFFFFFFFFFBFA8
bta1                    L       code            FFFFFFFFFFFFC108
CursorOff               L       code            FFFFFFFFFFFFBFC8
BCDToAscii              L       code            FFFFFFFFFFFFC160
CursorOn                L       code            FFFFFFFFFFFFBFDC
bta2                    L       code            FFFFFFFFFFFFC178
ClearBmpScreen          L       code            FFFFFFFFFFFFBFF0
BinToStr                L       code            FFFFFFFFFFFFC1BC
csj4                    L       code            FFFFFFFFFFFFC08C
btos3                   L       code            FFFFFFFFFFFFC1F0
ClearScreen             L       code            FFFFFFFFFFFFC044
btos1                   L       code            FFFFFFFFFFFFC1F4
ScrollUp                L       code            FFFFFFFFFFFFC0B8
btos2                   L       code            FFFFFFFFFFFFC224
scrup1                  L       code            FFFFFFFFFFFFC0F8
PromptLn                L       code            FFFFFFFFFFFFC264
BlankLine               L       code            FFFFFFFFFFFFC138
Prompt3                 L       code            FFFFFFFFFFFFC270
blnkln1                 L       code            FFFFFFFFFFFFC170
Prompt1                 L       code            FFFFFFFFFFFFC284
AsciiToScreen           L       code            FFFFFFFFFFFFC18C
Prompt2                 L       code            FFFFFFFFFFFFC2AC
atoscr1                 L       code            FFFFFFFFFFFFC1A4
Editmem                 L       code            FFFFFFFFFFFFC404
ScreenToAscii           L       code            FFFFFFFFFFFFC1AC
Dumpmem                 L       code            FFFFFFFFFFFFC43C
stasc1                  L       code            FFFFFFFFFFFFC1B8
CSTART                  L       code            FFFFFFFFFFFFCE70
CalcScreenLoc           L       code            FFFFFFFFFFFFC1BC
ExecuteCode             L       code            FFFFFFFFFFFFC42C
DisplayChar             L       code            FFFFFFFFFFFFC1FC
LoadS19                 L       code            FFFFFFFFFFFFC500
dccr                    L       code            FFFFFFFFFFFFC21C
DisplayHelp             L       code            FFFFFFFFFFFFC314
dcx7                    L       code            FFFFFFFFFFFFC248
TestCLS                 L       code            FFFFFFFFFFFFC2E0
dcx6                    L       code            FFFFFFFFFFFFC260
RandomLinesCall         L       code            FFFFFFFFFFFFC2D8
dccr1                   L       code            FFFFFFFFFFFFC224
Invaders                L       code            FFFFFFFFFFFFCDAC
dcx8                    L       code            FFFFFFFFFFFFC290
Piano                   L       code            FFFFFFFFFFFFC95C
dccu1                   L       code            FFFFFFFFFFFFC268
RandomLines             L       code            FFFFFFFFFFFFC6F0
dcx9                    L       code            FFFFFFFFFFFFC2C0
HelpMsg                 L       code            FFFFFFFFFFFFC320
dccl1                   L       code            FFFFFFFFFFFFC298
ignBlanks               L       code            FFFFFFFFFFFFC3E0
dcx10                   L       code            FFFFFFFFFFFFC2F0
ignBlanks1              L       code            FFFFFFFFFFFFC3E8
dccd1                   L       code            FFFFFFFFFFFFC2C8
GetHexNumber            L       code            FFFFFFFFFFFFC470
dcx11                   L       code            FFFFFFFFFFFFC324
edtmem1                 L       code            FFFFFFFFFFFFC414
dcx12                   L       code            FFFFFFFFFFFFC31C
gthxn2                  L       code            FFFFFFFFFFFFC488
dcx13                   L       code            FFFFFFFFFFFFC358
AsciiToHexNybble        L       code            FFFFFFFFFFFFC4C0
dcx5                    L       code            FFFFFFFFFFFFC378
gthxn1                  L       code            FFFFFFFFFFFFC4AC
dcx3                    L       code            FFFFFFFFFFFFC3AC
gthx3                   L       code            FFFFFFFFFFFFC4F8
dcx4                    L       code            FFFFFFFFFFFFC3E0
gthx5                   L       code            FFFFFFFFFFFFC4D0
dclf                    L       code            FFFFFFFFFFFFC3DC
gthx6                   L       code            FFFFFFFFFFFFC4E4
IncCursorPos            L       code            FFFFFFFFFFFFC3FC
ProcessRec              L       code            FFFFFFFFFFFFC50C
icc1                    L       code            FFFFFFFFFFFFC470
NextRec                 L       code            FFFFFFFFFFFFC504
icr1                    L       code            FFFFFFFFFFFFC448
sGetChar                L       code            FFFFFFFFFFFFC6C8
IncCursorRow            L       code            FFFFFFFFFFFFC434
ProcessS1               L       code            FFFFFFFFFFFFC5C4
DisplayString           L       code            FFFFFFFFFFFFC488
ProcessS2               L       code            FFFFFFFFFFFFC5CC
dspj1                   L       code            FFFFFFFFFFFFC49C
ProcessS3               L       code            FFFFFFFFFFFFC5D4
dsret                   L       code            FFFFFFFFFFFFC4B0
ProcessS7               L       code            FFFFFFFFFFFFC5DC
DisplayStringCRLF       L       code            FFFFFFFFFFFFC4C0
ProcessS8               L       code            FFFFFFFFFFFFC5E8
CRLF                    L       code            FFFFFFFFFFFFF600
ProcessS9               L       code            FFFFFFFFFFFFC5F4
DisplayNum              L       code            FFFFFFFFFFFFC4FC
pcssxa                  L       code            FFFFFFFFFFFFC56C
DisplayNybble           L       code            FFFFFFFFFFFFC500
pcss1a                  L       code            FFFFFFFFFFFFC574
dispnyb1                L       code            FFFFFFFFFFFFC51C
S19Get16BitAddress      L       code            FFFFFFFFFFFFC600
DisplayByte             L       code            FFFFFFFFFFFFC52C
S19Get24BitAddress      L       code            FFFFFFFFFFFFC618
DisplayCharr            L       code            FFFFFFFFFFFFC554
S19Get32BitAddress      L       code            FFFFFFFFFFFFC630
DisplayHalf             L       code            FFFFFFFFFFFFC57C
S1932b                  L       code            FFFFFFFFFFFFC684
DisplayWord             L       code            FFFFFFFFFFFFC5A4
S1932a                  L       code            FFFFFFFFFFFFC664
dspwd1                  L       code            FFFFFFFFFFFFC5B8
sgc2                    L       code            FFFFFFFFFFFFC6D0
DisplayMemB             L       code            FFFFFFFFFFFFC5D4
AUXIN                   L       code            FFFFFFFFFFFFE570
dspmem1                 L       code            FFFFFFFFFFFFC5F8
rl5                     L       code            FFFFFFFFFFFFC700
DisplayMemC             L       code            FFFFFFFFFFFFC624
rl1                     L       code            FFFFFFFFFFFFC714
dspmemc1                L       code            FFFFFFFFFFFFC648
rl2                     L       code            FFFFFFFFFFFFC730
DisplayMemW             L       code            FFFFFFFFFFFFC674
rl3                     L       code            FFFFFFFFFFFFC74C
BinToBCD                L       code            FFFFFFFFFFFFC6B4
rl4                     L       code            FFFFFFFFFFFFC768
bta1                    L       code            FFFFFFFFFFFFC6D8
rl8                     L       code            FFFFFFFFFFFFC794
BCDToAscii              L       code            FFFFFFFFFFFFC730
rl7                     L       code            FFFFFFFFFFFFC7A4
bta2                    L       code            FFFFFFFFFFFFC748
rsr1                    L       code            FFFFFFFFFFFFC7C4
BinToStr                L       code            FFFFFFFFFFFFC78C
sac974                  L       code            FFFFFFFFFFFFC7E8
btos3                   L       code            FFFFFFFFFFFFC7C0
sac971                  L       code            FFFFFFFFFFFFC7F4
btos1                   L       code            FFFFFFFFFFFFC7C4
sac973                  L       code            FFFFFFFFFFFFC820
btos2                   L       code            FFFFFFFFFFFFC7F4
sac972                  L       code            FFFFFFFFFFFFC860
Monitor                 L       code            FFFFFFFFFFFFC828
sac975                  L       code            FFFFFFFFFFFFC878
PromptLn                L       code            FFFFFFFFFFFFC834
beep1                   L       code            FFFFFFFFFFFFC8FC
Prompt3                 L       code            FFFFFFFFFFFFC840
beep2                   L       code            FFFFFFFFFFFFC92C
Prompt1                 L       code            FFFFFFFFFFFFC854
playnt                  L       code            FFFFFFFFFFFFC96C
Prompt2                 L       code            FFFFFFFFFFFFC87C
playnt1a                L       code            FFFFFFFFFFFFC994
Editmem                 L       code            FFFFFFFFFFFFCA24
playnt1b                L       code            FFFFFFFFFFFFC9A0
Dumpmem                 L       code            FFFFFFFFFFFFCA70
playnt1c                L       code            FFFFFFFFFFFFC9AC
Fillmem                 L       code            FFFFFFFFFFFFCAD4
playnt1d                L       code            FFFFFFFFFFFFC9B8
Prompt7                 L       code            FFFFFFFFFFFFC888
playnt1e                L       code            FFFFFFFFFFFFC9C4
Prompt4                 L       code            FFFFFFFFFFFFC890
playnt1f                L       code            FFFFFFFFFFFFC9D0
ExecuteCode             L       code            FFFFFFFFFFFFCA4C
playnt1g                L       code            FFFFFFFFFFFFC9DC
Prompt9                 L       code            FFFFFFFFFFFFC89C
Tone                    L       code            FFFFFFFFFFFFC9E8
Prompt10                L       code            FFFFFFFFFFFFC8AC
tone1                   L       code            FFFFFFFFFFFFCA28
TestCLS                 L       code            FFFFFFFFFFFFC8DC
tone2                   L       code            FFFFFFFFFFFFCA44
Prompt12                L       code            FFFFFFFFFFFFC8B8
RasterIRQfn             L       code            FFFFFFFFFFFFCAC4
Prompt13                L       code            FFFFFFFFFFFFC8C0
rirq1                   L       code            FFFFFFFFFFFFCAF4
Prompt14                L       code            FFFFFFFFFFFFC8C8
rirq2                   L       code            FFFFFFFFFFFFCAF4
Prompt15                L       code            FFFFFFFFFFFFC8D0
rirq3                   L       code            FFFFFFFFFFFFCAF4
RandomLinesCall         L       code            FFFFFFFFFFFFC8D4
rirq4                   L       code            FFFFFFFFFFFFCAF4
HelpMsg                 L       code            FFFFFFFFFFFFC910
rirq5                   L       code            FFFFFFFFFFFFCAF4
ignBlanks               L       code            FFFFFFFFFFFFCA00
rirq6                   L       code            FFFFFFFFFFFFCAF4
ignBlanks1              L       code            FFFFFFFFFFFFCA08
rirq7                   L       code            FFFFFFFFFFFFCAF4
edtmem1                 L       code            FFFFFFFFFFFFCA34
rirq8                   L       code            FFFFFFFFFFFFCAF4
LoadSector              L       code            FFFFFFFFFFFFCA5C
InitializeGame          L       code            FFFFFFFFFFFFCBD0
Dumpmem2                L       code            FFFFFFFFFFFFCAA0
DrawScore               L       code            FFFFFFFFFFFFCBF8
DumpmemW                L       code            FFFFFFFFFFFFCAC4
DrawMissile             L       code            FFFFFFFFFFFFCC28
DumpmemC                L       code            FFFFFFFFFFFFCAB8
MissileOff              L       code            FFFFFFFFFFFFCC84
DumpmemB                L       code            FFFFFFFFFFFFCAAC
DrawMan                 L       code            FFFFFFFFFFFFCCAC
FillmemC                L       code            FFFFFFFFFFFFCB20
DrawInvader             L       code            FFFFFFFFFFFFCCF8
FillmemH                L       code            FFFFFFFFFFFFCB30
DrawInvaders            L       code            FFFFFFFFFFFFCD18
FillmemW                L       code            FFFFFFFFFFFFCB40
dinv1                   L       code            FFFFFFFFFFFFCDA0
FillmemB                L       code            FFFFFFFFFFFFCB10
DrawBombs               L       code            FFFFFFFFFFFFCDA8
GetHexNumber            L       code            FFFFFFFFFFFFCB50
InvadersLoop            L       code            FFFFFFFFFFFFCDB8
gthxn2                  L       code            FFFFFFFFFFFFCB68
TestMoveMan             L       code            FFFFFFFFFFFFCDCC
gthxn1                  L       code            FFFFFFFFFFFFCB8C
MoveManRight            L       code            FFFFFFFFFFFFCDE0
AsciiToHexNybble        L       code            FFFFFFFFFFFFCBA0
MoveManLeft             L       code            FFFFFFFFFFFFCDF8
gthx3                   L       code            FFFFFFFFFFFFCBD8
FireMissile             L       code            FFFFFFFFFFFFCE0C
gthx5                   L       code            FFFFFFFFFFFFCBB0
Invaders1               L       code            FFFFFFFFFFFFCE30
gthx6                   L       code            FFFFFFFFFFFFCBC4
InvadersEnd             L       code            FFFFFFFFFFFFCE38
LoadS19                 L       code            FFFFFFFFFFFFCBE0
GOSTART                 L       code            FFFFFFFFFFFFCE44
ProcessRec              L       code            FFFFFFFFFFFFCBEC
GOWARM                  L       code            FFFFFFFFFFFFCE48
NextRec                 L       code            FFFFFFFFFFFFCBE4
WSTART                  L       code            FFFFFFFFFFFFCEF8
ProcessS1               L       code            FFFFFFFFFFFFCCA4
GOOUT                   L       code            FFFFFFFFFFFFCE4C
ProcessS2               L       code            FFFFFFFFFFFFCCAC
OUTC                    L       code            FFFFFFFFFFFFE568
ProcessS3               L       code            FFFFFFFFFFFFCCB4
GOIN                    L       code            FFFFFFFFFFFFCE50
ProcessS7               L       code            FFFFFFFFFFFFCCBC
INC                     L       code            FFFFFFFFFFFFE56C
ProcessS8               L       code            FFFFFFFFFFFFCCC8
GOAUXO                  L       code            FFFFFFFFFFFFCE54
ProcessS9               L       code            FFFFFFFFFFFFCCD4
AUXOUT                  L       code            FFFFFFFFFFFFE588
pcssxa                  L       code            FFFFFFFFFFFFCC4C
GOAUXI                  L       code            FFFFFFFFFFFFCE58
pcss1a                  L       code            FFFFFFFFFFFFCC54
GOBYE                   L       code            FFFFFFFFFFFFCE5C
S19Get16BitAddress      L       code            FFFFFFFFFFFFCCE0
BYEBYE                  L       code            FFFFFFFFFFFFE7A8
S1932b                  L       code            FFFFFFFFFFFFCD64
TXTBGN                  L       code            FFFFFFFFFFFFCE60
S19Get24BitAddress      L       code            FFFFFFFFFFFFCCF8
ENDMEM                  L       code            FFFFFFFFFFFFCE68
S1932a                  L       code            FFFFFFFFFFFFCD44
PRMESGAUX               L       code            FFFFFFFFFFFFE534
S19Get32BitAddress      L       code            FFFFFFFFFFFFCD10
PRMESG                  L       code            FFFFFFFFFFFFE500
sGetChar                L       code            FFFFFFFFFFFFCDA8
clearVars               L       code            FFFFFFFFFFFFD30C
sgc2                    L       code            FFFFFFFFFFFFCDB0
PRTNUM                  L       code            FFFFFFFFFFFFE234
RandomLines             L       code            FFFFFFFFFFFFCDD0
ST3                     L       code            FFFFFFFFFFFFCF10
rl5                     L       code            FFFFFFFFFFFFCDE4
GETLN                   L       code            FFFFFFFFFFFFDF60
rl1                     L       code            FFFFFFFFFFFFCDF8
TOUPBUF                 L       code            FFFFFFFFFFFFE474
rl2                     L       code            FFFFFFFFFFFFCE14
TSTNUM                  L       code            FFFFFFFFFFFFE3FC
rl3                     L       code            FFFFFFFFFFFFCE30
IGNBLK                  L       code            FFFFFFFFFFFFE450
rl4                     L       code            FFFFFFFFFFFFCE4C
DIRECT                  L       code            FFFFFFFFFFFFD210
rl8                     L       code            FFFFFFFFFFFFCE78
ST2                     L       code            FFFFFFFFFFFFCF3C
rl7                     L       code            FFFFFFFFFFFFCE8C
ERROR                   L       code            FFFFFFFFFFFFDF20
RandomizeSprram         L       code            FFFFFFFFFFFFCE9C
FNDLN                   L       code            FFFFFFFFFFFFE030
rsr1                    L       code            FFFFFFFFFFFFCEAC
ST4                     L       code            FFFFFFFFFFFFCF90
SetupAC97               L       code            FFFFFFFFFFFFCEC4
FNDNXT                  L       code            FFFFFFFFFFFFE080
sac974                  L       code            FFFFFFFFFFFFCED0
ST7                     L       code            FFFFFFFFFFFFCF6C
sac971                  L       code            FFFFFFFFFFFFCEDC
ST6                     L       code            FFFFFFFFFFFFCF88
sac973                  L       code            FFFFFFFFFFFFCF08
MVUP                    L       code            FFFFFFFFFFFFE0A4
sac972                  L       code            FFFFFFFFFFFFCF48
ST5                     L       code            FFFFFFFFFFFFCFB8
sac975                  L       code            FFFFFFFFFFFFCF60
MVDOWN                  L       code            FFFFFFFFFFFFE0BC
Beep                    L       code            FFFFFFFFFFFFCF6C
TAB1                    L       code            FFFFFFFFFFFFCFE0
beep1                   L       code            FFFFFFFFFFFFCFE4
TAB2                    L       code            FFFFFFFFFFFFCFF2
beep2                   L       code            FFFFFFFFFFFFD014
TAB4                    L       code            FFFFFFFFFFFFD042
Piano                   L       code            FFFFFFFFFFFFD044
TAB5                    L       code            FFFFFFFFFFFFD063
playnt                  L       code            FFFFFFFFFFFFD054
TAB6                    L       code            FFFFFFFFFFFFD066
playnt1a                L       code            FFFFFFFFFFFFD07C
TAB8                    L       code            FFFFFFFFFFFFD06B
playnt1b                L       code            FFFFFFFFFFFFD088
TAB9                    L       code            FFFFFFFFFFFFD075
playnt1c                L       code            FFFFFFFFFFFFD094
TAB10                   L       code            FFFFFFFFFFFFD079
playnt1d                L       code            FFFFFFFFFFFFD0A0
TAB1_1                  L       code            FFFFFFFFFFFFD080
playnt1e                L       code            FFFFFFFFFFFFD0AC
TAB2_1                  L       code            FFFFFFFFFFFFD0A8
playnt1f                L       code            FFFFFFFFFFFFD0B8
TAB4_1                  L       code            FFFFFFFFFFFFD150
playnt1g                L       code            FFFFFFFFFFFFD0C4
TAB5_1                  L       code            FFFFFFFFFFFFD198
Tone                    L       code            FFFFFFFFFFFFD0D0
TAB6_1                  L       code            FFFFFFFFFFFFD1A8
tone1                   L       code            FFFFFFFFFFFFD110
TAB8_1                  L       code            FFFFFFFFFFFFD1B8
tone2                   L       code            FFFFFFFFFFFFD12C
TAB9_1                  L       code            FFFFFFFFFFFFD1F0
SetupRasterIRQ          L       code            FFFFFFFFFFFFD14C
TAB10_1                 L       code            FFFFFFFFFFFFD200
RasterIRQfn             L       code            FFFFFFFFFFFFD1AC
EXEC                    L       code            FFFFFFFFFFFFD218
rirq1                   L       code            FFFFFFFFFFFFD1DC
EXLP                    L       code            FFFFFFFFFFFFD22C
rirq2                   L       code            FFFFFFFFFFFFD1DC
EXNGO                   L       code            FFFFFFFFFFFFD244
rirq3                   L       code            FFFFFFFFFFFFD1DC
EXGO                    L       code            FFFFFFFFFFFFD27C
rirq4                   L       code            FFFFFFFFFFFFD1DC
EXMAT                   L       code            FFFFFFFFFFFFD26C
rirq5                   L       code            FFFFFFFFFFFFD1DC
EX1                     L       code            FFFFFFFFFFFFD25C
rirq6                   L       code            FFFFFFFFFFFFD1DC
NEW                     L       code            FFFFFFFFFFFFD284
rirq7                   L       code            FFFFFFFFFFFFD1DC
ENDCHK                  L       code            FFFFFFFFFFFFDEE4
rirq8                   L       code            FFFFFFFFFFFFD1DC
STOP                    L       code            FFFFFFFFFFFFD294
DisplayDatetime         L       code            FFFFFFFFFFFFD248
RUN                     L       code            FFFFFFFFFFFFD29C
InitializeGame          L       code            FFFFFFFFFFFFD2C4
RUNNXL                  L       code            FFFFFFFFFFFFD2AC
DrawScore               L       code            FFFFFFFFFFFFD2EC
FNDLNP                  L       code            FFFFFFFFFFFFE040
DrawMissile             L       code            FFFFFFFFFFFFD31C
RUNTSL                  L       code            FFFFFFFFFFFFD2CC
MissileOff              L       code            FFFFFFFFFFFFD378
RUNSML                  L       code            FFFFFFFFFFFFD2D4
DrawMan                 L       code            FFFFFFFFFFFFD3A0
CHKIO                   L       code            FFFFFFFFFFFFE4D8
DrawInvader             L       code            FFFFFFFFFFFFD3EC
GOTO                    L       code            FFFFFFFFFFFFD2E4
DrawInvaders            L       code            FFFFFFFFFFFFD40C
OREXPR                  L       code            FFFFFFFFFFFFD8E8
dinv1                   L       code            FFFFFFFFFFFFD494
_clr                    L       code            FFFFFFFFFFFFD304
DrawBombs               L       code            FFFFFFFFFFFFD49C
FINISH                  L       code            FFFFFFFFFFFFD410
Invaders                L       code            FFFFFFFFFFFFD4A0
cv1                     L       code            FFFFFFFFFFFFD320
InvadersLoop            L       code            FFFFFFFFFFFFD4AC
LISTX                   L       code            FFFFFFFFFFFFD338
TestMoveMan             L       code            FFFFFFFFFFFFD4C0
LS1                     L       code            FFFFFFFFFFFFD34C
MoveManRight            L       code            FFFFFFFFFFFFD4D4
LS4                     L       code            FFFFFFFFFFFFD354
MoveManLeft             L       code            FFFFFFFFFFFFD4EC
PRTLN                   L       code            FFFFFFFFFFFFE37C
FireMissile             L       code            FFFFFFFFFFFFD500
LS3                     L       code            FFFFFFFFFFFFD374
Invaders1               L       code            FFFFFFFFFFFFD524
LS2                     L       code            FFFFFFFFFFFFD36C
InvadersEnd             L       code            FFFFFFFFFFFFD52C
PRINT                   L       code            FFFFFFFFFFFFD380
spi_init                L       code            FFFFFFFFFFFFD538
TSTC                    L       code            FFFFFFFFFFFFE3C4
spi_init1               L       code            FFFFFFFFFFFFD568
PR2                     L       code            FFFFFFFFFFFFD398
spi_error               L       code            FFFFFFFFFFFFD594
PR0                     L       code            FFFFFFFFFFFFD3AC
spi_init_exit           L       code            FFFFFFFFFFFFD5A4
PR3                     L       code            FFFFFFFFFFFFD3E4
spi_read_sector         L       code            FFFFFFFFFFFFD5B4
PR1                     L       code            FFFFFFFFFFFFD3C4
spi_read_sect1          L       code            FFFFFFFFFFFFD614
PR4                     L       code            FFFFFFFFFFFFD3DC
spi_read_error          L       code            FFFFFFFFFFFFD64C
QTSTG                   L       code            FFFFFFFFFFFFE19C
spi_read_sect2          L       code            FFFFFFFFFFFFD634
PR8                     L       code            FFFFFFFFFFFFD400
spi_read_ret            L       code            FFFFFFFFFFFFD65C
FIN                     L       code            FFFFFFFFFFFFDEA8
spi_read_boot           L       code            FFFFFFFFFFFFD674
PR6                     L       code            FFFFFFFFFFFFD3F8
spi_read_boot1          L       code            FFFFFFFFFFFFD694
QWHAT                   L       code            FFFFFFFFFFFFDF1C
spi_read_boot2          L       code            FFFFFFFFFFFFD6DC
GOSUB                   L       code            FFFFFFFFFFFFD418
spi_read_boot3          L       code            FFFFFFFFFFFFD6D0
PUSHA                   L       code            FFFFFFFFFFFFE0F8
spi_read_boot4          L       code            FFFFFFFFFFFFD714
gosub1                  L       code            FFFFFFFFFFFFD430
msgFoundEB              L       code            FFFFFFFFFFFFD728
RETURN                  L       code            FFFFFFFFFFFFD454
loadFAT                 L       code            FFFFFFFFFFFFD73C
return1                 L       code            FFFFFFFFFFFFD468
loadFAT1                L       code            FFFFFFFFFFFFD780
POPA                    L       code            FFFFFFFFFFFFE0C4
loadRootDirectory       L       code            FFFFFFFFFFFFD79C
FOR                     L       code            FFFFFFFFFFFFD48C
loadRootDir1            L       code            FFFFFFFFFFFFD800
SETVAL                  L       code            FFFFFFFFFFFFDE60
loadBootFile            L       code            FFFFFFFFFFFFD814
FR1                     L       code            FFFFFFFFFFFFD4A4
loadBootFileTmp         L       code            FFFFFFFFFFFFD8A8
FR2                     L       code            FFFFFFFFFFFFD4B8
loadBootFile4           L       code            FFFFFFFFFFFFD870
FR4                     L       code            FFFFFFFFFFFFD4C4
loadBootFile5           L       code            FFFFFFFFFFFFD890
FR3                     L       code            FFFFFFFFFFFFD4C0
loadBootFile3           L       code            FFFFFFFFFFFFD888
FR5                     L       code            FFFFFFFFFFFFD4C8
loadBootFile1           L       code            FFFFFFFFFFFFD8C8
FR7                     L       code            FFFFFFFFFFFFD4E4
loadBootFile2           L       code            FFFFFFFFFFFFD914
FR6                     L       code            FFFFFFFFFFFFD4E0
msgJumpingToBoot        L       code            FFFFFFFFFFFFD920
FR8                     L       code            FFFFFFFFFFFFD504
msgNotBootable          L       code            FFFFFFFFFFFFD930
NEXT                    L       code            FFFFFFFFFFFFD508
spi_init_ok_msg         L       code            FFFFFFFFFFFFD946
TSTV                    L       code            FFFFFFFFFFFFDBB0
spi_init_error_msg      L       code            FFFFFFFFFFFFD960
NX4                     L       code            FFFFFFFFFFFFD51C
spi_boot_error_msg      L       code            FFFFFFFFFFFFD98B
NX0                     L       code            FFFFFFFFFFFFD520
spi_read_error_msg      L       code            FFFFFFFFFFFFD99E
NX5                     L       code            FFFFFFFFFFFFD530
my_MAC1                 C       constant        0000000000000000
NX2                     L       code            FFFFFFFFFFFFD53C
my_MAC2                 C       constant        00000000000000FF
NX1                     L       code            FFFFFFFFFFFFD55C
my_MAC3                 C       constant        00000000000000EE
NXPurge                 L       code            FFFFFFFFFFFFD570
my_MAC4                 C       constant        00000000000000F0
NX3                     L       code            FFFFFFFFFFFFD560
my_MAC5                 C       constant        00000000000000DA
IF                      L       code            FFFFFFFFFFFFD578
my_MAC6                 C       constant        0000000000000042
IF1                     L       code            FFFFFFFFFFFFD57C
.bss                    L       code            FFFFFFFFFFFFD9B4
IF2                     L       code            FFFFFFFFFFFFD580
eth_unique_id           L       code            FFFFFFFFFFFFD9B4
FNDSKP                  L       code            FFFFFFFFFFFFE084
.code                   L       code            FFFFFFFFFFFFD9BC
IF3                     L       code            FFFFFFFFFFFFD590
eth_init                L       code            FFFFFFFFFFFFD9BC
INPERR                  L       code            FFFFFFFFFFFFD594
eth_request_packet      L       code            FFFFFFFFFFFFD9F4
INPUT                   L       code            FFFFFFFFFFFFD5A8
eth1                    L       code            FFFFFFFFFFFFDA24
IP6                     L       code            FFFFFFFFFFFFD5B0
eth20                   L       code            FFFFFFFFFFFFDA4C
IP2                     L       code            FFFFFFFFFFFFD5D0
eth_interpret_packet    L       code            FFFFFFFFFFFFDA70
IP4                     L       code            FFFFFFFFFFFFD640
eth2                    L       code            FFFFFFFFFFFFDA9C
IP3                     L       code            FFFFFFFFFFFFD600
eth5                    L       code            FFFFFFFFFFFFDA90
IP7                     L       code            FFFFFFFFFFFFD5E8
eth3                    L       code            FFFFFFFFFFFFDACC
PRTSTG                  L       code            FFFFFFFFFFFFE144
eth4                    L       code            FFFFFFFFFFFFDAB4
IP5                     L       code            FFFFFFFFFFFFD650
eth6                    L       code            FFFFFFFFFFFFDAC0
DEFLT                   L       code            FFFFFFFFFFFFD65C
eth7                    L       code            FFFFFFFFFFFFDACC
LET                     L       code            FFFFFFFFFFFFD664
eth_send_packet         L       code            FFFFFFFFFFFFDADC
LT1                     L       code            FFFFFFFFFFFFD678
eth8                    L       code            FFFFFFFFFFFFDAF4
LOAD                    L       code            FFFFFFFFFFFFD67C
eth_build_packet        L       code            FFFFFFFFFFFFDB24
LOD1                    L       code            FFFFFFFFFFFFD688
eth16                   L       code            FFFFFFFFFFFFDBEC
LODEND                  L       code            FFFFFFFFFFFFD6C8
eth_checksum            L       code            FFFFFFFFFFFFDC38
GCHAR                   L       code            FFFFFFFFFFFFD6D0
eth15                   L       code            FFFFFFFFFFFFDC58
LOD2                    L       code            FFFFFFFFFFFFD6B0
eth14                   L       code            FFFFFFFFFFFFDC80
GCHAR1                  L       code            FFFFFFFFFFFFD6E8
eth_verifyIP            L       code            FFFFFFFFFFFFDCB0
asciiToHex              L       code            FFFFFFFFFFFFD714
eth11                   L       code            FFFFFFFFFFFFDD0C
a2h1                    L       code            FFFFFFFFFFFFD71C
eth12                   L       code            FFFFFFFFFFFFDCF4
SAVE                    L       code            FFFFFFFFFFFFD728
eth13                   L       code            FFFFFFFFFFFFDCF8
SAVE1                   L       code            FFFFFFFFFFFFD730
eth_main                L       code            FFFFFFFFFFFFDD3C
AUXOCRLF                L       code            FFFFFFFFFFFFD784
eth_loop                L       code            FFFFFFFFFFFFDD40
SAVEND                  L       code            FFFFFFFFFFFFD76C
eth10                   L       code            FFFFFFFFFFFFDDF8
PWORD                   L       code            FFFFFFFFFFFFD7A4
GOSTART                 L       code            FFFFFFFFFFFFDF4C
SAVE2                   L       code            FFFFFFFFFFFFD758
GOWARM                  L       code            FFFFFFFFFFFFDF50
pword1                  L       code            FFFFFFFFFFFFD7B8
GOOUT                   L       code            FFFFFFFFFFFFDF54
toAsciiHex              L       code            FFFFFFFFFFFFD7F4
GOIN                    L       code            FFFFFFFFFFFFDF58
pword2                  L       code            FFFFFFFFFFFFD7D4
GOAUXO                  L       code            FFFFFFFFFFFFDF5C
tah1                    L       code            FFFFFFFFFFFFD800
GOAUXI                  L       code            FFFFFFFFFFFFDF60
POKE                    L       code            FFFFFFFFFFFFD808
GOBYE                   L       code            FFFFFFFFFFFFDF64
PKER                    L       code            FFFFFFFFFFFFD834
TXTBGN                  L       code            FFFFFFFFFFFFDF68
POKEC                   L       code            FFFFFFFFFFFFD83C
ENDMEM                  L       code            FFFFFFFFFFFFDF70
POKEH                   L       code            FFFFFFFFFFFFD868
CSTART                  L       code            FFFFFFFFFFFFDF80
POKEW                   L       code            FFFFFFFFFFFFD894
WSTART                  L       code            FFFFFFFFFFFFE004
SYSX                    L       code            FFFFFFFFFFFFD8C0
ST3                     L       code            FFFFFFFFFFFFE01C
sysx1                   L       code            FFFFFFFFFFFFD8D4
DIRECT                  L       code            FFFFFFFFFFFFE318
ANDEXPR                 L       code            FFFFFFFFFFFFD920
ST2                     L       code            FFFFFFFFFFFFE048
XP_OR1                  L       code            FFFFFFFFFFFFD8F4
ERROR                   L       code            FFFFFFFFFFFFF028
XP_OR                   L       code            FFFFFFFFFFFFD904
ST4                     L       code            FFFFFFFFFFFFE09C
XP_ORX                  L       code            FFFFFFFFFFFFD914
ST7                     L       code            FFFFFFFFFFFFE078
EXPR                    L       code            FFFFFFFFFFFFD9B4
ST6                     L       code            FFFFFFFFFFFFE094
XP_AND1                 L       code            FFFFFFFFFFFFD92C
ST5                     L       code            FFFFFFFFFFFFE0C4
XP_AND                  L       code            FFFFFFFFFFFFD93C
TAB1                    L       code            FFFFFFFFFFFFE0EC
XP_ANDX                 L       code            FFFFFFFFFFFFD94C
TAB2                    L       code            FFFFFFFFFFFFE0FE
isDigit                 L       code            FFFFFFFFFFFFD958
TAB4                    L       code            FFFFFFFFFFFFE14E
isDigitFalse            L       code            FFFFFFFFFFFFD968
TAB5                    L       code            FFFFFFFFFFFFE16F
isAlpha                 L       code            FFFFFFFFFFFFD970
TAB6                    L       code            FFFFFFFFFFFFE172
isAlphaFalse            L       code            FFFFFFFFFFFFD988
TAB8                    L       code            FFFFFFFFFFFFE177
isAlphaTrue             L       code            FFFFFFFFFFFFD980
TAB9                    L       code            FFFFFFFFFFFFE181
isAlnum                 L       code            FFFFFFFFFFFFD990
TAB10                   L       code            FFFFFFFFFFFFE185
isDigitx                L       code            FFFFFFFFFFFFD9AC
TAB1_1                  L       code            FFFFFFFFFFFFE188
EXPR2                   L       code            FFFFFFFFFFFFDA70
TAB2_1                  L       code            FFFFFFFFFFFFE1B0
XP11                    L       code            FFFFFFFFFFFFD9D0
TAB4_1                  L       code            FFFFFFFFFFFFE258
XP18                    L       code            FFFFFFFFFFFFDA54
TAB5_1                  L       code            FFFFFFFFFFFFE2A0
XPRT1                   L       code            FFFFFFFFFFFFDA3C
TAB6_1                  L       code            FFFFFFFFFFFFE2B0
XPRT0                   L       code            FFFFFFFFFFFFDA30
TAB8_1                  L       code            FFFFFFFFFFFFE2C0
XP12                    L       code            FFFFFFFFFFFFD9E0
TAB9_1                  L       code            FFFFFFFFFFFFE2F8
XP13                    L       code            FFFFFFFFFFFFD9F0
TAB10_1                 L       code            FFFFFFFFFFFFE308
XP14                    L       code            FFFFFFFFFFFFDA00
EXEC                    L       code            FFFFFFFFFFFFE320
XP15                    L       code            FFFFFFFFFFFFDA10
EXLP                    L       code            FFFFFFFFFFFFE334
XP16                    L       code            FFFFFFFFFFFFDA20
EXNGO                   L       code            FFFFFFFFFFFFE34C
XP17                    L       code            FFFFFFFFFFFFDA48
EXGO                    L       code            FFFFFFFFFFFFE384
XP26                    L       code            FFFFFFFFFFFFDACC
EXMAT                   L       code            FFFFFFFFFFFFE374
XP21                    L       code            FFFFFFFFFFFFDA90
EX1                     L       code            FFFFFFFFFFFFE364
XP22                    L       code            FFFFFFFFFFFFDA9C
NEW                     L       code            FFFFFFFFFFFFE38C
EXPR3                   L       code            FFFFFFFFFFFFDAE4
STOP                    L       code            FFFFFFFFFFFFE39C
XP23                    L       code            FFFFFFFFFFFFDAA0
RUN                     L       code            FFFFFFFFFFFFE3A4
XP24                    L       code            FFFFFFFFFFFFDAB4
RUNNXL                  L       code            FFFFFFFFFFFFE3B4
XP25                    L       code            FFFFFFFFFFFFDAC0
RUNTSL                  L       code            FFFFFFFFFFFFE3D4
XP45                    L       code            FFFFFFFFFFFFDAD8
RUNSML                  L       code            FFFFFFFFFFFFE3DC
EXPR4                   L       code            FFFFFFFFFFFFDB3C
GOTO                    L       code            FFFFFFFFFFFFE3EC
XP31                    L       code            FFFFFFFFFFFFDAF0
_clr                    L       code            FFFFFFFFFFFFE40C
XP34                    L       code            FFFFFFFFFFFFDB10
FINISH                  L       code            FFFFFFFFFFFFE518
XP47                    L       code            FFFFFFFFFFFFDB30
clearVars               L       code            FFFFFFFFFFFFE414
XP40                    L       code            FFFFFFFFFFFFDB50
cv1                     L       code            FFFFFFFFFFFFE428
XP41                    L       code            FFFFFFFFFFFFDB68
LISTX                   L       code            FFFFFFFFFFFFE440
XP46                    L       code            FFFFFFFFFFFFDB74
LS1                     L       code            FFFFFFFFFFFFE454
PARN                    L       code            FFFFFFFFFFFFDB7C
LS4                     L       code            FFFFFFFFFFFFE45C
XP42                    L       code            FFFFFFFFFFFFDBA0
LS3                     L       code            FFFFFFFFFFFFE47C
XP43                    L       code            FFFFFFFFFFFFDBA8
LS2                     L       code            FFFFFFFFFFFFE474
tstv_notfound           L       code            FFFFFFFFFFFFDC24
PRINT                   L       code            FFFFFFFFFFFFE488
TV1                     L       code            FFFFFFFFFFFFDC08
PR2                     L       code            FFFFFFFFFFFFE4A0
SIZEX                   L       code            FFFFFFFFFFFFDE4C
PR0                     L       code            FFFFFFFFFFFFE4B4
TV2                     L       code            FFFFFFFFFFFFDBFC
PR3                     L       code            FFFFFFFFFFFFE4EC
QSORRY                  L       code            FFFFFFFFFFFFDF14
PR1                     L       code            FFFFFFFFFFFFE4CC
TSTVRT                  L       code            FFFFFFFFFFFFDC18
PR4                     L       code            FFFFFFFFFFFFE4E4
getVarName              L       code            FFFFFFFFFFFFDC34
PR8                     L       code            FFFFFFFFFFFFE508
findVar                 L       code            FFFFFFFFFFFFDCCC
PR6                     L       code            FFFFFFFFFFFFE500
gvn1                    L       code            FFFFFFFFFFFFDCBC
GOSUB                   L       code            FFFFFFFFFFFFE520
gvn4                    L       code            FFFFFFFFFFFFDC54
gosub1                  L       code            FFFFFFFFFFFFE538
gvn2                    L       code            FFFFFFFFFFFFDC8C
RETURN                  L       code            FFFFFFFFFFFFE55C
gvn6                    L       code            FFFFFFFFFFFFDC7C
return1                 L       code            FFFFFFFFFFFFE570
gvn3                    L       code            FFFFFFFFFFFFDCA0
FOR                     L       code            FFFFFFFFFFFFE594
fv4                     L       code            FFFFFFFFFFFFDCDC
FR1                     L       code            FFFFFFFFFFFFE5AC
fv3                     L       code            FFFFFFFFFFFFDD00
FR2                     L       code            FFFFFFFFFFFFE5C0
fv1                     L       code            FFFFFFFFFFFFDD08
FR4                     L       code            FFFFFFFFFFFFE5CC
fv2                     L       code            FFFFFFFFFFFFDD18
FR3                     L       code            FFFFFFFFFFFFE5C8
PEEK                    L       code            FFFFFFFFFFFFDD2C
FR5                     L       code            FFFFFFFFFFFFE5D0
PEEKC                   L       code            FFFFFFFFFFFFDD3C
FR7                     L       code            FFFFFFFFFFFFE5EC
PEEKH                   L       code            FFFFFFFFFFFFDD50
FR6                     L       code            FFFFFFFFFFFFE5E8
PEEKW                   L       code            FFFFFFFFFFFFDD64
FR8                     L       code            FFFFFFFFFFFFE60C
USRX                    L       code            FFFFFFFFFFFFDD78
NEXT                    L       code            FFFFFFFFFFFFE610
RND                     L       code            FFFFFFFFFFFFDD94
NX4                     L       code            FFFFFFFFFFFFE624
rnd2                    L       code            FFFFFFFFFFFFDDC4
NX0                     L       code            FFFFFFFFFFFFE628
rnd1                    L       code            FFFFFFFFFFFFDDBC
NX5                     L       code            FFFFFFFFFFFFE638
modu4                   L       code            FFFFFFFFFFFFDDD4
NX2                     L       code            FFFFFFFFFFFFE644
mod2                    L       code            FFFFFFFFFFFFDDF4
NX1                     L       code            FFFFFFFFFFFFE664
mod1                    L       code            FFFFFFFFFFFFDE10
NXPurge                 L       code            FFFFFFFFFFFFE678
ABS                     L       code            FFFFFFFFFFFFDE2C
NX3                     L       code            FFFFFFFFFFFFE668
SGN                     L       code            FFFFFFFFFFFFDE3C
IF                      L       code            FFFFFFFFFFFFE680
sv2                     L       code            FFFFFFFFFFFFDE7C
IF1                     L       code            FFFFFFFFFFFFE684
SV1                     L       code            FFFFFFFFFFFFDEA4
IF2                     L       code            FFFFFFFFFFFFE688
FI1                     L       code            FFFFFFFFFFFFDEC4
IF3                     L       code            FFFFFFFFFFFFE698
FI2                     L       code            FFFFFFFFFFFFDEDC
INPERR                  L       code            FFFFFFFFFFFFE69C
ec1                     L       code            FFFFFFFFFFFFDF04
INPUT                   L       code            FFFFFFFFFFFFE6B0
TOOBIG                  L       code            FFFFFFFFFFFFDF0C
IP6                     L       code            FFFFFFFFFFFFE6B8
GL1                     L       code            FFFFFFFFFFFFDF88
IP2                     L       code            FFFFFFFFFFFFE6D8
GL3                     L       code            FFFFFFFFFFFFDFBC
IP4                     L       code            FFFFFFFFFFFFE748
GL4                     L       code            FFFFFFFFFFFFDFE4
IP3                     L       code            FFFFFFFFFFFFE708
GL2                     L       code            FFFFFFFFFFFFDFA0
IP7                     L       code            FFFFFFFFFFFFE6F0
GL7                     L       code            FFFFFFFFFFFFE014
IP5                     L       code            FFFFFFFFFFFFE758
GL6                     L       code            FFFFFFFFFFFFE00C
DEFLT                   L       code            FFFFFFFFFFFFE764
GL5                     L       code            FFFFFFFFFFFFDFF0
LET                     L       code            FFFFFFFFFFFFE76C
fl1                     L       code            FFFFFFFFFFFFE03C
LT1                     L       code            FFFFFFFFFFFFE780
FNDRET1                 L       code            FFFFFFFFFFFFE06C
LOAD                    L       code            FFFFFFFFFFFFE784
FNDRET2                 L       code            FFFFFFFFFFFFE078
LOD1                    L       code            FFFFFFFFFFFFE790
FNDRET                  L       code            FFFFFFFFFFFFE064
LODEND                  L       code            FFFFFFFFFFFFE7D0
MVUP1                   L       code            FFFFFFFFFFFFE094
LOD2                    L       code            FFFFFFFFFFFFE7B8
MVRET                   L       code            FFFFFFFFFFFFE0A8
GCHAR                   L       code            FFFFFFFFFFFFE7D8
MVDOWN1                 L       code            FFFFFFFFFFFFE0AC
GCHAR1                  L       code            FFFFFFFFFFFFE7F0
PP1                     L       code            FFFFFFFFFFFFE0F4
asciiToHex              L       code            FFFFFFFFFFFFE81C
PU1                     L       code            FFFFFFFFFFFFE138
a2h1                    L       code            FFFFFFFFFFFFE824
PS1                     L       code            FFFFFFFFFFFFE160
SAVE                    L       code            FFFFFFFFFFFFE830
PRTRET                  L       code            FFFFFFFFFFFFE180
SAVE1                   L       code            FFFFFFFFFFFFE838
QT1                     L       code            FFFFFFFFFFFFE1B8
SAVEND                  L       code            FFFFFFFFFFFFE874
QT2                     L       code            FFFFFFFFFFFFE200
SAVE2                   L       code            FFFFFFFFFFFFE860
QT3                     L       code            FFFFFFFFFFFFE1D0
AUXOCRLF                L       code            FFFFFFFFFFFFE88C
QT4                     L       code            FFFFFFFFFFFFE1E8
PWORD                   L       code            FFFFFFFFFFFFE8AC
QT5                     L       code            FFFFFFFFFFFFE20C
pword1                  L       code            FFFFFFFFFFFFE8C0
prCRLF                  L       code            FFFFFFFFFFFFE214
pword2                  L       code            FFFFFFFFFFFFE8DC
PN1                     L       code            FFFFFFFFFFFFE264
toAsciiHex              L       code            FFFFFFFFFFFFE8FC
PN6                     L       code            FFFFFFFFFFFFE284
tah1                    L       code            FFFFFFFFFFFFE908
PN4                     L       code            FFFFFFFFFFFFE294
POKE                    L       code            FFFFFFFFFFFFE910
PN3                     L       code            FFFFFFFFFFFFE288
PKER                    L       code            FFFFFFFFFFFFE93C
PN5                     L       code            FFFFFFFFFFFFE2A0
POKEC                   L       code            FFFFFFFFFFFFE944
PNRET                   L       code            FFFFFFFFFFFFE2B4
POKEH                   L       code            FFFFFFFFFFFFE970
PRTHEXNUM               L       code            FFFFFFFFFFFFE2CC
POKEW                   L       code            FFFFFFFFFFFFE99C
PHN1                    L       code            FFFFFFFFFFFFE308
SYSX                    L       code            FFFFFFFFFFFFE9C8
PHN7                    L       code            FFFFFFFFFFFFE31C
sysx1                   L       code            FFFFFFFFFFFFE9DC
PHN8                    L       code            FFFFFFFFFFFFE320
OREXPR                  L       code            FFFFFFFFFFFFE9F0
shru                    L       code            FFFFFFFFFFFFE32C
XP_OR1                  L       code            FFFFFFFFFFFFE9FC
r4                      L       code            FFFFFFFFFFFFE32C
XP_OR                   L       code            FFFFFFFFFFFFEA0C
#4                      L       code            FFFFFFFFFFFFE32C
XP_ORX                  L       code            FFFFFFFFFFFFEA1C
PHN6                    L       code            FFFFFFFFFFFFE334
ANDEXPR                 L       code            FFFFFFFFFFFFEA28
PHN4                    L       code            FFFFFFFFFFFFE344
XP_AND1                 L       code            FFFFFFFFFFFFEA34
PHN3                    L       code            FFFFFFFFFFFFE338
XP_AND                  L       code            FFFFFFFFFFFFEA44
PHN5                    L       code            FFFFFFFFFFFFE350
XP_ANDX                 L       code            FFFFFFFFFFFFEA54
PHNRET                  L       code            FFFFFFFFFFFFE364
isDigit                 L       code            FFFFFFFFFFFFEA60
TC1                     L       code            FFFFFFFFFFFFE3EC
isDigitFalse            L       code            FFFFFFFFFFFFEA70
TN1                     L       code            FFFFFFFFFFFFE410
isAlpha                 L       code            FFFFFFFFFFFFEA78
TSNMRET                 L       code            FFFFFFFFFFFFE448
isAlphaFalse            L       code            FFFFFFFFFFFFEA90
TN2                     L       code            FFFFFFFFFFFFE430
isAlphaTrue             L       code            FFFFFFFFFFFFEA88
IGB2                    L       code            FFFFFFFFFFFFE458
isAlnum                 L       code            FFFFFFFFFFFFEA98
IGB1                    L       code            FFFFFFFFFFFFE464
isDigitx                L       code            FFFFFFFFFFFFEAB4
IGBRET                  L       code            FFFFFFFFFFFFE46C
EXPR                    L       code            FFFFFFFFFFFFEABC
TOUPB1                  L       code            FFFFFFFFFFFFE484
XP11                    L       code            FFFFFFFFFFFFEAD8
TOUPBRT                 L       code            FFFFFFFFFFFFE4C0
XPRT1                   L       code            FFFFFFFFFFFFEB44
DOQUO                   L       code            FFFFFFFFFFFFE4A8
XPRT0                   L       code            FFFFFFFFFFFFEB38
toUpper                 L       code            FFFFFFFFFFFFE4C8
XP12                    L       code            FFFFFFFFFFFFEAE8
DOQUO1                  L       code            FFFFFFFFFFFFE4B4
XP13                    L       code            FFFFFFFFFFFFEAF8
TOUPRET                 L       code            FFFFFFFFFFFFE4D4
XP14                    L       code            FFFFFFFFFFFFEB08
CHKRET2                 L       code            FFFFFFFFFFFFE4F0
XP15                    L       code            FFFFFFFFFFFFEB18
CHKRET                  L       code            FFFFFFFFFFFFE4F4
XP16                    L       code            FFFFFFFFFFFFEB28
PRMESG1                 L       code            FFFFFFFFFFFFE510
XP17                    L       code            FFFFFFFFFFFFEB50
PRMRET                  L       code            FFFFFFFFFFFFE524
XP18                    L       code            FFFFFFFFFFFFEB5C
PRMESGA1                L       code            FFFFFFFFFFFFE544
EXPR2                   L       code            FFFFFFFFFFFFEB78
PRMRETA                 L       code            FFFFFFFFFFFFE558
XP26                    L       code            FFFFFFFFFFFFEBD4
AXIRET_ZERO             L       code            FFFFFFFFFFFFE580
XP21                    L       code            FFFFFFFFFFFFEB98
AXIRET                  L       code            FFFFFFFFFFFFE57C
XP22                    L       code            FFFFFFFFFFFFEBA4
_cls                    L       code            FFFFFFFFFFFFE58C
XP23                    L       code            FFFFFFFFFFFFEBA8
_wait10                 L       code            FFFFFFFFFFFFE594
XP24                    L       code            FFFFFFFFFFFFEBBC
_getATAStatus           L       code            FFFFFFFFFFFFE598
XP25                    L       code            FFFFFFFFFFFFEBC8
_waitCFNotBusy          L       code            FFFFFFFFFFFFE59C
XP45                    L       code            FFFFFFFFFFFFEBE0
_rdcf                   L       code            FFFFFFFFFFFFE5A0
EXPR3                   L       code            FFFFFFFFFFFFEBEC
rdcf6                   L       code            FFFFFFFFFFFFE5A4
XP31                    L       code            FFFFFFFFFFFFEBF8
msgInit                 L       code            FFFFFFFFFFFFE5C0
XP34                    L       code            FFFFFFFFFFFFEC18
OKMSG                   L       code            FFFFFFFFFFFFE5F6
XP47                    L       code            FFFFFFFFFFFFEC38
msgWhat                 L       code            FFFFFFFFFFFFE5FD
EXPR4                   L       code            FFFFFFFFFFFFEC44
SRYMSG                  L       code            FFFFFFFFFFFFE605
XP40                    L       code            FFFFFFFFFFFFEC58
CLMSG                   L       code            FFFFFFFFFFFFE60B
XP41                    L       code            FFFFFFFFFFFFEC70
msgReadError            L       code            FFFFFFFFFFFFE60E
XP46                    L       code            FFFFFFFFFFFFEC7C
msgNumTooBig            L       code            FFFFFFFFFFFFE629
PARN                    L       code            FFFFFFFFFFFFEC84
msgDivZero              L       code            FFFFFFFFFFFFE63D
XP42                    L       code            FFFFFFFFFFFFECA8
msgVarSpace             L       code            FFFFFFFFFFFFE650
XP43                    L       code            FFFFFFFFFFFFECB0
msgBytesFree            L       code            FFFFFFFFFFFFE668
TSTV                    L       code            FFFFFFFFFFFFECB8
msgReady                L       code            FFFFFFFFFFFFE676
tstv_notfound           L       code            FFFFFFFFFFFFED2C
msgComma                L       code            FFFFFFFFFFFFE680
TV1                     L       code            FFFFFFFFFFFFED10
msgLineRange            L       code            FFFFFFFFFFFFE694
TV2                     L       code            FFFFFFFFFFFFED04
msgVar                  L       code            FFFFFFFFFFFFE6AA
TSTVRT                  L       code            FFFFFFFFFFFFED20
msgRNDBad               L       code            FFFFFFFFFFFFE6C1
getVarName              L       code            FFFFFFFFFFFFED3C
msgSYSBad               L       code            FFFFFFFFFFFFE6D5
gvn1                    L       code            FFFFFFFFFFFFEDC4
msgInputVar             L       code            FFFFFFFFFFFFE6E7
gvn4                    L       code            FFFFFFFFFFFFED5C
msgNextFor              L       code            FFFFFFFFFFFFE704
gvn2                    L       code            FFFFFFFFFFFFED94
msgNextVar              L       code            FFFFFFFFFFFFE717
gvn6                    L       code            FFFFFFFFFFFFED84
msgBadGotoGosub         L       code            FFFFFFFFFFFFE73B
gvn3                    L       code            FFFFFFFFFFFFEDA8
msgRetWoGosub           L       code            FFFFFFFFFFFFE758
findVar                 L       code            FFFFFFFFFFFFEDD4
msgTooBig               L       code            FFFFFFFFFFFFE76F
fv4                     L       code            FFFFFFFFFFFFEDE4
msgExtraChars           L       code            FFFFFFFFFFFFE784
fv3                     L       code            FFFFFFFFFFFFEE08
 
fv1                     L       code            FFFFFFFFFFFFEE10
 
fv2                     L       code            FFFFFFFFFFFFEE20
 
PEEK                    L       code            FFFFFFFFFFFFEE34
 
PEEKC                   L       code            FFFFFFFFFFFFEE44
 
PEEKH                   L       code            FFFFFFFFFFFFEE58
 
PEEKW                   L       code            FFFFFFFFFFFFEE6C
 
USRX                    L       code            FFFFFFFFFFFFEE80
 
RND                     L       code            FFFFFFFFFFFFEE9C
 
rnd2                    L       code            FFFFFFFFFFFFEECC
 
rnd1                    L       code            FFFFFFFFFFFFEEC4
 
modu4                   L       code            FFFFFFFFFFFFEEDC
 
mod2                    L       code            FFFFFFFFFFFFEEFC
 
mod1                    L       code            FFFFFFFFFFFFEF18
 
ABS                     L       code            FFFFFFFFFFFFEF34
 
SGN                     L       code            FFFFFFFFFFFFEF44
 
SIZEX                   L       code            FFFFFFFFFFFFEF54
 
SETVAL                  L       code            FFFFFFFFFFFFEF68
 
sv2                     L       code            FFFFFFFFFFFFEF84
 
SV1                     L       code            FFFFFFFFFFFFEFAC
 
QWHAT                   L       code            FFFFFFFFFFFFF024
 
FIN                     L       code            FFFFFFFFFFFFEFB0
 
FI1                     L       code            FFFFFFFFFFFFEFCC
 
FI2                     L       code            FFFFFFFFFFFFEFE4
 
ENDCHK                  L       code            FFFFFFFFFFFFEFEC
 
ec1                     L       code            FFFFFFFFFFFFF00C
 
TOOBIG                  L       code            FFFFFFFFFFFFF014
 
QSORRY                  L       code            FFFFFFFFFFFFF01C
 
GETLN                   L       code            FFFFFFFFFFFFF068
 
GL1                     L       code            FFFFFFFFFFFFF090
 
GL3                     L       code            FFFFFFFFFFFFF0C4
 
GL4                     L       code            FFFFFFFFFFFFF0EC
 
GL2                     L       code            FFFFFFFFFFFFF0A8
 
GL7                     L       code            FFFFFFFFFFFFF11C
 
GL6                     L       code            FFFFFFFFFFFFF114
 
GL5                     L       code            FFFFFFFFFFFFF0F8
 
FNDLN                   L       code            FFFFFFFFFFFFF138
 
fl1                     L       code            FFFFFFFFFFFFF144
 
FNDLNP                  L       code            FFFFFFFFFFFFF148
 
FNDRET1                 L       code            FFFFFFFFFFFFF174
 
FNDNXT                  L       code            FFFFFFFFFFFFF188
 
FNDRET2                 L       code            FFFFFFFFFFFFF180
 
FNDRET                  L       code            FFFFFFFFFFFFF16C
 
FNDSKP                  L       code            FFFFFFFFFFFFF18C
 
MVUP1                   L       code            FFFFFFFFFFFFF19C
 
MVUP                    L       code            FFFFFFFFFFFFF1AC
 
MVRET                   L       code            FFFFFFFFFFFFF1B0
 
MVDOWN1                 L       code            FFFFFFFFFFFFF1B4
 
MVDOWN                  L       code            FFFFFFFFFFFFF1C4
 
POPA                    L       code            FFFFFFFFFFFFF1CC
 
PP1                     L       code            FFFFFFFFFFFFF1FC
 
PUSHA                   L       code            FFFFFFFFFFFFF200
 
PU1                     L       code            FFFFFFFFFFFFF240
 
PRTSTG                  L       code            FFFFFFFFFFFFF24C
 
PS1                     L       code            FFFFFFFFFFFFF268
 
PRTRET                  L       code            FFFFFFFFFFFFF288
 
QTSTG                   L       code            FFFFFFFFFFFFF2A4
 
QT1                     L       code            FFFFFFFFFFFFF2BC
 
QT2                     L       code            FFFFFFFFFFFFF2FC
 
QT3                     L       code            FFFFFFFFFFFFF2D4
 
QT4                     L       code            FFFFFFFFFFFFF2E8
 
QT5                     L       code            FFFFFFFFFFFFF308
 
prCRLF                  L       code            FFFFFFFFFFFFF310
 
PRTNUM                  L       code            FFFFFFFFFFFFF330
 
PN2                     L       code            FFFFFFFFFFFFF360
 
PN1                     L       code            FFFFFFFFFFFFF364
 
PN6                     L       code            FFFFFFFFFFFFF380
 
PN4                     L       code            FFFFFFFFFFFFF390
 
PN3                     L       code            FFFFFFFFFFFFF384
 
PN5                     L       code            FFFFFFFFFFFFF39C
 
PNRET                   L       code            FFFFFFFFFFFFF3B0
 
PRTHEXNUM               L       code            FFFFFFFFFFFFF3C8
 
PHN1                    L       code            FFFFFFFFFFFFF400
 
PHN7                    L       code            FFFFFFFFFFFFF414
 
PHN8                    L       code            FFFFFFFFFFFFF418
 
PHN6                    L       code            FFFFFFFFFFFFF430
 
PHN4                    L       code            FFFFFFFFFFFFF440
 
PHN3                    L       code            FFFFFFFFFFFFF434
 
PHN5                    L       code            FFFFFFFFFFFFF44C
 
PHNRET                  L       code            FFFFFFFFFFFFF460
 
PRTLN                   L       code            FFFFFFFFFFFFF478
 
TSTC                    L       code            FFFFFFFFFFFFF4C0
 
TC1                     L       code            FFFFFFFFFFFFF4E8
 
TSTNUM                  L       code            FFFFFFFFFFFFF4F8
 
TN1                     L       code            FFFFFFFFFFFFF50C
 
TSNMRET                 L       code            FFFFFFFFFFFFF54C
 
TN2                     L       code            FFFFFFFFFFFFF534
 
IGNBLK                  L       code            FFFFFFFFFFFFF554
 
IGB2                    L       code            FFFFFFFFFFFFF55C
 
IGB1                    L       code            FFFFFFFFFFFFF568
 
IGBRET                  L       code            FFFFFFFFFFFFF570
 
TOUPBUF                 L       code            FFFFFFFFFFFFF578
 
TOUPB1                  L       code            FFFFFFFFFFFFF588
 
TOUPBRT                 L       code            FFFFFFFFFFFFF5C4
 
DOQUO                   L       code            FFFFFFFFFFFFF5AC
 
DOQUO1                  L       code            FFFFFFFFFFFFF5B8
 
toUpper                 L       code            FFFFFFFFFFFFF5CC
 
TOUPRET                 L       code            FFFFFFFFFFFFF5D8
 
CHKIO                   L       code            FFFFFFFFFFFFF5DC
 
CHKRET2                 L       code            FFFFFFFFFFFFF5F4
 
CHKRET                  L       code            FFFFFFFFFFFFF5F8
 
PRMESG                  L       code            FFFFFFFFFFFFF604
 
PRMESG1                 L       code            FFFFFFFFFFFFF614
 
PRMRET                  L       code            FFFFFFFFFFFFF628
 
PRMESGAUX               L       code            FFFFFFFFFFFFF638
 
PRMESGA1                L       code            FFFFFFFFFFFFF648
 
PRMRETA                 L       code            FFFFFFFFFFFFF65C
 
OUTC                    L       code            FFFFFFFFFFFFF66C
 
INC                     L       code            FFFFFFFFFFFFF670
 
AUXIN                   L       code            FFFFFFFFFFFFF674
 
AXIRET_ZERO             L       code            FFFFFFFFFFFFF684
 
AXIRET                  L       code            FFFFFFFFFFFFF680
 
AUXOUT                  L       code            FFFFFFFFFFFFF68C
 
_cls                    L       code            FFFFFFFFFFFFF690
 
_wait10                 L       code            FFFFFFFFFFFFF698
 
_getATAStatus           L       code            FFFFFFFFFFFFF69C
 
_waitCFNotBusy          L       code            FFFFFFFFFFFFF6A0
 
_rdcf                   L       code            FFFFFFFFFFFFF6A4
 
rdcf6                   L       code            FFFFFFFFFFFFF6A8
 
BYEBYE                  L       code            FFFFFFFFFFFFF8A0
 
msgInit                 L       code            FFFFFFFFFFFFF6B8
 
OKMSG                   L       code            FFFFFFFFFFFFF6EE
 
msgWhat                 L       code            FFFFFFFFFFFFF6F5
 
SRYMSG                  L       code            FFFFFFFFFFFFF6FD
 
CLMSG                   L       code            FFFFFFFFFFFFF703
 
msgReadError            L       code            FFFFFFFFFFFFF706
 
msgNumTooBig            L       code            FFFFFFFFFFFFF721
 
msgDivZero              L       code            FFFFFFFFFFFFF735
 
msgVarSpace             L       code            FFFFFFFFFFFFF748
 
msgBytesFree            L       code            FFFFFFFFFFFFF760
 
msgReady                L       code            FFFFFFFFFFFFF76E
 
msgComma                L       code            FFFFFFFFFFFFF778
 
msgLineRange            L       code            FFFFFFFFFFFFF78C
 
msgVar                  L       code            FFFFFFFFFFFFF7A2
 
msgRNDBad               L       code            FFFFFFFFFFFFF7B9
 
msgSYSBad               L       code            FFFFFFFFFFFFF7CD
 
msgInputVar             L       code            FFFFFFFFFFFFF7DF
 
msgNextFor              L       code            FFFFFFFFFFFFF7FC
 
msgNextVar              L       code            FFFFFFFFFFFFF80F
 
msgBadGotoGosub         L       code            FFFFFFFFFFFFF833
 
msgRetWoGosub           L       code            FFFFFFFFFFFFF850
 
msgTooBig               L       code            FFFFFFFFFFFFF867
 
msgExtraChars           L       code            FFFFFFFFFFFFF87C
LSTROM                  C       constant        0000000000000000
LSTROM                  C       constant        0000000000000000
ramtest                 L       code            FFFFFFFFFFFFE7B0
ramtest                 L       code            FFFFFFFFFFFFF8B0
ramtest2                L       code            FFFFFFFFFFFFE7C4
ramtest2                L       code            FFFFFFFFFFFFF8C4
ramtest1                L       code            FFFFFFFFFFFFE7E8
ramtest1                L       code            FFFFFFFFFFFFF8E8
ramtest4                L       code            FFFFFFFFFFFFE7F0
ramtest4                L       code            FFFFFFFFFFFFF8F0
ramtest3                L       code            FFFFFFFFFFFFE81C
ramtest3                L       code            FFFFFFFFFFFFF91C
ramtest8                L       code            FFFFFFFFFFFFE88C
ramtest8                L       code            FFFFFFFFFFFFF98C
ramtest5                L       code            FFFFFFFFFFFFE834
ramtest5                L       code            FFFFFFFFFFFFF934
ramtest6                L       code            FFFFFFFFFFFFE858
ramtest6                L       code            FFFFFFFFFFFFF958
ramtest7                L       code            FFFFFFFFFFFFE860
ramtest7                L       code            FFFFFFFFFFFFF960
ramtest9                L       code            FFFFFFFFFFFFE894
ramtest9                L       code            FFFFFFFFFFFFF994
ramtest10               L       code            FFFFFFFFFFFFE89C
ramtest10               L       code            FFFFFFFFFFFFF99C
iberr_rout              L       code            FFFFFFFFFFFFE8A4
iberr_rout              L       code            FFFFFFFFFFFFF9A4
dberr_rout              L       code            FFFFFFFFFFFFE8BC
dberr_rout              L       code            FFFFFFFFFFFFF9BC
dberr1                  L       code            FFFFFFFFFFFFE8E4
dberr1                  L       code            FFFFFFFFFFFFF9F0
msgdberr                L       code            FFFFFFFFFFFFE910
msgdberr                L       code            FFFFFFFFFFFFFA20
msgEPC                  L       code            FFFFFFFFFFFFE924
msgEPC                  L       code            FFFFFFFFFFFFFA34
msgiberr                L       code            FFFFFFFFFFFFE92B
msgiberr                L       code            FFFFFFFFFFFFFA3B
irqrout                 L       code            FFFFFFFFFFFFE950
irqrout                 L       code            FFFFFFFFFFFFFA5C
irq1000Hz               L       code            FFFFFFFFFFFFE970
irq1000Hz               L       code            FFFFFFFFFFFFFABC
irq100Hz                L       code            FFFFFFFFFFFFE9C8
irq100Hz                L       code            FFFFFFFFFFFFFAF0
irqSerial               L       code            FFFFFFFFFFFFE9D8
irqSerial               L       code            FFFFFFFFFFFFFB10
irqret                  L       code            FFFFFFFFFFFFEA08
irqRaster               L       code            FFFFFFFFFFFFFB1C
irqRaster               L       code            FFFFFFFFFFFFE9E8
irqKeybd                L       code            FFFFFFFFFFFFFB28
irqKeybd                L       code            FFFFFFFFFFFFE9F8
irqColdStart            L       code            FFFFFFFFFFFFFB34
nmirout                 L       code            FFFFFFFFFFFFEA20
irqret                  L       code            FFFFFFFFFFFFFAF8
DTLBHandler             L       code            FFFFFFFFFFFFEA24
nmirout                 L       code            FFFFFFFFFFFFFB38
dh1                     L       code            FFFFFFFFFFFFEA34
msgPerr                 L       code            FFFFFFFFFFFFFB80
 
ui_irout                L       code            FFFFFFFFFFFFFB94
 
ui_irout1               L       code            FFFFFFFFFFFFFBB8
 
msgUnimp                L       code            FFFFFFFFFFFFFBC0
 
DTLBHandler             L       code            FFFFFFFFFFFFFBE0
 
dh1                     L       code            FFFFFFFFFFFFFBF0

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.