URL
https://opencores.org/ocsvn/rf6809/rf6809/trunk
Subversion Repositories rf6809
[/] [rf6809/] [trunk/] [software/] [boot/] [boot_rom.lst] - Rev 4
Go to most recent revision | Compare with Previous | Blame | View Log
0 error(s), 62 warning(s) unlisted in pass 1; ============================================================================; __; \\__/ o\ (C) 2013-2022 Robert Finch, Stratford; \ __ / All rights reserved.; \/_// robfinch<remove>@opencores.org; ||;;; 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; by the Free Software Foundation, either version 3 of the License, or; (at your option) any later version.;; This source file is distributed in the hope that it will be useful,; but WITHOUT ANY WARRANTY; without even the implied warranty of; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License; along with this program. If not, see <http://www.gnu.org/licenses/>.;; ============================================================================;CR EQU $0D ;ASCII equatesLF EQU $0ATAB EQU $09CTRLC EQU $03CTRLH EQU $08CTRLI EQU $09CTRLJ EQU $0ACTRLK EQU $0BCTRLM EQU $0DCTRLS EQU $13CTRLX EQU $18XON EQU $11XOFF EQU $13FIRST_CORE EQU 1MAX_TASKNO EQU 63DRAM_BASE EQU $10000000ScreenLocation EQU $10ColorCodeLocation EQU $14ScreenLocation2 EQU $18BlkcpySrc EQU $1CBlkcpyDst EQU $20Strptr EQU $24PICptr EQU $28; Forth Area; 0x30-0x60RunningID EQU $800000; Task control blocks, room for 256 tasksTCB_NxtRdy EQU $00 ; next task on ready / timeout listTCB_PrvRdy EQU $04 ; previous task on ready / timeout listTCB_NxtTCB EQU $08TCB_Timeout EQU $0CTCB_Priority EQU $10TCB_MSGPTR_D1 EQU $14TCB_MSGPTR_D2 EQU $18TCB_hJCB EQU $1CTCB_Status EQU $1ETCB_CursorRow EQU $20TCB_CursorCol EQU $21TCB_hWaitMbx EQU $22 ; handle of mailbox task is waiting atTCB_mbq_next EQU $24 ; mailbox queue nextTCB_mbq_prev EQU $28 ; mailbox queue previousTCB_iof_next EQU $2CTCB_iof_prev EQU $30TCB_SPSave EQU $34 ; TCB_SPSave areaTCB_mmu_map EQU $38KeybdHead EQU $FFFFFC800KeybdTail EQU $FFFFFC900KeybdEcho EQU $FFFFFCA00KeybdBad EQU $FFFFFCB00KeybdAck EQU $FFFFFCC00KeybdLocks EQU $FFFFFCD00KeybdBuffer EQU $FFFFFC000 ; buffer is 16 charsCOREID EQU $FFFFFFFE0MSCOUNT EQU $FFFFFFFE4LEDS EQU $FFFE60000TEXTSCR EQU $FFFE00000TEXTREG EQU $FFFE0DF00TEXT_COLS EQU 0TEXT_ROWS EQU 1TEXT_CURPOS EQU 34KEYBD EQU $FFFE30400KEYBDCLR EQU $FFFE30402PIC EQU $FFFE3F000SPRITE_CTRL EQU $FFFE10000SPRITE_EN EQU $3C0BIOS_SCREENS EQU $17000000 ; $17000000 to $171FFFFF; EhBASIC vars:;NmiBase EQU $DCIrqBase EQU $DF; The IO focus list is a doubly linked list formed into a ring.;IOFocusNdx EQU $100IOFocusID EQU $100; These variables use direct page accessCursorRow EQU $110CursorCol EQU $111CharColor EQU $112ScreenColor EQU $113CursorFlash EQU $114KeyState1 EQU $120KeyState2 EQU $121KeyLED EQU $122KeybdID EQU $124QNdx0 EQU $780QNdx1 EQU QNdx0+2QNdx2 EQU QNdx1+2QNdx3 EQU QNdx2+2QNdx4 EQU QNdx3+2FreeTCB EQU QNdx4+2TimeoutList EQU FreeTCB+2FreeMbx EQU RunningTCB + 2nMailbox EQU FreeMbx + 2FreeMsg EQU nMailbox + 2nMsgBlk EQU FreeMsg + 2IrqSource EQU $79AIRQFlag EQU $7C6CharOutVec EQU $800CharInVec EQU $804; Register save area for monitormon_DSAVE EQU $900mon_XSAVE EQU $902mon_YSAVE EQU $904mon_USAVE EQU $906mon_SSAVE EQU $908mon_PCSAVE EQU $90Amon_DPRSAVE EQU $90Emon_CCRSAVE EQU $90Fmon_numwka EQU $910mon_r1 EQU $920mon_r2 EQU $922; The ORG directive must set an address a multiple of 4 in order for the Verilog; output to work correctly.org $FFD0AC00FFD0AC 012 nop00FFD0AD 012 nop00FFD0AE 012 nopXBLANK00FFD0AF 0C6020 ldb #' '00FFD0B1 0170028C8 lbsr OUTCH00FFD0B4 039 rtsorg $FFD0D000FFD0D0 012 nop00FFD0D1 012 nopCRLFCRLF1:00FFD0D2 0C600D ldb #CR00FFD0D4 0170028A5 lbsr OUTCH00FFD0D7 0C600A ldb #LF00FFD0D9 0170028A0 lbsr OUTCH00FFD0DC 039 rtsorg $FFD0F000FFD0F0 012 nop00FFD0F1 020FDF bra CRLF1org $FFD1DCONEKEY00FFD1DC 06E90F000804 jmp [CharInVec]org $FFD2C000FFD2C0 012 nopLETTER00FFD2C1 0170026B8 lbsr OUTCH00FFD2C4 039 rtsorg $FFD2CC00FFD2CC 012 nop00FFD2CD 012 nopHEX200FFD2CE 0170020CC lbsr DispByteAsHex00FFD2D1 039 rtsHEX400FFD2D2 0170020BF lbsr DispWordAsHex00FFD2D5 039 rtsorg $FFD300ClearScreenJmp00FFD300 016001ECD lbra ClearScreenorg $FFD308HomeCursorJmp00FFD308 016001F36 lbra HomeCursororg $FFE000; Local RAM test routine; Checkerboard testing.; There is 70kB of local RAM; Does not use any RAM including no stackramtest:00FFE000 18E000000 ldy #000FFE003 086001 lda #100FFE005 0150B7FFFE60000 sta LEDS00FFE00A 0CCAAA555 ldd #$AAA555ramtest1:00FFE00D 0EDA01 std ,y++00FFE00F 18CC00000 cmpy #$C0000000FFE012 025FF9 blo ramtest1; now readback values and compare00FFE014 18E000000 ldy #0ramtest3:00FFE017 0ECA01 ldd ,y++00FFE019 183AAA555 cmpd #$AAA55500FFE01C 02600E bne ramerr00FFE01E 18CC00000 cmpy #$C0000000FFE021 025FF4 blo ramtest300FFE023 086002 lda #200FFE025 0150B7FFFE60000 sta LEDS00FFE02A 06EC04 jmp ,uramerr:00FFE02C 086080 lda #$8000FFE02E 0150B7FFFE60000 sta LEDS00FFE033 08EE00000 ldx #TEXTSCR00FFE036 0150F6FFFFFFFE0 ldb COREID00FFE03B 03A abx00FFE03C 086046 lda #'F'00FFE03E 0A7804 sta ,x00FFE040 013 sync00FFE041 06EC04 jmp ,uorg $FFF00000FFF000 FFF996 FDB Monitor00FFF002 FFF022 FDB DumRts ; NEXTCMD00FFF004 FFF95E FDB INCH00FFF006 FFF963 FDB INCHE00FFF008 FFF967 FDB INCHEK00FFF00A FFF97C FDB OUTCH00FFF00C FFF381 FDB PDATA00FFF00E FFF374 FDB PCRLF00FFF010 FFF370 FDB PSTRNG00FFF012 FFF022 FDB DumRts ; LRA00FFF014 FFF022 FDB DumRts00FFF016 FFF022 FDB DumRts00FFF018 FFF022 FDB DumRts00FFF01A FFF022 FDB DumRts ; VINIZ00FFF01C FFF29B FDB DisplayChar ; VOUTCH00FFF01E FFF022 FDB DumRts ; ACINIZ00FFF020 FFF022 FDB DumRts ; AOUTCHDumRts:00FFF022 039 rts;------------------------------------------------------------------------------;------------------------------------------------------------------------------start:00FFF023 086055 lda #$55 ; see if we can at least set LEDs00FFF025 0150B7FFFE60000 sta LEDS00FFF02A 0CEFFF030 ldu #st6 ; U = return address00FFF02D 07EFFE000 jmp ramtest ; JMP dont JSRst6:00FFF030 1CE003FFF lds #$3FFF ; boot up stack area00FFF033 0150B6FFFFFFFE0 lda COREID00FFF038 081001 cmpa #FIRST_CORE; beq st8; sync ; halt cores other than 2st8:; bne skip_init; bsr romToRam; ldd #st7 & $FFFF; tfr d,x; jmp ,x ; jump to the BIOS now in local RAMst7:00FFF03A 08D11F bsr Delay3s ; give some time for devices to reset00FFF03C 0860AA lda #$AA00FFF03E 0150B7FFFE60000 sta LEDS00FFF043 086002 lda #200FFF045 097100 sta IOFocusID ; core #2 has focus00FFF047 0B7800000 sta RunningID00FFF04A 0860CE lda #$0CE00FFF04C 097113 sta ScreenColor00FFF04E 097112 sta CharColor00FFF050 08D17E bsr ClearScreen00FFF052 0CCFFF29B ldd #DisplayChar00FFF055 0DD800 std CharOutVec00FFF057 0CCFFF83B ldd #DBGGetKey00FFF05A 0DD804 std CharInVec00FFF05C 0150F6FFFFFFFE0 ldb COREID00FFF061 0C1001 cmpb #FIRST_CORE00FFF063 02700D beq init00FFF065 020025 bra skip_init00FFF067 02008D bra multi_sievest3:00FFF069 0860FF lda #$FF00FFF06B 0150B7FFFE60000 sta LEDS00FFF070 020FF7 bra st3; initialize interrupt controller; first, zero out all the vectorsinit:00FFF072 08E000080 ldx #12800FFF075 086001 lda #1 ; set irq(bit0), clear firq (bit1), disable int (bit 6), clear edge sense(bit 7)00FFF077 0C6001 ldb #FIRST_CORE ; serving core idst1:00FFF079 06F809E3F000 clr PIC,x ; cause code00FFF07D 0A7809E3F001 sta PIC+1,x00FFF081 0E7809E3F002 stb PIC+2,x00FFF085 030004 leax 4,x00FFF087 08C000100 cmpx #25600FFF08A 025FED blo st1; lda #4 ; make the timer interrupt edge sensitive; sta PIC+4 ; reg #4 is the edge sensitivity setting; sta PIC ; reg #0 is interrupt enableskip_init:00FFF08C 01C0EF andcc #$EF ; unmask irq00FFF08E 086038 lda #5600FFF090 0150B7FFFE0DF00 sta TEXTREG+TEXT_COLS00FFF095 08601D lda #2900FFF097 0150B7FFFE0DF01 sta TEXTREG+TEXT_ROWS00FFF09C 08D132 bsr ClearScreen00FFF09E 08D1A1 bsr HomeCursor00FFF0A0 086005 lda #500FFF0A2 0150B7FFFE60000 sta LEDS00FFF0A7 0CCFFF0BF ldd #msgStartup00FFF0AA 08D2A8 bsr DisplayString00FFF0AC 08E000000 ldx #000FFF0AF 0CC000000 ldd #000FFF0B2 0170008D1 lbsr ShowSprites00FFF0B5 017000708 lbsr KeybdInit00FFF0B8 0DC124 ldd KeybdID00FFF0BA 08D2D8 bsr DispWordAsHex00FFF0BC 07EFFF991 jmp MonitorStartmsgStartup00FFF0BF 072066036038030039020 fcb "rf6809 12-bit System Starting.",CR,LF,000FFF0C6 03103202D06206907402000FFF0CD 05307907307406506D02000FFF0D4 05307406107207406906E00FFF0DB 06702E00D00A000;------------------------------------------------------------------------------; The checkpoint register must be cleared within 1 second or a NMI interrupt; will occur. checkpoint should be called with a JSR so that the global ROM; routine is called.;; Modifies:; none;------------------------------------------------------------------------------checkpoint:00FFF0E0 01507FFFFFFFFE1 clr $FFFFFFFE1 ; writing any value will do00FFF0E5 039 rts;------------------------------------------------------------------------------; Copy the system ROM to local RAM; Running the code from local RAM is probably an order of magnitude faster; then running from the global ROM. It also reduces the network traffic to; run from local RAM.;; Modifies:; d,x,y;------------------------------------------------------------------------------romToRam:00FFF0E6 08EFFC000 ldx #$FFC00000FFF0E9 18E00C000 ldy #$00C000romToRam1:00FFF0EC 0EC801 ldd ,x++00FFF0EE 0EDA01 std ,y++00FFF0F0 08C000000 cmpx #000FFF0F3 026FF7 bne romToRam100FFF0F5 039 rts;------------------------------------------------------------------------------; Multi-core sieve program.;------------------------------------------------------------------------------; First fill screen chars with 'P' indicating prime positions; Each core is responsible for the Nth position where N is the; core number minus two.;multi_sieve:00FFF0F6 086050 lda #'P' ; indicate prime00FFF0F8 0150F6FFFFFFFE0 ldb COREID ; find out which core we are00FFF0FD 0C0001 subb #FIRST_CORE00FFF0FF 08E000000 ldx #0 ; start at first char of screen00FFF102 03A abxmulti_sieve3:00FFF103 0A7809E00000 sta TEXTSCR,x ; store 'P'00FFF107 030008 leax 8,x ; advance to next position00FFF109 08C000FFF cmpx #409500FFF10C 025FF5 blo multi_sieve300FFF10E 0BDFFF0E0 jsr checkpoint*** warning 1: Long branch within short branch range could be optimized00FFF111 0CB002 addb #2 ; start sieve at 2 (core id)00FFF113 08604E lda #'N' ; flag position value of 'N' for non-primemulti_sieve2:00FFF115 08E000000 ldx #000FFF118 03A abx ; skip the first position - might be primemulti_sieve1:00FFF119 03A abx ; increment00FFF11A 0A7809E00000 sta TEXTSCR,x00FFF11E 08C000FFF cmpx #409500FFF121 025FF6 blo multi_sieve100FFF123 0BDFFF0E0 jsr checkpoint*** warning 1: Long branch within short branch range could be optimized00FFF126 0CB008 addb #8 ; number of cores working on it00FFF128 0C1FF0 cmpb #408000FFF12A 025FE9 blo multi_sieve2multi_sieve4: ; hang machine00FFF12C 013 sync00FFF12D 016000866 lbra Monitorsieve:00FFF130 086050 lda #'P' ; indicate prime00FFF132 08E000000 ldx #0 ; start at first char of screensieve3:00FFF135 0A7809E00000 sta TEXTSCR,x ; store 'P'00FFF139 030001 inx ; advance to next position00FFF13B 08C000FFF cmpx #409500FFF13E 025FF5 blo sieve300FFF140 0C6002 ldb #2 ; start sieve at 200FFF142 08604E lda #'N' ; flag position value of 'N' for non-primesieve2:00FFF144 08E000000 ldx #000FFF147 03A abx ; skip the first position - might be primesieve1:00FFF148 03A abx ; increment00FFF149 0A7809E00000 sta TEXTSCR,x00FFF14D 08C000FFF cmpx #409500FFF150 025FC7 blo multi_sieve100FFF152 05C incb ; number of cores working on it00FFF153 0C1FF0 cmpb #408000FFF155 025FED blo sieve2sieve4: ; hang machine00FFF157 013 sync00FFF158 016000836 lbra MonitorStart;------------------------------------------------------------------------------; Three second delay for user convenience and to allow some devices time to; reset.;------------------------------------------------------------------------------Delay3s:00FFF15B 0CC895440 ldd #9000000dly3s1:00FFF15E 0C10FF cmpb #$FF00FFF160 026000 bne dly3s2dly3s2:00FFF162 0150B7FFFE60000 sta LEDS00FFF167 083000001 subd #100FFF16A 026FF2 bne dly3s100FFF16C 039 rts;------------------------------------------------------------------------------;------------------------------------------------------------------------------ShiftLeft5:00FFF16D 058 aslb00FFF16E 049 rola00FFF16F 058 aslb00FFF170 049 rola00FFF171 058 aslb00FFF172 049 rola00FFF173 058 aslb00FFF174 049 rola00FFF175 058 aslb00FFF176 049 rola00FFF177 039 rts;------------------------------------------------------------------------------;------------------------------------------------------------------------------;CopyVirtualScreenToScreen:00FFF178 034076 pshs d,x,y,u00FFF17A 08D0B4 bsr GetScreenLocation00FFF17C 01F001 tfr d,x00FFF17E 18EE00000 ldy #TEXTSCR00FFF181 0CE00032C ldu #56*29/2cv2s1:00FFF184 0EC801 ldd ,x++00FFF186 0EDA01 std ,y++00FFF188 0335FF leau -1,u00FFF18A 283000000 cmpu #000FFF18D 026FF5 bne cv2s1; reset the cursor position in the text controller00FFF18F 0D6110 ldb CursorRow00FFF191 086038 lda #5600FFF193 03D mul00FFF194 01F001 tfr d,x00FFF196 0D6111 ldb CursorCol00FFF198 03A abx00FFF199 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOS00FFF19E 0350F6 puls d,x,y,u,pc;------------------------------------------------------------------------------;------------------------------------------------------------------------------;CopyScreenToVirtualScreen:00FFF1A0 034076 pshs d,x,y,u00FFF1A2 08D08C bsr GetScreenLocation00FFF1A4 01F002 tfr d,y00FFF1A6 08EE00000 ldx #TEXTSCR00FFF1A9 0CE00032C ldu #56*29/2cs2v1:00FFF1AC 0EC801 ldd ,x++00FFF1AE 0EDA01 std ,y++00FFF1B0 0335FF leau -1,u00FFF1B2 283000000 cmpu #000FFF1B5 026FF5 bne cs2v100FFF1B7 0350F6 puls d,x,y,u,pc;------------------------------------------------------------------------------;------------------------------------------------------------------------------00FFF1B9 054045058054053043052 fcb "TEXTSCR "00FFF1C0 02000FFF1C1 FFF1CB fcw TextOpen00FFF1C3 FFF1CC fcw TextClose00FFF1C5 FFF1CD fcw TextRead00FFF1C7 FFF1CE fcw TextWrite00FFF1C9 FFF1CF fcw TextSeekTextOpen:00FFF1CB 039 rtsTextClose:00FFF1CC 039 rtsTextRead:00FFF1CD 039 rtsTextWrite:00FFF1CE 039 rtsTextSeek:00FFF1CF 039 rts;------------------------------------------------------------------------------; Clear the screen and the screen color memory; We clear the screen to give a visual indication that the system; is working at all.;; Modifies:; none;------------------------------------------------------------------------------ClearScreen:00FFF1D0 034076 pshs d,x,y,u00FFF1D2 08E000658 ldx #56*2900FFF1D5 01F013 tfr x,u00FFF1D7 08D057 bsr GetScreenLocation00FFF1D9 01F002 tfr d,y00FFF1DB 0C6020 ldb #' ' ; space charcs1:00FFF1DD 0E7A00 stb ,y+ ; set text to space00FFF1DF 0301FF leax -1,x ; decrement x00FFF1E1 026FFA bne cs100FFF1E3 0150F6FFFFFFFE0 ldb COREID ; update colors only if we have focus00FFF1E8 0D1100 cmpb IOFocusID00FFF1EA 02000D bra cs300FFF1EC 18EE02000 ldy #TEXTSCR+$2000; lda CharColor00FFF1EF 0860CE lda #$0CE00FFF1F1 01F031 tfr u,x ; get back countcs2:00FFF1F3 0A7A00 sta ,y+00FFF1F5 0301FF leax -1,x ; decrement x00FFF1F7 026FFA bne cs2cs3:00FFF1F9 0350F6 puls d,x,y,u,pc;------------------------------------------------------------------------------; Scroll text on the screen upwards;; Modifies:; none;------------------------------------------------------------------------------ScrollUp:00FFF1FB 034076 pshs d,x,y,u00FFF1FD 18E00032B ldy #(56*29-1)/2 ; y = num chars/2 to move00FFF200 08D02E bsr GetScreenLocation00FFF202 01F001 tfr d,x00FFF204 01F003 tfr d,u00FFF206 030038 leax 56,x ; x = index to source rowscrup1:00FFF208 0EC801 ldd ,x++ ; move 2 characters00FFF20A 0EDC01 std ,u++00FFF20C 0313FF leay -1,y00FFF20E 026FF8 bne scrup100FFF210 08601E lda #3000FFF212 08D002 bsr BlankLine00FFF214 0350F6 puls d,x,y,u,pc;------------------------------------------------------------------------------; Blank out a line on the display;; Modifies:; none; Parameters:; acca = line number to blank;------------------------------------------------------------------------------BlankLine:00FFF216 034016 pshs d,x00FFF218 034002 pshs a00FFF21A 08D014 bsr GetScreenLocation00FFF21C 01F001 tfr d,x00FFF21E 035002 puls a00FFF220 0C6038 ldb #56 ; b = # chars to blank out from video controller00FFF222 03D mul ; d = screen index (row# * #cols)00FFF223 03080B leax d,x00FFF225 086020 lda #' '00FFF227 0C6038 ldb #56 ; b = # chars to blank out from video controllerblnkln1:00FFF229 0A7800 sta ,x+00FFF22B 05A decb00FFF22C 026FFB bne blnkln100FFF22E 035096 puls d,x,pc;------------------------------------------------------------------------------; Get the location of the screen memory. The location; depends on whether or not the task has the output focus.;; Modifies:; d; Retuns:; d = screen location;------------------------------------------------------------------------------GetScreenLocation:00FFF230 0150B6FFFFFFFE0 lda COREID ; which core are we?00FFF235 091100 cmpa IOFocusID ; do we have the IO focus00FFF237 026004 bne gsl1 ; no, go pick virtual screen address00FFF239 0CCE00000 ldd #TEXTSCR ; yes, we update the real screen00FFF23C 039 rtsgsl1:00FFF23D 0CC007800 ldd #$780000FFF240 039 rts;------------------------------------------------------------------------------; HomeCursor; Set the cursor location to the top left of the screen.;; Modifies:; none;------------------------------------------------------------------------------HomeCursor:00FFF241 034016 pshs d,x00FFF243 00F110 clr CursorRow00FFF245 00F111 clr CursorCol00FFF247 0150F6FFFFFFFE0 ldb COREID00FFF24C 0D1100 cmpb IOFocusID00FFF24E 026006 bne hc100FFF250 04F clra00FFF251 0150B7FFFE0DF22 sta TEXTREG+TEXT_CURPOShc1:00FFF256 035096 puls d,x,pc;------------------------------------------------------------------------------; Update the cursor position in the text controller based on the; CursorRow,CursorCol.;; Modifies:; none;------------------------------------------------------------------------------;UpdateCursorPos:00FFF258 034016 pshs d,x00FFF25A 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller00FFF25F 0D1100 cmpb IOFocusID ; only for the task with the output focus00FFF261 026014 bne ucp100FFF263 096110 lda CursorRow00FFF265 08403F anda #$3F ; limit of 63 rows00FFF267 0150F6FFFE0DF00 ldb TEXTREG+TEXT_COLS00FFF26C 03D mul00FFF26D 01F001 tfr d,x00FFF26F 0D6111 ldb CursorCol00FFF271 03A abx00FFF272 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOSucp1:00FFF277 035096 puls d,x,pc;------------------------------------------------------------------------------; Calculate screen memory location from CursorRow,CursorCol.; Also refreshes the cursor location.;; Modifies:; d; Returns:; d = screen location;------------------------------------------------------------------------------;CalcScreenLoc:00FFF279 034010 pshs x00FFF27B 096110 lda CursorRow00FFF27D 0C6038 ldb #5600FFF27F 03D mul00FFF280 01F001 tfr d,x00FFF282 0D6111 ldb CursorCol00FFF284 03A abx00FFF285 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller00FFF28A 0D1100 cmpb IOFocusID ; only for the task with the output focus00FFF28C 026005 bne csl100FFF28E 0150BFFFFE0DF22 stx TEXTREG+TEXT_CURPOScsl1:00FFF293 08DF9B bsr GetScreenLocation00FFF295 03080B leax d,x00FFF297 01F010 tfr x,d00FFF299 035090 puls x,pc;------------------------------------------------------------------------------; Display a character on the screen.; If the task doesn't have the I/O focus then the character is written to; the virtual screen.;; Modifies:; none; Parameters:; accb = char to display;------------------------------------------------------------------------------;DisplayChar:00FFF29B 034016 pshs d,x00FFF29D 0C100D cmpb #CR ; carriage return ?00FFF29F 026006 bne dccr00FFF2A1 00F111 clr CursorCol ; just set cursor column to zero on a CR00FFF2A3 08DFB3 bsr UpdateCursorPosdcx14:00FFF2A5 035096 puls d,x,pcdccr:00FFF2A7 0C1091 cmpb #$91 ; cursor right ?00FFF2A9 02600D bne dcx600FFF2AB 096111 lda CursorCol00FFF2AD 081038 cmpa #5600FFF2AF 024003 bhs dcx700FFF2B1 04C inca00FFF2B2 097111 sta CursorColdcx7:00FFF2B4 08DFA2 bsr UpdateCursorPos00FFF2B6 035096 puls d,x,pcdcx6:00FFF2B8 0C1090 cmpb #$90 ; cursor up ?00FFF2BA 026009 bne dcx800FFF2BC 096110 lda CursorRow00FFF2BE 027FF4 beq dcx700FFF2C0 04A deca00FFF2C1 097110 sta CursorRow00FFF2C3 020FEF bra dcx7dcx8:00FFF2C5 0C1093 cmpb #$93 ; cursor left ?00FFF2C7 026009 bne dcx900FFF2C9 096111 lda CursorCol00FFF2CB 027FE7 beq dcx700FFF2CD 04A deca00FFF2CE 097111 sta CursorCol00FFF2D0 020FE2 bra dcx7dcx9:00FFF2D2 0C1092 cmpb #$92 ; cursor down ?00FFF2D4 02600B bne dcx1000FFF2D6 096110 lda CursorRow00FFF2D8 08101D cmpa #2900FFF2DA 027FD8 beq dcx700FFF2DC 04C inca00FFF2DD 097110 sta CursorRow00FFF2DF 020FD3 bra dcx7dcx10:00FFF2E1 0C1094 cmpb #$94 ; cursor home ?00FFF2E3 02600C bne dcx1100FFF2E5 096111 lda CursorCol00FFF2E7 027004 beq dcx1200FFF2E9 00F111 clr CursorCol00FFF2EB 020FC7 bra dcx7dcx12:00FFF2ED 00F110 clr CursorRow00FFF2EF 020FC3 bra dcx7dcx11:00FFF2F1 0C1099 cmpb #$99 ; delete ?00FFF2F3 026008 bne dcx1300FFF2F5 08DF82 bsr CalcScreenLoc00FFF2F7 01F001 tfr d,x00FFF2F9 096111 lda CursorCol ; acc = cursor column00FFF2FB 02000D bra dcx5dcx1300FFF2FD 0C1008 cmpb #CTRLH ; backspace ?00FFF2FF 02601A bne dcx300FFF301 096111 lda CursorCol00FFF303 02702A beq dcx400FFF305 04A deca00FFF306 097111 sta CursorCol00FFF308 08DF6F bsr CalcScreenLocdcx5:00FFF30A 0E6001 ldb 1,x00FFF30C 0E7801 stb ,x++00FFF30E 04C inca00FFF30F 081038 cmpa #5600FFF311 025FF7 blo dcx500FFF313 0C6020 ldb #' '00FFF315 0301FF leax -1,x00FFF317 0E7804 stb ,x00FFF319 03509E puls d,x,dp,pcdcx3:00FFF31B 0C100A cmpb #LF ; linefeed ?00FFF31D 02700E beq dclf00FFF31F 034004 pshs b00FFF321 08DF56 bsr CalcScreenLoc00FFF323 01F001 tfr d,x00FFF325 035004 puls b00FFF327 0E7804 stb ,x; ToDo character color; lda CharColor; sta $2000,x00FFF329 08D006 bsr IncCursorPos00FFF32B 035096 puls d,x,pcdclf:00FFF32D 08D011 bsr IncCursorRowdcx4:00FFF32F 035096 puls d,x,pc;------------------------------------------------------------------------------; Increment the cursor position, scroll the screen if needed.;; Modifies:; none;------------------------------------------------------------------------------IncCursorPos:00FFF331 034016 pshs d,x00FFF333 096111 lda CursorCol00FFF335 04C inca00FFF336 097111 sta CursorCol00FFF338 081038 cmpa #5600FFF33A 025014 blo icc100FFF33C 00F111 clr CursorCol ; column = 000FFF33E 020002 bra icr1IncCursorRow:00FFF340 034016 pshs d,xicr1:00FFF342 096110 lda CursorRow00FFF344 04C inca00FFF345 097110 sta CursorRow00FFF347 08101D cmpa #2900FFF349 025005 blo icc100FFF34B 04A deca ; backup the cursor row, we are scrolling up00FFF34C 097110 sta CursorRow00FFF34E 08DEAB bsr ScrollUpicc1:00FFF350 08DF06 bsr UpdateCursorPosicc2:00FFF352 035096 puls d,x,pc;------------------------------------------------------------------------------; Display a string on the screen.;; Modifies:; none; Parameters:; d = pointer to string;------------------------------------------------------------------------------;DisplayString:00FFF354 034016 pshs d,x00FFF356 01F001 tfr d,xdspj1B:00FFF358 0E6800 ldb ,x+ ; move string char into acc00FFF35A 027004 beq dsretB ; is it end of string ?00FFF35C 08D61E bsr OUTCH ; display character00FFF35E 020FF8 bra dspj1BdsretB:00FFF360 035096 puls d,x,pcDisplayStringCRLF:00FFF362 034006 pshs d00FFF364 08DFEE bsr DisplayString00FFF366 0C600D ldb #CR00FFF368 08D612 bsr OUTCH00FFF36A 0C600A ldb #LF00FFF36C 08D60E bsr OUTCH00FFF36E 035086 puls d,pc;; PRINT CR, LF, STRING;PSTRNG00FFF370 08D002 BSR PCRLF00FFF372 02000D BRA PDATAPCRLF00FFF374 034010 PSHS X00FFF376 08EFFF388 LDX #CRLFST00FFF379 08D006 BSR PDATA00FFF37B 035010 PULS X00FFF37D 039 RTS00FFF37E 0BDFFF97C JSR OUTCHPDATA00FFF381 0E6800 LDB ,X+00FFF383 0C1004 CMPB #$0400FFF385 026FF7 BNE PRINT00FFF387 039 RTSCRLFST00FFF388 00D00A004 fcb CR,LF,4DispDWordAsHex:00FFF38B 08D007 bsr DispWordAsHex00FFF38D 01E001 exg d,x00FFF38F 08D003 bsr DispWordAsHex00FFF391 01E001 exg d,x00FFF393 039 rtsDispWordAsHex:00FFF394 01E089 exg a,b00FFF396 08D005 bsr DispByteAsHex00FFF398 01E089 exg a,b00FFF39A 08D001 bsr DispByteAsHex00FFF39C 039 rtsDispByteAsHex:00FFF39D 034004 pshs b00FFF39F 054 lsrb00FFF3A0 054 lsrb00FFF3A1 054 lsrb00FFF3A2 054 lsrb00FFF3A3 054 lsrb00FFF3A4 054 lsrb00FFF3A5 054 lsrb00FFF3A6 054 lsrb00FFF3A7 08D00C bsr DispNyb00FFF3A9 035004 puls b00FFF3AB 034004 pshs b00FFF3AD 054 lsrb00FFF3AE 054 lsrb00FFF3AF 054 lsrb00FFF3B0 054 lsrb00FFF3B1 08D002 bsr DispNyb00FFF3B3 035004 puls bDispNyb00FFF3B5 034004 pshs b00FFF3B7 0C400F andb #$0F00FFF3B9 0C100A cmpb #1000FFF3BB 025006 blo DispNyb100FFF3BD 0CB037 addb #'A'-1000FFF3BF 08D5BB bsr OUTCH00FFF3C1 035084 puls b,pcDispNyb100FFF3C3 0CB030 addb #'0'00FFF3C5 08D5B5 bsr OUTCH00FFF3C7 035084 puls b,pc;==============================================================================; Keyboard I/O;==============================================================================;--------------------------------------------------------------------------; PS2 scan codes to ascii conversion tables.;--------------------------------------------------------------------------;org (* + 127) & $FFFFFF80unshiftedScanCodes:00FFF400 02E0A902E0A50A30A10A2 fcb $2e,$a9,$2e,$a5,$a3,$a1,$a2,$ac00FFF407 0AC00FFF408 02E0AA0A80A60A4009060 fcb $2e,$aa,$a8,$a6,$a4,$09,$60,$2e00FFF40F 02E00FFF410 02E02E02E02E02E071031 fcb $2e,$2e,$2e,$2e,$2e,$71,$31,$2e00FFF417 02E00FFF418 02E02E07A073061077032 fcb $2e,$2e,$7a,$73,$61,$77,$32,$2e00FFF41F 02E00FFF420 02E063078064065034033 fcb $2e,$63,$78,$64,$65,$34,$33,$2e00FFF427 02E00FFF428 02E020076066074072035 fcb $2e,$20,$76,$66,$74,$72,$35,$2e00FFF42F 02E00FFF430 02E06E062068067079036 fcb $2e,$6e,$62,$68,$67,$79,$36,$2e00FFF437 02E00FFF438 02E02E06D06A075037038 fcb $2e,$2e,$6d,$6a,$75,$37,$38,$2e00FFF43F 02E00FFF440 02E02C06B06906F030039 fcb $2e,$2c,$6b,$69,$6f,$30,$39,$2e00FFF447 02E00FFF448 02E02E02F06C03B07002D fcb $2e,$2e,$2f,$6c,$3b,$70,$2d,$2e00FFF44F 02E00FFF450 02E02E02702E05B03D02E fcb $2e,$2e,$27,$2e,$5b,$3d,$2e,$2e00FFF457 02E00FFF458 0AD02E00D05D02E05C02E fcb $ad,$2e,$0d,$5d,$2e,$5c,$2e,$2e00FFF45F 02E00FFF460 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e00FFF467 02E00FFF468 02E09502E09309402E02E fcb $2e,$95,$2e,$93,$94,$2e,$2e,$2e00FFF46F 02E00FFF470 09807F09202E09109001B fcb $98,$7f,$92,$2e,$91,$90,$1b,$af00FFF477 0AF00FFF478 0AB02E09702E02E0960AE fcb $ab,$2e,$97,$2e,$2e,$96,$ae,$2e00FFF47F 02E00FFF480 02E02E02E0A702E02E02E fcb $2e,$2e,$2e,$a7,$2e,$2e,$2e,$2e00FFF487 02E00FFF488 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF48F 02E00FFF490 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF497 02E00FFF498 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF49F 02E00FFF4A0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4A7 02E00FFF4A8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4AF 02E00FFF4B0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4B7 02E00FFF4B8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4BF 02E00FFF4C0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4C7 02E00FFF4C8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4CF 02E00FFF4D0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4D7 02E00FFF4D8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4DF 02E00FFF4E0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4E7 02E00FFF4E8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4EF 02E00FFF4F0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF4F7 02E00FFF4F8 02E02E0FA02E02E02E02E fcb $2e,$2e,$fa,$2e,$2e,$2e,$2e,$2e00FFF4FF 02EshiftedScanCodes:00FFF500 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF507 02E00FFF508 02E02E02E02E02E00907E fcb $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e00FFF50F 02E00FFF510 02E02E02E02E02E051021 fcb $2e,$2e,$2e,$2e,$2e,$51,$21,$2e00FFF517 02E00FFF518 02E02E05A053041057040 fcb $2e,$2e,$5a,$53,$41,$57,$40,$2e00FFF51F 02E00FFF520 02E043058044045024023 fcb $2e,$43,$58,$44,$45,$24,$23,$2e00FFF527 02E00FFF528 02E020056046054052025 fcb $2e,$20,$56,$46,$54,$52,$25,$2e00FFF52F 02E00FFF530 02E04E04204804705905E fcb $2e,$4e,$42,$48,$47,$59,$5e,$2e00FFF537 02E00FFF538 02E02E04D04A05502602A fcb $2e,$2e,$4d,$4a,$55,$26,$2a,$2e00FFF53F 02E00FFF540 02E03C04B04904F029028 fcb $2e,$3c,$4b,$49,$4f,$29,$28,$2e00FFF547 02E00FFF548 02E03E03F04C03A05005F fcb $2e,$3e,$3f,$4c,$3a,$50,$5f,$2e00FFF54F 02E00FFF550 02E02E02202E07B02B02E fcb $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e00FFF557 02E00FFF558 02E02E00D07D02E07C02E fcb $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e00FFF55F 02E00FFF560 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e00FFF567 02E00FFF568 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF56F 02E00FFF570 02E07F02E02E02E02E01B fcb $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e00FFF577 02E00FFF578 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF57F 02E00FFF580 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF587 02E00FFF588 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF58F 02E00FFF590 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF597 02E00FFF598 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF59F 02E00FFF5A0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5A7 02E00FFF5A8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5AF 02E00FFF5B0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5B7 02E00FFF5B8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5BF 02E00FFF5C0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5C7 02E00FFF5C8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5CF 02E00FFF5D0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5D7 02E00FFF5D8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5DF 02E00FFF5E0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5E7 02E00FFF5E8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5EF 02E00FFF5F0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5F7 02E00FFF5F8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF5FF 02E; controlkeybdControlCodes:00FFF600 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF607 02E00FFF608 02E02E02E02E02E00907E fcb $2e,$2e,$2e,$2e,$2e,$09,$7e,$2e00FFF60F 02E00FFF610 02E02E02E02E02E011021 fcb $2e,$2e,$2e,$2e,$2e,$11,$21,$2e00FFF617 02E00FFF618 02E02E01A013001017040 fcb $2e,$2e,$1a,$13,$01,$17,$40,$2e00FFF61F 02E00FFF620 02E003018004005024023 fcb $2e,$03,$18,$04,$05,$24,$23,$2e00FFF627 02E00FFF628 02E020016006014012025 fcb $2e,$20,$16,$06,$14,$12,$25,$2e00FFF62F 02E00FFF630 02E00E00200800701905E fcb $2e,$0e,$02,$08,$07,$19,$5e,$2e00FFF637 02E00FFF638 02E02E00D00A01502602A fcb $2e,$2e,$0d,$0a,$15,$26,$2a,$2e00FFF63F 02E00FFF640 02E03C00B00900F029028 fcb $2e,$3c,$0b,$09,$0f,$29,$28,$2e00FFF647 02E00FFF648 02E03E03F00C03A01005F fcb $2e,$3e,$3f,$0c,$3a,$10,$5f,$2e00FFF64F 02E00FFF650 02E02E02202E07B02B02E fcb $2e,$2e,$22,$2e,$7b,$2b,$2e,$2e00FFF657 02E00FFF658 02E02E00D07D02E07C02E fcb $2e,$2e,$0d,$7d,$2e,$7c,$2e,$2e00FFF65F 02E00FFF660 02E02E02E02E02E02E008 fcb $2e,$2e,$2e,$2e,$2e,$2e,$08,$2e00FFF667 02E00FFF668 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF66F 02E00FFF670 02E07F02E02E02E02E01B fcb $2e,$7f,$2e,$2e,$2e,$2e,$1b,$2e00FFF677 02E00FFF678 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF67F 02EkeybdExtendedCodes:00FFF680 02E02E02E02E0A30A10A2 fcb $2e,$2e,$2e,$2e,$a3,$a1,$a2,$2e00FFF687 02E00FFF688 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF68F 02E00FFF690 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF697 02E00FFF698 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF69F 02E00FFF6A0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6A7 02E00FFF6A8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6AF 02E00FFF6B0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6B7 02E00FFF6B8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6BF 02E00FFF6C0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6C7 02E00FFF6C8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6CF 02E00FFF6D0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6D7 02E00FFF6D8 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6DF 02E00FFF6E0 02E02E02E02E02E02E02E fcb $2e,$2e,$2e,$2e,$2e,$2e,$2e,$2e00FFF6E7 02E00FFF6E8 02E09502E09309402E02E fcb $2e,$95,$2e,$93,$94,$2e,$2e,$2e00FFF6EF 02E00FFF6F0 09809909202E09109002E fcb $98,$99,$92,$2e,$91,$90,$2e,$2e00FFF6F7 02E00FFF6F8 02E02E09702E02E09602E fcb $2e,$2e,$97,$2e,$2e,$96,$2e,$2e00FFF6FF 02E; ============================================================================; __; \\__/ o\ (C) 2013-2022 Robert Finch, Waterloo; \ __ / All rights reserved.; \/_// robfinch<remove>@opencores.org; ||;;; Keyboard driver routines to interface to a PS2 style keyboard; Converts the scancode to ascii;; 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; by the Free Software Foundation, either version 3 of the License, or; (at your option) any later version.;; This source file is distributed in the hope that it will be useful,; but WITHOUT ANY WARRANTY; without even the implied warranty of; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License; along with this program. If not, see <http://www.gnu.org/licenses/>.;; ============================================================================;SC_F12 EQU $07SC_C EQU $21SC_T EQU $2CSC_Z EQU $1ASC_DEL EQU $71 ; extendSC_KEYUP EQU $F0 ; should be $f0SC_EXTEND EQU $E0SC_CTRL EQU $14SC_RSHIFT EQU $59SC_NUMLOCK EQU $77SC_SCROLLLOCK EQU $7ESC_CAPSLOCK EQU $58SC_ALT EQU $11;#define SC_LSHIFT EQU $12;SC_DEL EQU $71 ; extend;SC_LCTRL EQU $58SC_TAB EQU $0D; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Recieve a byte from the keyboard, used after a command is sent to the; keyboard in order to wait for a response.;; Parameters: none; Returns: accd = recieved byte ($00 to $FF), -1 on timeout; Modifies: acc; Stack Space: 2 words; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -KeybdRecvByte:00FFF700 034010 pshs x00FFF702 08E000064 ldx #100 ; wait up to 1skrb3:00FFF705 08D05A bsr KeybdGetStatus ; wait for response from keyboard00FFF707 05D tstb00FFF708 02B00B bmi krb4 ; is input buffer full ? yes, branch00FFF70A 08D02D bsr Wait10ms ; wait a bit00FFF70C 0301FF leax -1,x00FFF70E 026FF5 bne krb3 ; go back and try again00FFF710 0CCFFFFFF ldd #-1 ; return -100FFF713 035090 puls x,pckrb4:00FFF715 08D066 bsr KeybdGetScancode00FFF717 035090 puls x,pc; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Send a byte to the keyboard.;; Parameters: accb byte to send; Returns: none; Modifies: none; Stack Space: 0 words; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -KeybdSendByte:00FFF719 0150F7FFFE30400 stb KEYBD00FFF71E 039 rts; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Wait until the keyboard transmit is complete;; Parameters: none; Returns: r1 = 0 if successful, r1 = -1 timeout; Modifies: r1; Stack Space: 3 words; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -KeybdWaitTx:00FFF71F 034010 pshs x00FFF721 08E000064 ldx #100 ; wait a max of 1skwt1:00FFF724 08D03B bsr KeybdGetStatus00FFF726 0C4040 andb #$40 ; check for transmit complete bit; branch if bit set00FFF728 02600B bne kwt200FFF72A 08D00D bsr Wait10ms ; delay a little bit00FFF72C 0301FF leax -1,x00FFF72E 026FF4 bne kwt1 ; go back and try again00FFF730 0CCFFFFFF ldd #-1 ; timed out, return -100FFF733 035090 puls x,pckwt2:00FFF735 04F clra ; wait complete, return 000FFF736 05F clrb00FFF737 035090 puls x,pc; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Wait for 10 ms;; Parameters: none; Returns: none; Modifies: none; Stack Space: 2 words; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Wait10ms:00FFF739 034006 pshs d00FFF73B 0150B6FFFFFFFE7 lda MSCOUNT+3W10_0001:00FFF740 01F089 tfr a,b00FFF742 0150F0FFFFFFFE7 subb MSCOUNT+300FFF747 0C1FFA cmpb #$FFA00FFF749 022FF5 bhi W10_000100FFF74B 035086 puls d,pc; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Wait for 300 ms (256 ms);; Parameters: none; Returns: none; Modifies: none; Stack Space: 2 words; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Wait300ms:00FFF74D 034006 pshs d00FFF74F 0150B6FFFFFFFE7 lda MSCOUNT+3W300_0001:00FFF754 01F089 tfr a,b00FFF756 0150F0FFFFFFFE7 subb MSCOUNT+300FFF75B 0C1F00 cmpb #$F0000FFF75D 022FF5 bhi W300_000100FFF75F 035086 puls d,pc; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Get the keyboard status;; Parameters: none; Returns: d = status; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -KeybdGetStatus:kbgs3:00FFF761 0150F6FFFE30401 ldb KEYBD+100FFF766 0C5080 bitb #$8000FFF768 02600E bne kbgs100FFF76A 0C5001 bitb #$01 ; check parity error flag00FFF76C 026002 bne kbgs200FFF76E 04F clra00FFF76F 039 rtskbgs2:00FFF770 0C60FE ldb #$FE ; request resend00FFF772 08DFA5 bsr KeybdSendByte00FFF774 08DFA9 bsr KeybdWaitTx00FFF776 020FE9 bra kbgs3kbgs1: ; return negative status00FFF778 0CAF00 orb #$F0000FFF77A 086FFF lda #-100FFF77C 039 rts; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Get the scancode from the keyboard port;; Parameters: none; Returns: acca = scancode; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -KeybdGetScancode:00FFF77D 04F clra00FFF77E 0150F6FFFE30400 ldb KEYBD ; get the scan code00FFF783 01507FFFFE30401 clr KEYBD+1 ; clear receive register (write $00 to status reg); The following useful during debug.; lbsr DispByteAsHex; pshs b; ldb #' '; lbsr OUTCH; puls b00FFF788 039 rts; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Set the LEDs on the keyboard.;; Parameters: d LED status to set; Returns: none; Modifies: none; Stack Space: 2 words; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -KeybdSetLED:00FFF789 034004 pshs b00FFF78B 0C60ED ldb #$ED ; set LEDs command00FFF78D 08DF8A bsr KeybdSendByte00FFF78F 08DF8E bsr KeybdWaitTx00FFF791 08DF6D bsr KeybdRecvByte ; should be an ack00FFF793 035004 puls b00FFF795 08DF82 bsr KeybdSendByte00FFF797 08DF86 bsr KeybdWaitTx00FFF799 08DF65 bsr KeybdRecvByte ; should be an ack00FFF79B 039 rts; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Get ID - get the keyboards identifier code.;; Parameters: none; Returns: d = $AB83, $00 on fail; Modifies: d, KeybdID updated; Stack Space: 2 words; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -KeybdGetID:00FFF79C 0C60F2 ldb #$F200FFF79E 08DF79 bsr KeybdSendByte00FFF7A0 08DF7D bsr KeybdWaitTx00FFF7A2 08DF5C bsr KeybdRecvByte00FFF7A4 0C5080 bitb #$8000FFF7A6 026014 bne kgnotKbd00FFF7A8 0C10AB cmpb #$AB00FFF7AA 026010 bne kgnotKbd00FFF7AC 08DF52 bsr KeybdRecvByte00FFF7AE 0C5080 bitb #$8000FFF7B0 02600A bne kgnotKbd00FFF7B2 0C1083 cmpb #$8300FFF7B4 026006 bne kgnotKbd00FFF7B6 0CC00AB83 ldd #$AB83kgid1:00FFF7B9 0DD124 std KeybdID00FFF7BB 039 rtskgnotKbd:00FFF7BC 04F clra00FFF7BD 05F clrb00FFF7BE 020FF9 bra kgid1; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Initialize the keyboard.;; Parameters:; none; Modifies:; none; Returns:; none; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -KeybdInit:00FFF7C0 034026 pshs d,y00FFF7C2 18E000005 ldy #5kbdi0002:00FFF7C5 08DF72 bsr Wait10ms00FFF7C7 01507FFFFE30401 clr KEYBD+1 ; clear receive register (write $00 to status reg)00FFF7CC 0C6FFF ldb #-1 ; send reset code to keyboard00FFF7CE 0150F7FFFE30401 stb KEYBD+1 ; write $FF to status reg to clear TX state00FFF7D3 08DF44 bsr KeybdSendByte ; now write to transmit register00FFF7D5 08DF48 bsr KeybdWaitTx ; wait until no longer busy00FFF7D7 08DF27 bsr KeybdRecvByte ; look for an ACK ($FA)00FFF7D9 0C10FA cmpb #$FA00FFF7DB 026021 bne kbdiTryAgain00FFF7DD 08DF21 bsr KeybdRecvByte ; look for BAT completion code ($AA)00FFF7DF 0C10FC cmpb #$FC ; reset error ?00FFF7E1 02701B beq kbdiTryAgain00FFF7E3 0C10AA cmpb #$AA ; reset complete okay ?00FFF7E5 026017 bne kbdiTryAgain; After a reset, scan code set #2 should be active.config:00FFF7E7 0C60F0 ldb #$F0 ; send scan code select00FFF7E9 0150F7FFFE60000 stb LEDS00FFF7EE 08DF29 bsr KeybdSendByte00FFF7F0 08DF2D bsr KeybdWaitTx00FFF7F2 05D tstb00FFF7F3 02B009 bmi kbdiTryAgain00FFF7F5 08DF09 bsr KeybdRecvByte ; wait for response from keyboard00FFF7F7 04D tsta00FFF7F8 02B004 bmi kbdiTryAgain00FFF7FA 0C10FA cmpb #$FA ; ACK00FFF7FC 02700C beq kbdi0004kbdiTryAgain:00FFF7FE 0313FF dey00FFF800 026FC3 bne kbdi0002.keybdErr:00FFF802 0CCFFF82A ldd #msgBadKeybd00FFF805 017FFFB5A lbsr DisplayStringCRLF*** warning 1: Long branch within short branch range could be optimized00FFF808 020014 bra ledxitkbdi0004:00FFF80A 0C6002 ldb #2 ; select scan code set #200FFF80C 08DF0B bsr KeybdSendByte00FFF80E 08DF0F bsr KeybdWaitTx00FFF810 05D tstb00FFF811 02BFEB bmi kbdiTryAgain00FFF813 08DEEB bsr KeybdRecvByte ; wait for response from keyboard00FFF815 04D tsta00FFF816 02BFE6 bmi kbdiTryAgain00FFF818 0C10FA cmpb #$FA00FFF81A 026FE2 bne kbdiTryAgain00FFF81C 08DF7E bsr KeybdGetIDledxit:00FFF81E 0C6007 ldb #$0700FFF820 08DF67 bsr KeybdSetLED00FFF822 08DF29 bsr Wait300ms00FFF824 0C6000 ldb #$0000FFF826 08DF61 bsr KeybdSetLED00FFF828 0350A6 puls d,y,pcmsgBadKeybd:00FFF82A 04B06507906206F061072 fcb "Keyboard error",000FFF831 06402006507207206F07200FFF838 000; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -DBGCheckForKey:00FFF839 020F26 bra KeybdGetStatus; KeyState2 variable bit meanings;1176543210; ||||||||+ = shift; |||||||+- = alt; ||||||+-- = control; |||||+--- = numlock; ||||+---- = capslock; |||+----- = scrolllock; ||+------ = <empty>; |+------- = "; | = "; | = "; | = "; +-------- = extended; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Debug versison of keyboard get routine.;; Parameters:; b: 0 = non blocking, otherwise blocking; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -DBGGetKey:00FFF83B 034010 pshs xdbgk2:00FFF83D 034004 pshs b00FFF83F 08DF20 bsr KeybdGetStatus00FFF841 0C4080 andb #$80 ; is key available?00FFF843 035004 puls b00FFF845 026008 bne dbgk1 ; branch if key00FFF847 05D tstb ; block?00FFF848 026FF3 bne dbgk2 ; If no key and blocking - loop00FFF84A 0CCFFFFFF ldd #-1 ; return -1 if no block and no key00FFF84D 035090 puls x,pcdbgk1:00FFF84F 08DF2C bsr KeybdGetScancode; lbsr DispByteAsHex; Make sure there is a small delay between scancode reads00FFF851 08E000014 ldx #20dbgk3:00FFF854 0301FF dex00FFF856 026FFC bne dbgk3; switch on scan code00FFF858 0C10F0 cmpb #SC_KEYUP00FFF85A 026006 bne dbgk400FFF85C 00F120 clr KeyState1 ; make KeyState1 = -100FFF85E 000120 neg KeyState100FFF860 020FDB bra dbgk2 ; loop backdbgk4:00FFF862 0C10E0 cmpb #SC_EXTEND00FFF864 026008 bne dbgk500FFF866 096121 lda KeyState200FFF868 08A800 ora #$80000FFF86A 097121 sta KeyState200FFF86C 020FCF bra dbgk2dbgk5:00FFF86E 0C1014 cmpb #SC_CTRL00FFF870 026016 bne dbgkNotCtrl00FFF872 00D120 tst KeyState100FFF874 02B008 bmi dbgk700FFF876 096121 lda KeyState200FFF878 08A004 ora #400FFF87A 097121 sta KeyState200FFF87C 020006 bra dbgk8dbgk7:00FFF87E 096121 lda KeyState200FFF880 084FFB anda #~400FFF882 097121 sta KeyState2dbgk8:00FFF884 00F120 clr KeyState100FFF886 020FB5 bra dbgk2dbgkNotCtrl:00FFF888 0C1059 cmpb #SC_RSHIFT00FFF88A 026016 bne dbgkNotRshift00FFF88C 00D120 tst KeyState100FFF88E 02B008 bmi dbgk900FFF890 096121 lda KeyState200FFF892 08A001 ora #100FFF894 097121 sta KeyState200FFF896 020006 bra dbgk10dbgk9:00FFF898 096121 lda KeyState200FFF89A 084FFE anda #~100FFF89C 097121 sta KeyState2dbgk10:00FFF89E 00F120 clr KeyState100FFF8A0 020F9B bra dbgk2dbgkNotRshift:00FFF8A2 0C1077 cmpb #SC_NUMLOCK00FFF8A4 026013 bne dbgkNotNumlock00FFF8A6 096121 lda KeyState200FFF8A8 088010 eora #1600FFF8AA 097121 sta KeyState200FFF8AC 096122 lda KeyLED00FFF8AE 088002 eora #200FFF8B0 097122 sta KeyLED00FFF8B2 01F089 tfr a,b00FFF8B4 04F clra00FFF8B5 08DED2 bsr KeybdSetLED00FFF8B7 020F84 bra dbgk2dbgkNotNumlock:00FFF8B9 0C1058 cmpb #SC_CAPSLOCK00FFF8BB 026013 bne dbgkNotCapslock00FFF8BD 096121 lda KeyState200FFF8BF 088020 eora #3200FFF8C1 097121 sta KeyState200FFF8C3 096122 lda KeyLED00FFF8C5 088004 eora #400FFF8C7 097122 sta KeyLED00FFF8C9 01F089 tfr a,b00FFF8CB 04F clra00FFF8CC 08DEBB bsr KeybdSetLED00FFF8CE 020F6D bra dbgk2dbgkNotCapslock:00FFF8D0 0C107E cmpb #SC_SCROLLLOCK00FFF8D2 026013 bne dbgkNotScrolllock00FFF8D4 096121 lda KeyState200FFF8D6 088040 eora #6400FFF8D8 097121 sta KeyState200FFF8DA 096122 lda KeyLED00FFF8DC 088001 eora #100FFF8DE 097122 sta KeyLED00FFF8E0 01F089 tfr a,b00FFF8E2 04F clra00FFF8E3 08DEA4 bsr KeybdSetLED00FFF8E5 020F56 bra dbgk2dbgkNotScrolllock:00FFF8E7 0C1011 cmpb #SC_ALT00FFF8E9 026016 bne dbgkNotAlt00FFF8EB 00D120 tst KeyState100FFF8ED 02B008 bmi dbgk1100FFF8EF 096121 lda KeyState200FFF8F1 08A002 ora #200FFF8F3 097121 sta KeyState200FFF8F5 020006 bra dbgk12dbgk11:00FFF8F7 096121 lda KeyState200FFF8F9 084FFD anda #~200FFF8FB 097121 sta KeyState2dbgk12:00FFF8FD 00F120 clr KeyState100FFF8FF 020F3C bra dbgk2dbgkNotAlt:00FFF901 00D120 tst KeyState100FFF903 027004 beq dbgk1300FFF905 00F120 clr KeyState100FFF907 020F34 bra dbgk2dbgk13:00FFF909 096121 lda KeyState2 ; Check for CTRL-ALT-DEL00FFF90B 084006 anda #600FFF90D 081006 cmpa #600FFF90F 026008 bne dbgk1400FFF911 0C1071 cmpb #SC_DEL00FFF913 026004 bne dbgk1400FFF915 06E90FFFFFFE jmp [$FFFFFE] ; jump to reset vectordbgk14:00FFF919 00D121 tst KeyState2 ; extended code?00FFF91B 02A00B bpl dbgk1500FFF91D 096121 lda KeyState200FFF91F 0847FF anda #$7FF00FFF921 097121 sta KeyState200FFF923 08EFFF680 ldx #keybdExtendedCodes00FFF926 020017 bra dbgk18dbgk15:00FFF928 096121 lda KeyState2 ; Is CTRL down?00FFF92A 085004 bita #400FFF92C 027005 beq dbgk1600FFF92E 08EFFF600 ldx #keybdControlCodes00FFF931 02000C bra dbgk18dbgk16:00FFF933 085001 bita #1 ; Is shift down?00FFF935 027005 beq dbgk1700FFF937 08EFFF500 ldx #shiftedScanCodes00FFF93A 020003 bra dbgk18dbgk17:00FFF93C 08EFFF400 ldx #unshiftedScanCodesdbgk18:00FFF93F 03A abx00FFF940 0E6804 ldb ,x00FFF942 04F clra00FFF943 035090 puls x,pc ; and return00FFF945 04B04505904204F041052 fcb "KEYBOARD"00FFF94C 04400FFF94D FFF957 fcw KeybdOpen00FFF94F FFF958 fcw KeybdClose00FFF951 FFF959 fcw KeybdRead00FFF953 FFF95A fcw KeybdWrite00FFF955 FFF95B fcw KeybdSeek; Keyboard Open:; Initialize the keyboard buffer head and tail indexes;KeybdOpen:00FFF957 039 rts; Keyboard Close:; Nothing to do except maybe clear the keyboard buffer;KeybdClose:00FFF958 039 rts;KeybdRead:00FFF959 039 rts;KeybdWrite:00FFF95A 039 rtsKeybdSeek:00FFF95B 039 rts;------------------------------------------------------------------------------; Check if there is a keyboard character available. If so return true (<0); otherwise return false (0) in accb.;------------------------------------------------------------------------------;KeybdCheckForKeyDirect:00FFF95C 020EDB bra DBGCheckForKey;------------------------------------------------------------------------------;------------------------------------------------------------------------------INCH:00FFF95E 0CCFFFFFF ldd #-1 ; block if no key available00FFF961 020ED8 bra DBGGetKeyINCHE:00FFF963 08DFF9 bsr INCH00FFF965 020009 bra INCHEK3INCHEK:00FFF967 08DFF5 bsr INCH00FFF969 01507DFFFFFCA00 tst KeybdEcho00FFF96E 02700B beq INCHEK1INCHEK3:00FFF970 08100D cmpa #CR00FFF972 026005 bne INCHEK200FFF974 017FFD75B lbsr CRLF*** warning 1: Long branch within short branch range could be optimized00FFF977 020002 bra INCHEK1INCHEK2:00FFF979 08D920 bsr DisplayCharINCHEK1:00FFF97B 039 rtsOUTCH:00FFF97C 06E90F000800 jmp [CharOutVec];------------------------------------------------------------------------------; r1 0=echo off, non-zero = echo on;------------------------------------------------------------------------------;SetKeyboardEcho:00FFF980 0150F7FFFFFCA00 stb KeybdEcho00FFF985 039 rts;------------------------------------------------------------------------------; Parameters:; x,d bitmap of sprites to enable;------------------------------------------------------------------------------ShowSprites:00FFF986 0150BFFFFE103C0 stx SPRITE_CTRL+SPRITE_EN00FFF98B 0150FDFFFE103C2 std SPRITE_CTRL+SPRITE_EN+200FFF990 039 rts;==============================================================================; System Monitor;==============================================================================;MonitorStart:00FFF991 0CCFFFAEF ldd #HelpMsg00FFF994 08D9BE bsr DisplayStringMonitor:00FFF996 03280F003FFF leas $3FFF ; reset stack pointer00FFF99A 05F clrb ; turn off keyboard echo00FFF99B 08DFE3 bsr SetKeyboardEcho; jsr RequestIOFocusPromptLn:00FFF99D 017FFD732 lbsr CRLF*** warning 1: Long branch within short branch range could be optimized00FFF9A0 0C6024 ldb #'$'00FFF9A2 08DFD8 bsr OUTCH; Get characters until a CR is keyedPrompt3:00FFF9A4 0CCFFFFFF ldd #-1 ; block until key present00FFF9A7 08DE92 bsr DBGGetKey00FFF9A9 0C100D cmpb #CR00FFF9AB 027004 beq Prompt100FFF9AD 08DFCD bsr OUTCH00FFF9AF 020FF3 bra Prompt3; Process the screen line that the CR was keyed on;Prompt1:00FFF9B1 0CC005050 ldd #$505000FFF9B4 0150FDFFFE60000 std LEDS00FFF9B9 0F6800000 ldb RunningID00FFF9BC 0C103D cmpb #6100FFF9BE 022FE4 bhi Prompt300FFF9C0 0CC005151 ldd #$515100FFF9C3 0150FDFFFE60000 std LEDS00FFF9C8 00F111 clr CursorCol ; go back to the start of the line00FFF9CA 08D8AD bsr CalcScreenLoc ; calc screen memory location00FFF9CC 01F002 tfr d,y00FFF9CE 0CC005252 ldd #$525200FFF9D1 0150FDFFFE60000 std LEDS00FFF9D6 08D055 bsr MonGetNonSpace00FFF9D8 0C1024 cmpb #'$'00FFF9DA 026009 bne Prompt2 ; skip over '$' prompt character00FFF9DC 086353 lda #$535300FFF9DE 0150FDFFFE60000 std LEDS00FFF9E3 08D048 bsr MonGetNonSpace; Dispatch based on command character;Prompt2:00FFF9E5 0C103F cmpb #'?' ; $? - display help00FFF9E7 026007 bne PromptC00FFF9E9 0CCFFFAEF ldd #HelpMsg00FFF9EC 08D966 bsr DisplayString00FFF9EE 020FA6 bra MonitorPromptC:00FFF9F0 0C1043 cmpb #'C'00FFF9F2 026007 bne PromptD00FFF9F4 017FFF7D9 lbsr ClearScreen*** warning 1: Long branch within short branch range could be optimized00FFF9F7 08D848 bsr HomeCursor00FFF9F9 020F9B bra MonitorPromptD:00FFF9FB 0C1044 cmpb #'D'00FFF9FD 026008 bne PromptF00FFF9FF 08D027 bsr MonGetch00FFFA01 0C1052 cmpb #'R'00FFFA03 026F9F bne Prompt300FFFA05 020193 bra DumpRegsPromptF:00FFFA07 0C1046 cmpb #'F'00FFFA09 02600F bne PromptJ00FFFA0B 08D01B bsr MonGetch00FFFA0D 0C1049 cmpb #'I'00FFFA0F 026F85 bne Monitor00FFFA11 08D015 bsr MonGetch00FFFA13 0C1047 cmpb #'G'00FFFA15 026F7F bne Monitor00FFFA17 07EFE0000 jmp $FE0000PromptJ:00FFFA1A 0C104A cmpb #'J'00FFFA1C 1270001BF lbeq jump_to_codePromptR:00FFFA1F 0C1052 cmpb #'R'00FFFA21 026F73 bne Monitor00FFFA23 017FFE5DA lbsr ramtest*** warning 1: Long branch within short branch range could be optimized00FFFA26 020F6E bra MonitorMonGetch:00FFFA28 0E6A04 ldb ,y00FFFA2A 031201 leay 1,y00FFFA2C 039 rtsMonGetNonSpace:00FFFA2D 08DFF9 bsr MonGetCh00FFFA2F 0C1020 cmpb #' '00FFFA31 027FFA beq MonGetNonSpace00FFFA33 0C1009 cmpb #9 ; tab00FFFA35 027FF6 beq MonGetNonSpace00FFFA37 039 rts;------------------------------------------------------------------------------; Ignore blanks in the input; Y = text pointer; D destroyed;------------------------------------------------------------------------------;ignBlanks:ignBlanks1:00FFFA38 08DFEE bsr MonGetch00FFFA3A 0C1020 cmpb #' '00FFFA3C 027FFA beq ignBlanks100FFFA3E 0313FF leay -1,y00FFFA40 039 rts;------------------------------------------------------------------------------;------------------------------------------------------------------------------GetTwoParams:00FFFA41 08DFF5 bsr ignBlanks00FFFA43 08D02E bsr GetHexNumber ; get start address of dump00FFFA45 0DC910 ldd mon_numwka00FFFA47 0DD920 std mon_r100FFFA49 0DC912 ldd mon_numwka+200FFFA4B 0DD922 std mon_r1+200FFFA4D 08DFE9 bsr ignBlanks00FFFA4F 08D022 bsr GetHexNumber ; get end address of dump00FFFA51 0DC910 ldd mon_numwka00FFFA53 0DD922 std mon_r200FFFA55 0DC912 ldd mon_numwka+200FFFA57 0DD924 std mon_r2+200FFFA59 039 rts;------------------------------------------------------------------------------; Get a range, the end must be greater or equal to the start.;------------------------------------------------------------------------------GetRange:00FFFA5A 08DFE5 bsr GetTwoParams00FFFA5C 0DC924 ldd mon_r2+200FFFA5E 093922 subd mon_r1+200FFFA60 0DC922 ldd mon_r200FFFA62 0D2921 sbcb mon_r1+100FFFA64 092920 sbca mon_r100FFFA66 12500006C lbcs DisplayErr00FFFA69 039 rtsshl_numwka:00FFFA6A 008913 asl mon_numwka+300FFFA6C 009912 rol mon_numwka+200FFFA6E 009911 rol mon_numwka+100FFFA70 009910 rol mon_numwka00FFFA72 039 rts;------------------------------------------------------------------------------; Get a hexidecimal number. Maximum of nine digits.; Y = text pointer (updated); D = number of digits; mon_numwka contains number;------------------------------------------------------------------------------;GetHexNumber:00FFFA73 04F05F clrd00FFFA75 0DD910 std mon_numwka00FFFA77 0DD912 std mon_numwka+200FFFA79 034010 pshs x00FFFA7B 08E000000 ldx #0 ; max 9 eight digitsgthxn2:00FFFA7E 08DFA8 bsr MonGetch00FFFA80 08D01D bsr AsciiToHexNybble00FFFA82 0C1FFF cmpb #-100FFFA84 027015 beq gthxn100FFFA86 08DFE2 bsr shl_numwka00FFFA88 08DFE0 bsr shl_numwka00FFFA8A 08DFDE bsr shl_numwka00FFFA8C 08DFDC bsr shl_numwka00FFFA8E 0C400F andb #$0f00FFFA90 0DA913 orb mon_numwka+300FFFA92 0D7913 stb mon_numwka+300FFFA94 030001 inx00FFFA96 08C000009 cmpx #900FFFA99 025FE3 blo gthxn2gthxn1:00FFFA9B 01F010 tfr x,d00FFFA9D 035090 puls x,pc;GetDecNumber:; phx; push r4; push r5; ldx #0; ld r4,#10; ld r5,#10;gtdcn2:; jsr MonGetch; jsr AsciiToDecNybble; cmp #-1; beq gtdcn1; mul r2,r2,r5; add r2,r1; dec r4; bne gtdcn2;gtdcn1:; txa; pop r5; pop r4; plx; rts;------------------------------------------------------------------------------; Convert ASCII character in the range '0' to '9', 'a' to 'f' or 'A' to 'F'; to a hex nybble.;------------------------------------------------------------------------------;AsciiToHexNybble:00FFFA9F 0C1030 cmpb #'0'00FFFAA1 024021 bcc gthx300FFFAA3 0C103A cmpb #'9'+100FFFAA5 025003 bcs gthx500FFFAA7 0C0030 subb #'0'00FFFAA9 039 rtsgthx5:00FFFAAA 0C1041 cmpb #'A'00FFFAAC 024016 bcc gthx300FFFAAE 0C1047 cmpb #'F'+100FFFAB0 025005 bcs gthx600FFFAB2 0C0041 subb #'A'00FFFAB4 0CB00A addb #1000FFFAB6 039 rtsgthx6:00FFFAB7 0C1061 cmpb #'a'00FFFAB9 024009 bcc gthx300FFFABB 0C107B cmpb #'z'+100FFFABD 025005 bcs gthx300FFFABF 0C0061 subb #'a'00FFFAC1 0CB00A addb #1000FFFAC3 039 rtsgthx3:00FFFAC4 0C6FFF ldb #-1 ; not a hex number00FFFAC6 039 rtsAsciiToDecNybble:00FFFAC7 0C1030 cmpb #'0'00FFFAC9 024007 bcc gtdc300FFFACB 0C103A cmpb #'9'+100FFFACD 025003 bcs gtdc300FFFACF 0C0030 subb #'0'00FFFAD1 039 rtsgtdc3:00FFFAD2 0C6FFF ldb #-100FFFAD4 039 rtsDisplayErr:00FFFAD5 08EFFFAE7 ldx #msgErr00FFFAD8 04F05F clrd00FFFADA 08D003 bsr DisplayStringDX00FFFADC 07EFFF996 jmp MonitorDisplayStringDX00FFFADF 0DD024 std Strptr00FFFAE1 09F026 stx Strptr+200FFFAE3 0BDFFF354 jsr DisplayString00FFFAE6 039 rtsmsgErr:00FFFAE7 02A02A04507207200D00A fcb "**Err",CR,LF,000FFFAEE 000HelpMsg:00FFFAEF 03F02003D020044069073 fcb "? = Display help",CR,LF00FFFAF6 07006C06107902006806500FFFAFD 06C07000D00A00FFFB01 04304C05302003D020063 fcb "CLS = clear screen",CR,LF00FFFB08 06C06506107202007306300FFFB0F 07206506506E00D00A; db "S = Boot from SD Card",CR,LF; db ": = Edit memory bytes",CR,LF; db "L = Load sector",CR,LF; db "W = Write sector",CR,LF00FFFB15 04405202003D020044075 fcb "DR = Dump registers",CR,LF00FFFB1C 06D07002007206506706900FFFB23 07307406507207300D00A; db "D = Dump memory",CR,LF; db "F = Fill memory",CR,LF; db "FL = Dump I/O Focus List",CR,LF00FFFB2A 04604904702003D020073 fcb "FIG = start FIG Forth",CR,LF00FFFB31 07406107207402004604900FFFB38 04702004606F07207406800FFFB3F 00D00A; db "KILL n = kill task #n",CR,LF; db "B = start tiny basic",CR,LF; db "b = start EhBasic 6502",CR,LF00FFFB41 04A02003D02004A07506D fcb "J = Jump to code",CR,LF00FFFB48 07002007406F02006306F00FFFB4F 06406500D00A00FFFB53 05204104D02003D020074 fcb "RAM = test RAM",CR,LF00FFFB5A 06507307402005204104D00FFFB61 00D00A; db "R[n] = Set register value",CR,LF; db "r = random lines - test bitmap",CR,LF; db "e = ethernet test",CR,LF; db "T = Dump task list",CR,LF; db "TO = Dump timeout list",CR,LF; db "TI = display date/time",CR,LF; db "TEMP = display temperature",CR,LF; db "P = Piano",CR,LF,000FFFB63 000 fcb 0msgRegHeadings00FFFB64 00D00A02004402F041042 fcb CR,LF," D/AB X Y U S PC DP CCR",CR,LF,000FFFB6B 02002002005802002002000FFFB72 02005902002002002005500FFFB79 02002002002005302002000FFFB80 02002002005004302002000FFFB87 02002004405002004304300FFFB8E 05200D00A000nHEX4:00FFFB92 0BDFFD2D2 jsr HEX400FFFB95 039 rtsnXBLANK:00FFFB96 0C6020 ldb #' '00FFFB98 020DE2 bra OUTCHDumpRegs00FFFB9A 08EFFFB64 ldx #msgRegHeadings00FFFB9D 0CC0000FF ldd #msgRegHeadings>>1600FFFBA0 0BDFFFADF jsr DisplayStringDX00FFFBA3 08DFF1 bsr nXBLANK00FFFBA5 0DC900 ldd mon_DSAVE00FFFBA7 08DFE9 bsr nHEX400FFFBA9 08DFEB bsr nXBLANK00FFFBAB 0DC902 ldd mon_XSAVE00FFFBAD 08DFE3 bsr nHEX400FFFBAF 08DFE5 bsr nXBLANK00FFFBB1 0DC904 ldd mon_YSAVE00FFFBB3 08DFDD bsr nHEX400FFFBB5 08DFDF bsr nXBLANK00FFFBB7 0DC906 ldd mon_USAVE00FFFBB9 08DFD7 bsr nHEX400FFFBBB 08DFD9 bsr nXBLANK00FFFBBD 0DC908 ldd mon_SSAVE00FFFBBF 08DFD1 bsr nHEX400FFFBC1 08DFD3 bsr nXBLANK00FFFBC3 0DC90A ldd mon_PCSAVE00FFFBC5 08DFCB bsr nHEX400FFFBC7 0DC90C ldd mon_PCSAVE+200FFFBC9 08DFC7 bsr nHEX400FFFBCB 08DFC9 bsr nXBLANK00FFFBCD 0DC90E ldd mon_DPRSAVE00FFFBCF 0BDFFD2CE jsr HEX200FFFBD2 08DFC2 bsr nXBLANK00FFFBD4 09690F lda mon_CCRSAVE00FFFBD6 0BDFFD2CE jsr HEX200FFFBD9 08DFBB bsr nXBLANK00FFFBDB 07EFFF996 jmp Monitor; Jump to codejump_to_code:00FFFBDE 08DE93 bsr GetHexNumber00FFFBE0 01A010 sei00FFFBE2 1DE908 lds mon_SSAVE00FFFBE4 0CCFFFC11 ldd #<jtc_exit00FFFBE7 034006 pshs d00FFFBE9 0CC000000 ldd #>jtc_exit00FFFBEC 034004 pshs b00FFFBEE 0DC912 ldd mon_numwka+200FFFBF0 034006 pshs d00FFFBF2 0DC910 ldd mon_numwka00FFFBF4 034006 pshs d00FFFBF6 0DC906 ldd mon_USAVE00FFFBF8 034006 pshs d00FFFBFA 0DC904 ldd mon_YSAVE00FFFBFC 034006 pshs d00FFFBFE 0DC902 ldd mon_XSAVE00FFFC00 034006 pshs d00FFFC02 09690E lda mon_DPRSave00FFFC04 034002 pshs a00FFFC06 0DC900 ldd mon_DSAVE00FFFC08 034006 pshs d00FFFC0A 09690F lda mon_CCRSAVE00FFFC0C 034002 pshs a00FFFC0E 0150350FF puls far ccr,d,dpr,x,y,u,pcjtc_exit:00FFFC11 034001 pshs ccr00FFFC13 0DD900 std mon_DSAVE00FFFC15 09F902 stx mon_XSAVE00FFFC17 19F904 sty mon_YSAVE00FFFC19 0DF906 stu mon_USAVE00FFFC1B 01F0B8 tfr dpr,a00FFFC1D 09790E sta mon_DPRSAVE00FFFC1F 035002 puls a00FFFC21 09790F sta mon_CCRSAVE00FFFC23 1DF908 sts mon_SSAVE00FFFC25 1CE003FFF lds #$3FFF; todo set according to coreid00FFFC28 07EFFFB9A jmp DumpRegs;------------------------------------------------------------------------------;------------------------------------------------------------------------------swi3_rout:00FFFC2B 01A010 sei00FFFC2D 035002 puls a00FFFC2F 09790F sta mon_CCRSAVE00FFFC31 03507E puls D,DPR,X,Y,U00FFFC33 0DD900 std mon_DSAVE00FFFC35 09F902 stx mon_XSAVE00FFFC37 19F904 sty mon_YSAVE00FFFC39 0DF906 stu mon_USAVE00FFFC3B 01F0B8 tfr dpr,a00FFFC3D 09790E sta mon_DPRSAVE00FFFC3F 035006 puls D00FFFC41 0DD90A std mon_PCSAVE00FFFC43 035006 puls D00FFFC45 0DD90C std mon_PCSAVE+200FFFC47 1DF908 sts mon_SSAVE00FFFC49 1CE003FFF lds #$3FFF00FFFC4C 01C0EF cli00FFFC4E 07EFFFB9A jmp DumpRegsswi3_exit:00FFFC51 01A010 sei00FFFC53 1DE908 lds mon_SSAVE00FFFC55 0DC90C ldd mon_PCSAVE+200FFFC57 034006 pshs d00FFFC59 0DC90A ldd mon_PCSAVE00FFFC5B 034006 pshs d00FFFC5D 0DE906 ldu mon_USAVE00FFFC5F 19E904 ldy mon_YSAVE00FFFC61 09E902 ldx mon_XSAVE00FFFC63 034070 pshs x,y,u00FFFC65 09690E lda mon_DPRSAVE00FFFC67 034002 pshs a00FFFC69 0DC900 ldd mon_DSAVE00FFFC6B 034006 pshs d00FFFC6D 09690F lda mon_CCRSAVE00FFFC6F 034002 pshs a00FFFC71 01F08A tfr a,ccr00FFFC73 01C0EF cli00FFFC75 03B rti;------------------------------------------------------------------------------;------------------------------------------------------------------------------irq_rout:; Reset the edge sense circuit in the PIC00FFFC76 086002 lda #2 ; Timer is IRQ #200FFFC78 0150B7FFFE3F006 sta PIC+6 ; register 6 is edge sense reset reg00FFFC7D 09779A sta IrqSource ; stuff a byte indicating the IRQ source for PEEK()00FFFC7F 0960DF lda IrqBase ; get the IRQ flag byte00FFFC81 044 lsra00FFFC82 09A0DF ora IrqBase00FFFC84 0840E0 anda #$E000FFFC86 0970DF sta IrqBase00FFFC88 01507CFFFE0006E inc TEXTSCR+110 ; update IRQ live indicator on screen; flash the cursor; only bother to flash the cursor for the task with the IO focus.00FFFC8D 0150B6FFFFFFFE0 lda COREID00FFFC92 091100 cmpa IOFocusID00FFFC94 026021 bne tr1a00FFFC96 096114 lda CursorFlash ; test if we want a flashing cursor00FFFC98 02701D beq tr1a00FFFC9A 017FFF5DC lbsr CalcScreenLoc ; compute cursor location in memory*** warning 1: Long branch within short branch range could be optimized00FFFC9D 01F002 tfr d,y00FFFC9F 0A6A09002000 lda $2000,y ; get color code $2000 higher in memory00FFFCA3 0D67C6 ldb IRQFlag ; get counter00FFFCA5 054 lsrb00FFFCA6 044 lsra00FFFCA7 044 lsra00FFFCA8 044 lsra00FFFCA9 044 lsra00FFFCAA 054 lsrb00FFFCAB 049 rola00FFFCAC 054 lsrb00FFFCAD 049 rola00FFFCAE 054 lsrb00FFFCAF 049 rola00FFFCB0 054 lsrb00FFFCB1 049 rola00FFFCB2 0A7A0A000E00000 sta $E00000,y ; store the color code back to memorytr1a00FFFCB7 03B rti;------------------------------------------------------------------------------;------------------------------------------------------------------------------nmi_rout:00FFFCB8 0150F6FFFFFFFE0 ldb COREID00FFFCBD 086049 lda #'I'00FFFCBF 08EE00028 ldx #TEXTSCR+4000FFFCC2 03A abx00FFFCC3 0A7804 sta ,x00FFFCC5 03B rtiorg $FFFFF000FFFFF0 012 nop00FFFFF1 012 nop00FFFFF2 FFFC2B fcw swi3_routorg $FFFFF800FFFFF8 FFFC76 fcw irq_rout00FFFFFA FFF023 fcw start ; SWI00FFFFFC FFFCB8 fcw nmi_rout ; NMI00FFFFFE FFF023 fcw start ; RST8 warning(s) in pass 2.SYMBOL TABLEASCIITODECNYBBLE 02 00FFFAC7 ASCIITOHEXNYBBLE 02 00FFFA9F BIOS_SCREENS 00 17000000 BLANKLINE 02 00FFF216BLKCPYDST 00 00000020 BLKCPYSRC 00 0000001C BLNKLN1 02 00FFF229 CALCSCREENLOC 02 00FFF279CHARCOLOR 00 00000112 CHARINVEC 00 00000804 CHAROUTVEC 00 00000800 CHECKPOINT 02 00FFF0E0CLEARSCREEN 02 00FFF1D0 CLEARSCREENJMP 02 00FFD300 COLORCODELOCATION 00 00000014 COPYSCREENTOVIRTUALSCREEN 02 00FFF1A0COPYVIRTUALSCREENTOSCREEN 02 00FFF178 COREID 00 FFFFFFE0 CR 00 0000000D CRLF 02 00FFD0D2CRLF1 02 00FFD0D2 CRLFST 02 00FFF388 CS1 02 00FFF1DD CS2 02 00FFF1F3CS2V1 02 00FFF1AC CS3 02 00FFF1F9 CSL1 02 00FFF293 CTRLC 00 00000003CTRLH 00 00000008 CTRLI 00 00000009 CTRLJ 00 0000000A CTRLK 00 0000000BCTRLM 00 0000000D CTRLS 00 00000013 CTRLX 00 00000018 CURSORCOL 00 00000111CURSORFLASH 00 00000114 CURSORROW 00 00000110 CV2S1 02 00FFF184 DBGCHECKFORKEY 02 00FFF839DBGGETKEY 02 00FFF83B DBGK1 02 00FFF84F DBGK10 02 00FFF89E DBGK11 02 00FFF8F7DBGK12 02 00FFF8FD DBGK13 02 00FFF909 DBGK14 02 00FFF919 DBGK15 02 00FFF928DBGK16 02 00FFF933 DBGK17 02 00FFF93C DBGK18 02 00FFF93F DBGK2 02 00FFF83DDBGK3 02 00FFF854 DBGK4 02 00FFF862 DBGK5 02 00FFF86E DBGK7 02 00FFF87EDBGK8 02 00FFF884 DBGK9 02 00FFF898 DBGKNOTALT 02 00FFF901 DBGKNOTCAPSLOCK 02 00FFF8D0DBGKNOTCTRL 02 00FFF888 DBGKNOTNUMLOCK 02 00FFF8B9 DBGKNOTRSHIFT 02 00FFF8A2 DBGKNOTSCROLLLOCK 02 00FFF8E7DCCR 02 00FFF2A7 DCLF 02 00FFF32D DCX10 02 00FFF2E1 DCX11 02 00FFF2F1DCX12 02 00FFF2ED DCX13 02 00FFF2FD DCX14 02 00FFF2A5 DCX3 02 00FFF31BDCX4 02 00FFF32F DCX5 02 00FFF30A DCX6 02 00FFF2B8 DCX7 02 00FFF2B4DCX8 02 00FFF2C5 DCX9 02 00FFF2D2 DELAY3S 02 00FFF15B DISPBYTEASHEX 02 00FFF39DDISPDWORDASHEX 02 00FFF38B DISPLAYCHAR 02 00FFF29B DISPLAYERR 02 00FFFAD5 DISPLAYSTRING 02 00FFF354DISPLAYSTRINGCRLF 02 00FFF362 DISPLAYSTRINGDX 02 00FFFADF DISPNYB 02 00FFF3B5 DISPNYB1 02 00FFF3C3DISPWORDASHEX 02 00FFF394 DLY3S1 02 00FFF15E DLY3S2 02 00FFF162 DRAM_BASE 00 10000000DSPJ1B 02 00FFF358 DSRETB 02 00FFF360 DUMPREGS 02 00FFFB9A DUMRTS 02 00FFF022FIRST_CORE 00 00000001 FREEMBX 02 00000002 FREEMSG 02 00000006 FREETCB 00 0000078AGETHEXNUMBER 02 00FFFA73 GETRANGE 02 00FFFA5A GETSCREENLOCATION 02 00FFF230 GETTWOPARAMS 02 00FFFA41GSL1 02 00FFF23D GTDC3 02 00FFFAD2 GTHX3 02 00FFFAC4 GTHX5 02 00FFFAAAGTHX6 02 00FFFAB7 GTHXN1 02 00FFFA9B GTHXN2 02 00FFFA7E HC1 02 00FFF256HELPMSG 02 00FFFAEF HEX2 02 00FFD2CE HEX4 02 00FFD2D2 HOMECURSOR 02 00FFF241HOMECURSORJMP 02 00FFD308 ICC1 02 00FFF350 ICC2 02 00FFF352 ICR1 02 00FFF342IGNBLANKS 02 00FFFA38 IGNBLANKS1 02 00FFFA38 INCCURSORPOS 02 00FFF331 INCCURSORROW 02 00FFF340INCH 02 00FFF95E INCHE 02 00FFF963 INCHEK 02 00FFF967 INCHEK1 02 00FFF97BINCHEK2 02 00FFF979 INCHEK3 02 00FFF970 INIT 02 00FFF072 IOFOCUSID 00 00000100IOFOCUSNDX 00 00000100 IRQBASE 00 000000DF IRQFLAG 00 000007C6 IRQSOURCE 00 0000079AIRQ_ROUT 02 00FFFC76 JTC_EXIT 02 00FFFC11 JUMP_TO_CODE 02 00FFFBDE KBDI0002 02 00FFF7C5KBDI0004 02 00FFF80A KBDITRYAGAIN 02 00FFF7FE KBGS1 02 00FFF778 KBGS2 02 00FFF770KBGS3 02 00FFF761 KEYBD 00 FFE30400 KEYBDACK 00 FFFFCC00 KEYBDBAD 00 FFFFCB00KEYBDBUFFER 00 FFFFC000 KEYBDCHECKFORKEYDIRECT 02 00FFF95C KEYBDCLOSE 02 00FFF958 KEYBDCLR 00 FFE30402KEYBDCONTROLCODES 02 00FFF600 KEYBDECHO 00 FFFFCA00 KEYBDEXTENDEDCODES 02 00FFF680 KEYBDGETID 02 00FFF79CKEYBDGETSCANCODE 02 00FFF77D KEYBDGETSTATUS 02 00FFF761 KEYBDHEAD 00 FFFFC800 KEYBDID 00 00000124KEYBDINIT 02 00FFF7C0 KEYBDLOCKS 00 FFFFCD00 KEYBDOPEN 02 00FFF957 KEYBDREAD 02 00FFF959KEYBDRECVBYTE 02 00FFF700 KEYBDSEEK 02 00FFF95B KEYBDSENDBYTE 02 00FFF719 KEYBDSETLED 02 00FFF789KEYBDTAIL 00 FFFFC900 KEYBDWAITTX 02 00FFF71F KEYBDWRITE 02 00FFF95A KEYLED 00 00000122KEYSTATE1 00 00000120 KEYSTATE2 00 00000121 KGID1 02 00FFF7B9 KGNOTKBD 02 00FFF7BCKRB3 02 00FFF705 KRB4 02 00FFF715 KWT1 02 00FFF724 KWT2 02 00FFF735LEDS 00 FFE60000 LEDXIT 02 00FFF81E LETTER 02 00FFD2C1 LF 00 0000000AMAX_TASKNO 00 0000003F MONGETCH 02 00FFFA28 MONGETNONSPACE 02 00FFFA2D MONITOR 02 00FFF996MONITORSTART 02 00FFF991 MON_CCRSAVE 00 0000090F MON_DPRSAVE 00 0000090E MON_DSAVE 00 00000900MON_NUMWKA 00 00000910 MON_PCSAVE 00 0000090A MON_R1 00 00000920 MON_R2 00 00000922MON_SSAVE 00 00000908 MON_USAVE 00 00000906 MON_XSAVE 00 00000902 MON_YSAVE 00 00000904MSCOUNT 00 FFFFFFE4 MSGBADKEYBD 02 00FFF82A MSGERR 02 00FFFAE7 MSGREGHEADINGS 02 00FFFB64MSGSTARTUP 02 00FFF0BF MULTI_SIEVE 02 00FFF0F6 MULTI_SIEVE1 02 00FFF119 MULTI_SIEVE2 02 00FFF115MULTI_SIEVE3 02 00FFF103 MULTI_SIEVE4 02 00FFF12C NHEX4 02 00FFFB92 NMAILBOX 02 00000004NMIBASE 00 000000DC NMI_ROUT 02 00FFFCB8 NMSGBLK 02 00000008 NXBLANK 02 00FFFB96ONEKEY 02 00FFD1DC OUTCH 02 00FFF97C PCRLF 02 00FFF374 PDATA 02 00FFF381PIC 00 FFE3F000 PICPTR 00 00000028 PRINT 02 00FFF37E PROMPT1 02 00FFF9B1PROMPT2 02 00FFF9E5 PROMPT3 02 00FFF9A4 PROMPTC 02 00FFF9F0 PROMPTD 02 00FFF9FBPROMPTF 02 00FFFA07 PROMPTJ 02 00FFFA1A PROMPTLN 02 00FFF99D PROMPTR 02 00FFFA1FPSTRNG 02 00FFF370 QNDX0 00 00000780 QNDX1 00 00000782 QNDX2 00 00000784QNDX3 00 00000786 QNDX4 00 00000788 RAMERR 02 00FFE02C RAMTEST 02 00FFE000RAMTEST1 02 00FFE00D RAMTEST3 02 00FFE017 ROMTORAM 02 00FFF0E6 ROMTORAM1 02 00FFF0ECRUNNINGID 00 00800000 RUNNINGTCB 06 00000000 SCREENCOLOR 00 00000113 SCREENLOCATION 00 00000010SCREENLOCATION2 00 00000018 SCROLLUP 02 00FFF1FB SCRUP1 02 00FFF208 SC_ALT 00 00000011SC_C 00 00000021 SC_CAPSLOCK 00 00000058 SC_CTRL 00 00000014 SC_DEL 00 00000071SC_EXTEND 00 000000E0 SC_F12 00 00000007 SC_KEYUP 00 000000F0 SC_NUMLOCK 00 00000077SC_RSHIFT 00 00000059 SC_SCROLLLOCK 00 0000007E SC_T 00 0000002C SC_TAB 00 0000000DSC_Z 00 0000001A SETKEYBOARDECHO 02 00FFF980 SHIFTEDSCANCODES 02 00FFF500 SHIFTLEFT5 02 00FFF16DSHL_NUMWKA 02 00FFFA6A SHOWSPRITES 02 00FFF986 SIEVE 02 00FFF130 SIEVE1 02 00FFF148SIEVE2 02 00FFF144 SIEVE3 02 00FFF135 SIEVE4 02 00FFF157 SKIP_INIT 02 00FFF08CSPRITE_CTRL 00 FFE10000 SPRITE_EN 00 000003C0 ST1 02 00FFF079 ST3 02 00FFF069ST6 02 00FFF030 ST7 02 00FFF03A ST8 02 00FFF03A START 02 00FFF023STRPTR 00 00000024 SWI3_EXIT 02 00FFFC51 SWI3_ROUT 02 00FFFC2B TAB 00 00000009TCB_CURSORCOL 00 00000021 TCB_CURSORROW 00 00000020 TCB_HJCB 00 0000001C TCB_HWAITMBX 00 00000022TCB_IOF_NEXT 00 0000002C TCB_IOF_PREV 00 00000030 TCB_MBQ_NEXT 00 00000024 TCB_MBQ_PREV 00 00000028TCB_MMU_MAP 00 00000038 TCB_MSGPTR_D1 00 00000014 TCB_MSGPTR_D2 00 00000018 TCB_NXTRDY 00 00000000TCB_NXTTCB 00 00000008 TCB_PRIORITY 00 00000010 TCB_PRVRDY 00 00000004 TCB_SPSAVE 00 00000034TCB_STATUS 00 0000001E TCB_TIMEOUT 00 0000000C TEXTCLOSE 02 00FFF1CC TEXTOPEN 02 00FFF1CBTEXTREAD 02 00FFF1CD TEXTREG 00 FFE0DF00 TEXTSCR 00 FFE00000 TEXTSEEK 02 00FFF1CFTEXTWRITE 02 00FFF1CE TEXT_COLS 00 00000000 TEXT_CURPOS 00 00000022 TEXT_ROWS 00 00000001TIMEOUTLIST 00 0000078C TR1A 02 00FFFCB7 UCP1 02 00FFF277 UNSHIFTEDSCANCODES 02 00FFF400UPDATECURSORPOS 02 00FFF258 W10_0001 02 00FFF740 W300_0001 02 00FFF754 WAIT10MS 02 00FFF739WAIT300MS 02 00FFF74D XBLANK 02 00FFD0AF XOFF 00 00000013 XON 00 00000011328 SYMBOLS0 error(s), 70 warning(s)
Go to most recent revision | Compare with Previous | Blame | View Log
