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
|