0000 ; 0000 ; This code allows a 6502 BBC BASIC to run 0000 ; as if it were in a second processor box 0000 ; i.e. no BBC micro hardware present. 0000 ; 0000 ; It is a second-processor MOS with 0000 ; only the console I/O calls implemented. 0000 ; So it doesn't need a BBC Micro 0000 ; servicing anything like graphics, 0000 ; files, sound, and so on. 0000 ; 0000 ; You can expand this code to include such things, 0000 ; if your target board has suitable hardware. 0000 ; 0000 ; This code will fit inside 512 bytes, 0000 ; and some of that is padding. 0000 ; Enable one of the following lines 0000 ; to get the ROM size you want. 0000 ; 512 bytes to create code exactly matching know-good binary. 0000 ; 2K bytes maximum if using a common Hi-BASIC (at $B800), or 0000 ; 16K bytes maximum if using a standard BASIC (at $C000). 0000 ; 0000 ; 0000 ROM_START: EQU $FE00 ; for last 512 bytes 0000 ; ROM_START equ $F800 ; for last 2K 0000 ; ROM_START equ $C000 ; for last 16K 0000 ; 0000 ; Conditional assembly to wrap hardware-specific code: 0000 ; 0000 TARGET_6850: EQU 1 0000 TARGET_6850_ADDRESS: EQU $FEF0 0000 ; 0000 ; NB: 0000 ; 0000 ; The 6850 has no reception FIFO, 0000 ; the FTDI serial-to-USB modules send up to three bytes after RTS asserted. 0000 ; This causes problems talking to a PC over USB. 0000 ; 0000 ; The NMOS 6551 needs baud rate generation 0000 ; in the initialisation routine. 0000 ; 0000 ; The CMOS W65C51 handshaking does not work properly, 0000 ; and never will because they are not going to fix it. 0000 ; 0000 ; 0000 ; 0000 .BINFROM ROM_START ; ASM80 command for size of binary file output 0000 ; 0000 ; 0000 ; 2016-11-11 Created by J.G. Harston 0000 ; All the heavy thinking done by him. 0000 ; 2021-11-17 Converted to a more conventional assembler syntax by Keith. 0000 ; Assembles online at asm80.com 0000 ; 0000 ; 2021-11-22 Verified against a known-good version 0000 ; 0000 ; 0000 ; A few changes: 0000 ; 0000 ; Names that were the same but differed in letter case have been renamed. 0000 ; To make them different, the mixed-case names had an underscore appended. 0000 ; 0000 ; A few ASCII code names: 0000 ; 0000 ASCII_CR: EQU $0D 0000 ASCII_LF: EQU $0A 0000 ASCII_ESC: EQU $1B 0000 ASCII_SP: EQU $20 0000 VECTOR_TABLE: EQU $200 0000 VECTOR_TABLE_SIZE: EQU $35 0000 TUBE_ENTRY_TABLE: EQU $FF95 0000 ; 0000 ; Serial Tube system values ; ========================= 0000 TUBE_ESC: EQU $9B ; explicitly different from the ASCII escape code 0000 ; Mini65.bas by J.G. Harston 0000 ; > Mini65/src 0000 ; Source for Tiny 6502 Single-port Tube Client 0000 ; ============================================ 0000 ; This code may be freely reused, with acknowledgements 0000 ; 0000 ; Tiny 6502 Tube Client in 512 bytes 0000 ; Implements OSWRCH and OSRDCH via a single I/O port. 0000 ; 0000 ; Code to enter after RESET 0000 ; ========================= 0000 MAIN: EQU OSQUIT ; Replace with address to jump to 0000 ; 0000 ; The line above creates an endless loop. 0000 ; 0000 ; 0000 ; Name and version 0000 ; ================ 0000 ; ver$="0.10" 0000 ; date$=" (11 Nov 2016)" 0000 ; load%=$FE00 0000 ; name$="Mini65" 0000 ; 0000 ; 0000 ; System vectors 0000 ; ============== 0000 USERV: EQU $200 0000 BRKV: EQU $202 0000 IRQ1V: EQU $204 0000 IRQ2V: EQU $206 0000 CLIV: EQU $208 0000 BYTEV: EQU $20A 0000 WORDV: EQU $20C 0000 WRCHV: EQU $20E 0000 RDCHV: EQU $210 0000 FILEV: EQU $212 0000 ARGSV: EQU $214 0000 BGETV: EQU $216 0000 BPUTV: EQU $218 0000 GBPBV: EQU $21A 0000 FINDV: EQU $21C 0000 FSCV: EQU $21E 0000 EVNTV: EQU $220 0000 TEXT: EQU $FA 0000 IRQA: EQU $FC 0000 FAULT: EQU $FD 0000 ESCFLG: EQU $FF 0000 ; 0000 ; I/O values, these are suitable for a 6850 0000 ; ========================================= 0000 IF target_6850 0000 TXRXCONTROL: EQU target_6850_address ; write-only 0000 TXSTATUS: EQU target_6850_address ; read-only 0000 TXDATA: EQU target_6850_address+1 0000 TXRDY: EQU 2 0000 TXINIT: EQU $13 0000 RXSTOP: EQU $55 0000 ; 0000 ; $13=Reset ACIA, $55=8N1, clock/16, RTS high 0000 ; 0000 RXSTATUS: EQU target_6850_address 0000 RXDATA: EQU target_6850_address+1 0000 RXRDY: EQU 1 0000 RXINIT: EQU $55 0000 RXCONT: EQU $15 0000 ; 0000 ; $55=RTS high, $15=RTS low 0000 ; 0000 ENDIF FE00 .ORG ROM_START FE00 CODE_STARTS_HERE: FE00 4C 20 FE JMP RESET FE03 ; FE03 PRBANNER: FE03 20 51 FF JSR PrText_ FE06 BANNER: FE06 0D DB ASCII_CR FE07 54 69 6E 79 20 36 35 30 32 20 4B 65 72 6E 65 6C 20 DB "Tiny 6502 Kernel " FE18 30 2E 31 30 DB "0.10" ; ver$ FE1C 20 DB ASCII_SP FE1D 0D DB ASCII_CR FE1E 00 DB 0 FE1F 60 RTS FE20 ; FE20 ; Tube Client Startup Code FE20 ; ======================== FE20 RESET: FE20 78 SEI ; Disable interrupts FE21 A2 35 LDX #default_vector_table_end-default_vector_table-1 ; 0x35 is last-byte offset FE23 RESETLP: FE23 BD 00 FF LDA default_vector_table,X FE26 9D 00 02 STA vector_table,X ; Copy default vectors FE29 CA DEX FE2A 10 F7 BPL RESETlp FE2C 9A TXS ; Clear stack FE2D IF target_6850 FE2D A9 13 LDA #TxInit FE2F 8D F0 FE STA TxRxControl ; Initialise I/O port FE32 A9 55 LDA #RxInit FE34 8D F0 FE STA RxStatus FE37 A9 00 LDA #0 FE39 85 FF STA ESCFLG FE3B ELSE ; alternative code here FE3B ENDIF FE3B 58 CLI FE3C 20 03 FE JSR PrBanner FE3F 20 E7 FF JSR OSNEWL FE42 A9 01 LDA #1 FE44 4C 98 FF JMP OSCOLD ; Enter main program FE47 ; FE47 ; FE47 ; Default error handler FE47 ; ===================== FE47 ERRORHANDLER: FE47 20 E7 FF JSR OSNEWL FE4A A6 FD LDX FAULT+0 FE4C A4 FE LDY FAULT+1 FE4E ; FE4E E8 INX FE4F D0 01 BNE skip_inc_y FE51 C8 INY ; XY=>error string FE52 SKIP_INC_Y: FE52 ; FE52 20 9B FF JSR PRSTRNG ; Print error string FE55 HALT: FE55 4C 55 FE JMP HALT ; And stop FE58 ; FE58 ; Interrupt handlers FE58 ; ================== FE58 IRQHANDLER: FE58 85 FC STA IRQA FE5A 68 PLA FE5B 48 PHA ; Save A, get flags from stack FE5C 29 10 AND #$10 FE5E D0 06 BNE BRKHandler ; If BRK, jump to BRK handler FE60 6C 04 02 JMP (IRQ1V) ; Continue via IRQ1V handler FE63 IRQ1HANDLER: FE63 6C 06 02 JMP (IRQ2V) ; Pass on to IRQ2V FE66 BRKHANDLER: FE66 8A TXA FE67 48 PHA ; Save X FE68 BA TSX FE69 BD 03 01 LDA $0103,X FE6C D8 CLD ; Get address from stack FE6D 38 SEC FE6E E9 01 SBC #1 FE70 85 FD STA FAULT+0 FE72 BD 04 01 LDA $0104,X FE75 E9 00 SBC #0 FE77 85 FE STA FAULT+1 ; 0xFD/E=>after BRK opcode FE79 68 PLA FE7A AA TAX FE7B A5 FC LDA IRQA ; Restore X, get saved A FE7D 58 CLI FE7E 6C 02 02 JMP (BRKV) ; Restore IRQs, jump to Error Handler FE81 IRQ2HANDLER: FE81 A5 FC LDA IRQA ; Restore A FE83 NMIHANDLER: FE83 40 RTI ; Return from interupt FE84 ; FE84 ; OSRDCH - Wait for character from input stream FE84 ; ============================================= FE84 ; On exit, A =char, Cy=Escape flag FE84 ; osRDCH_: FE84 OSRDCH_: FE84 20 AA FE JSR ReadData FE87 90 FB BCC osRDCH_ ; Wait for character FE89 D0 05 BNE osRDCH_2 FE8B OSRDCH_1: FE8B 20 AA FE JSR ReadData FE8E 90 FB BCC osRDCH_1 ; Wait for character FE90 OSRDCH_2: FE90 C9 1B CMP #ASCII_ESC FE92 F0 01 BEQ osRDCH_3 ; Exit with CS if Escape FE94 READDATANONE: FE94 18 CLC ; CC if not Escape FE95 OSRDCH_3: FE95 60 RTS FE96 ; FE96 ; OSWRCH - Send character to output stream FE96 ; ======================================== FE96 ; On entry, A =character FE96 OSWRCH_: ; WRCH is simply SendByte FE96 SENDBYTE: FE96 20 9D FE JSR SendData ; Send byte FE99 C9 9B CMP #TUBE_ESC FE9B D0 0C BNE SendByteDone ; If not TUBE_ESC, done FE9D ; Fall through to send again FE9D ; FE9D ; FE9D ; *** LOW-LEVEL I/O CODE *** FE9D ; ========================== FE9D ; FE9D ; Send a raw byte of data FE9D ; ----------------------- FE9D SENDDATA: FE9D IF target_6850 FE9D 48 PHA FE9E SENDWAIT: FE9E AD F0 FE LDA TxStatus ; Get Status FEA1 29 02 AND #TxRDY FEA3 F0 F9 BEQ SendWait ; Wait until data can be sent FEA5 68 PLA FEA6 8D F1 FE STA TxData ; Send data FEA9 ELSE ; alternative code here FEA9 ENDIF FEA9 SENDBYTEDONE: FEA9 60 RTS FEAA ; FEAA ; Read raw data FEAA ; ------------- FEAA ; On exit, P =CC, no data FEAA READDATA: FEAA IF target_6850 FEAA AD F0 FE LDA RxStatus FEAD 29 01 AND #RxRDY ; Get RxStatus FEAF D0 E3 BNE ReadDataNone ; Exit if no data present FEB1 AD F1 FE LDA RxData FEB4 C9 9B CMP #TUBE_ESC FEB6 38 SEC FEB7 ELSE FEB7 ENDIF FEB7 60 RTS ; CS=Data present, EQ/NE=TUBE_ESC FEB8 ; FEB8 ; db STRING$((default_vector_table-$)AND255,CHR$255) FEB8 ; FEB8 ; Fill unused space with FF FEB8 ; FEB8 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FILL $FF,($FF00-$) FF00 ; FF00 ; DEFAULT VECTOR TABLE FF00 ; ==================== FF00 .ORG $FF00 FF00 ; FF00 DEFAULT_VECTOR_TABLE: FF00 73 FF DW NullReturn ; 0x200 - USERV FF02 47 FE DW ErrorHandler ; 0x202 - BRKV FF04 63 FE DW IRQ1Handler ; 0x204 - IRQ1V FF06 81 FE DW IRQ2Handler ; 0x206 - IRQ2V FF08 73 FF DW NullReturn ; 0x208 - CLIV FF0A 73 FF DW NullReturn ; 0x20A - BYTEV FF0C 73 FF DW NullReturn ; 0x20C - WORDV FF0E 96 FE DW osWRCH_ ; 0x20E - WRCHV FF10 84 FE DW osRDCH_ ; 0x210 - RDCHV FF12 73 FF DW NullReturn ; 0x212 - FILEV FF14 73 FF DW NullReturn ; 0x214 - ARGSV FF16 73 FF DW NullReturn ; 0x216 - BGetV FF18 73 FF DW NullReturn ; 0x218 - BPutV FF1A 73 FF DW NullReturn ; 0x21A - GBPBV FF1C 73 FF DW NullReturn ; 0x21C - FINDV FF1E 73 FF DW Unsupported ; 0x21E - FSCV FF20 73 FF DW NullReturn ; 0x220 - EVNTV FF22 73 FF DW Unsupported ; 0x222 - UPTV FF24 73 FF DW Unsupported ; 0x224 - NETV FF26 73 FF DW Unsupported ; 0x226 - VduV FF28 73 FF DW Unsupported ; 0x228 - KEYV FF2A 73 FF DW Unsupported ; 0x22A - INSV FF2C 73 FF DW Unsupported ; 0x22C - ;V FF2E 73 FF DW Unsupported ; 0x22E - CNPV FF30 73 FF DW NullReturn ; 0x230 - IND1V FF32 73 FF DW NullReturn ; 0x232 - IND2V FF34 73 FF DW NullReturn ; 0x234 - IND3V FF36 DEFAULT_VECTOR_TABLE_END: FF36 ; FF36 PRHEX_XY: FF36 98 TYA FF37 20 3B FF JSR PrHex_A FF3A 8A TXA FF3B PRHEX_A: FF3B 48 PHA FF3C 4A LSR A FF3D 4A LSR A FF3E 4A LSR A FF3F 4A LSR A FF40 20 44 FF JSR PrNybble FF43 68 PLA FF44 PRNYBBLE: FF44 29 0F AND #15 FF46 C9 0A CMP #10 FF48 90 02 BCC PrDigit FF4A 69 06 ADC #6 FF4C PRDIGIT: FF4C 69 30 ADC #"0" FF4E 4C EE FF JMP OSWRCH FF51 ; FF51 PRTEXT_: FF51 68 PLA FF52 85 FA STA TEXT+0 FF54 68 PLA FF55 85 FB STA TEXT+1 ; TEXT=>embedded string FF57 20 6A FF JSR PrString_2 FF5A 6C FA 00 JMP (TEXT) ; Print string and jump back to code FF5D ; FF5D PRSTRING_: FF5D 86 FA STX TEXT+0 FF5F 84 FB STY TEXT+1 ; TEXT=>string at YX FF61 PRSTRING_LP: FF61 A0 00 LDY #$00 FF63 B1 FA LDA (TEXT),Y ; Get character FF65 F0 03 BEQ PrString_2 FF67 20 E3 FF JSR OSASCI ; Print character if not $00 FF6A PRSTRING_2: FF6A E6 FA INC TEXT+0 FF6C D0 02 BNE LFEA6 FF6E E6 FB INC TEXT+1 ; Increment address FF70 LFEA6: FF70 98 TYA FF71 D0 EE BNE PrString_Lp ; Loop back if not $00 FF73 SCANHEX_: FF73 INITERROR: FF73 UNSUPPORTED: FF73 NULLRETURN: FF73 60 RTS FF74 ; FF74 ; Standard Tube entry points FF74 ; ========================== FF74 ; db STRING$(($FF95-$)AND255,CHR$255) FF74 ; FF74 ; Fill unused space with FF FF74 ; FF74 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FILL $FF,(tube_entry_table-$) FF95 .ORG tube_entry_table FF95 ; FF95 4C 73 FF LFF95: JMP NullReturn ; 0xFF95 FF98 4C B9 FF OSCOLD: JMP OSQUIT ; 0xFF98 FF9B 4C 5D FF PRSTRNG: JMP PrString_ ; 0xFF9B Print zero-terminated text at YX, returns A=0, Y corrupted FF9E 4C 73 FF LFF9E: JMP NullReturn ; 0xFF9E FFA1 4C 73 FF SCANHEX: JMP ScanHex_ ; 0xFFA1 Scan hex string at ($F8), returned in $F0/1 FFA4 4C 73 FF DISKACC: JMP NullReturn ; 0xFFA4 FFA7 4C 73 FF DISKCCP: JMP NullReturn ; 0xFFA7 FFAA 4C 3B FF PRHEX: JMP PrHex_A ; 0xFFAA Print A in hex, A corrupted FFAD 4C 36 FF PR2HEX: JMP PrHex_XY ; 0xFFAD Print YX in hex, A corrupted FFB0 4C 73 FF USERINT: JMP NullReturn ; 0xFFB0 FFB3 4C 51 FF PRTEXT: JMP PrText_ ; 0xFFB3 Print zero-terminated inline text, returns A=0, Y corrupted FFB6 36 VECDEF: DB default_vector_table_end-default_vector_table ; 0xFFB6 $36 FFB7 00 FF DW default_vector_table ; 0xFFB7 FFB9 4C B9 FF OSQUIT: JMP MAIN ; 0xFFB9 Quit current program FFBC 4C 73 FF OSERROR: JMP NullReturn ; 0xFFBC FFBF 4C 73 FF OSINIT: JMP InitError ; 0xFFBF Initialise MOS error handler, A corrupted FFC2 4C 73 FF DISKRST: JMP NullReturn ; 0xFFC2 FFC5 4C 73 FF LFFC5: JMP NullReturn ; 0xFFC5 FFC8 4C 84 FE NVRDCH: JMP osRDCH_ ; 0xFFC8 FFCB 4C 96 FE NVWRCH: JMP osWRCH_ ; 0xFFCB FFCE ; FFCE 6C 1C 02 OSFIND: JMP (FINDV) ; 0xFFCE FFD1 6C 1A 02 OSGBPB: JMP (GBPBV) ; 0xFFD1 FFD4 6C 18 02 OSBPUT: JMP (BPutV) ; 0xFFD4 FFD7 6C 16 02 OSBGET: JMP (BGetV) ; 0xFFD7 FFDA 6C 14 02 OSARGS: JMP (ARGSV) ; 0xFFDA FFDD 6C 12 02 OSFILE: JMP (FILEV) ; 0xFFDD FFE0 ; FFE0 6C 10 02 OSRDCH: JMP (RDCHV) ; 0xFFE0 FFE3 C9 0D OSASCI: CMP #ASCII_CR FFE5 D0 07 BNE OSWRCH ; 0xFFE3 FFE7 A9 0A OSNEWL: LDA #ASCII_LF FFE9 20 EE FF JSR OSWRCH ; 0xFFE7 FFEC A9 0D OSWRCR: LDA #ASCII_CR ; 0xFFEC FFEE 6C 0E 02 OSWRCH: JMP (WRCHV) ; 0xFFEE FFF1 6C 0C 02 OSWORD: JMP (WORDV) ; 0xFFF1 FFF4 6C 0A 02 OSBYTE: JMP (BYTEV) ; 0xFFF4 FFF7 6C 08 02 OS_CLI: JMP (CLIV) ; 0xFFF7 FFFA ; FFFA 83 FE NMIV: DW NMIHandler ; 0xFFFA NMI Vector FFFC 20 FE RESETV: DW RESET ; 0xFFFC RESET Vector FFFE 58 FE IRQV: DW IRQHandler ; 0xFFFE IRQ Vector 10000 END ROM_START: FE00 DEFINED AT LINE 24 > USED AT LINE 47 > USED AT LINE 153 TARGET_6850: 0001 DEFINED AT LINE 30 TARGET_6850_ADDRESS: FEF0 DEFINED AT LINE 31 > USED AT LINE 132 > USED AT LINE 133 > USED AT LINE 134 > USED AT LINE 141 > USED AT LINE 142 ASCII_CR: 000D DEFINED AT LINE 65 > USED AT LINE 161 > USED AT LINE 165 ASCII_LF: 000A DEFINED AT LINE 66 ASCII_ESC: 001B DEFINED AT LINE 67 ASCII_SP: 0020 DEFINED AT LINE 68 > USED AT LINE 164 VECTOR_TABLE: 0200 DEFINED AT LINE 70 > USED AT LINE 176 VECTOR_TABLE_SIZE: 0035 DEFINED AT LINE 71 TUBE_ENTRY_TABLE: FF95 DEFINED AT LINE 72 > USED AT LINE 414 > USED AT LINE 415 TUBE_ESC: 009B DEFINED AT LINE 77 MAIN: FFB9 DEFINED AT LINE 91 > USED AT LINE 430 USERV: 0200 DEFINED AT LINE 106 BRKV: 0202 DEFINED AT LINE 107 > USED AT LINE 241 IRQ1V: 0204 DEFINED AT LINE 108 > USED AT LINE 222 IRQ2V: 0206 DEFINED AT LINE 109 > USED AT LINE 224 CLIV: 0208 DEFINED AT LINE 110 > USED AT LINE 454 BYTEV: 020A DEFINED AT LINE 111 > USED AT LINE 453 WORDV: 020C DEFINED AT LINE 112 > USED AT LINE 452 WRCHV: 020E DEFINED AT LINE 113 > USED AT LINE 451 RDCHV: 0210 DEFINED AT LINE 114 > USED AT LINE 445 FILEV: 0212 DEFINED AT LINE 115 > USED AT LINE 443 ARGSV: 0214 DEFINED AT LINE 116 > USED AT LINE 442 BGETV: 0216 DEFINED AT LINE 117 > USED AT LINE 441 BPUTV: 0218 DEFINED AT LINE 118 > USED AT LINE 440 GBPBV: 021A DEFINED AT LINE 119 > USED AT LINE 439 FINDV: 021C DEFINED AT LINE 120 > USED AT LINE 438 FSCV: 021E DEFINED AT LINE 121 EVNTV: 0220 DEFINED AT LINE 122 TEXT: 00FA DEFINED AT LINE 123 > USED AT LINE 380 > USED AT LINE 382 > USED AT LINE 384 > USED AT LINE 387 > USED AT LINE 388 > USED AT LINE 391 > USED AT LINE 395 > USED AT LINE 397 IRQA: 00FC DEFINED AT LINE 124 > USED AT LINE 217 > USED AT LINE 239 > USED AT LINE 243 FAULT: 00FD DEFINED AT LINE 125 > USED AT LINE 202 > USED AT LINE 203 > USED AT LINE 233 > USED AT LINE 236 ESCFLG: 00FF DEFINED AT LINE 126 > USED AT LINE 187 TXRXCONTROL: FEF0 DEFINED AT LINE 132 > USED AT LINE 183 TXSTATUS: FEF0 DEFINED AT LINE 133 > USED AT LINE 288 TXDATA: FEF1 DEFINED AT LINE 134 > USED AT LINE 292 TXRDY: 0002 DEFINED AT LINE 135 TXINIT: 0013 DEFINED AT LINE 136 RXSTOP: 0055 DEFINED AT LINE 137 RXSTATUS: FEF0 DEFINED AT LINE 141 > USED AT LINE 185 > USED AT LINE 306 RXDATA: FEF1 DEFINED AT LINE 142 > USED AT LINE 309 RXRDY: 0001 DEFINED AT LINE 143 RXINIT: 0055 DEFINED AT LINE 144 RXCONT: 0015 DEFINED AT LINE 145 CODE_STARTS_HERE: FE00 DEFINED AT LINE 155 PRBANNER: FE03 DEFINED AT LINE 158 > USED AT LINE 192 BANNER: FE06 DEFINED AT LINE 160 RESET: FE20 DEFINED AT LINE 171 > USED AT LINE 156 > USED AT LINE 457 RESETLP: FE23 DEFINED AT LINE 174 > USED AT LINE 178 ERRORHANDLER: FE47 DEFINED AT LINE 200 > USED AT LINE 329 SKIP_INC_Y: FE52 DEFINED AT LINE 208 > USED AT LINE 206 HALT: FE55 DEFINED AT LINE 211 > USED AT LINE 212 IRQHANDLER: FE58 DEFINED AT LINE 216 > USED AT LINE 458 IRQ1HANDLER: FE63 DEFINED AT LINE 223 > USED AT LINE 330 BRKHANDLER: FE66 DEFINED AT LINE 225 > USED AT LINE 221 IRQ2HANDLER: FE81 DEFINED AT LINE 242 > USED AT LINE 331 NMIHANDLER: FE83 DEFINED AT LINE 244 > USED AT LINE 456 OSRDCH_: FE84 DEFINED AT LINE 252 > USED AT LINE 254 > USED AT LINE 336 > USED AT LINE 435 OSRDCH_1: FE8B DEFINED AT LINE 256 > USED AT LINE 258 OSRDCH_2: FE90 DEFINED AT LINE 259 > USED AT LINE 255 READDATANONE: FE94 DEFINED AT LINE 262 > USED AT LINE 308 OSRDCH_3: FE95 DEFINED AT LINE 264 > USED AT LINE 261 OSWRCH_: FE96 DEFINED AT LINE 270 > USED AT LINE 335 > USED AT LINE 436 SENDBYTE: FE96 DEFINED AT LINE 271 SENDDATA: FE9D DEFINED AT LINE 284 > USED AT LINE 272 SENDWAIT: FE9E DEFINED AT LINE 287 > USED AT LINE 290 SENDBYTEDONE: FEA9 DEFINED AT LINE 297 > USED AT LINE 274 READDATA: FEAA DEFINED AT LINE 304 > USED AT LINE 253 > USED AT LINE 257 DEFAULT_VECTOR_TABLE: FF00 DEFINED AT LINE 327 > USED AT LINE 175 > USED AT LINE 428 > USED AT LINE 429 DEFAULT_VECTOR_TABLE_END: FF36 DEFINED AT LINE 355 > USED AT LINE 428 PRHEX_XY: FF36 DEFINED AT LINE 357 > USED AT LINE 425 PRHEX_A: FF3B DEFINED AT LINE 361 > USED AT LINE 359 > USED AT LINE 424 PRNYBBLE: FF44 DEFINED AT LINE 369 > USED AT LINE 367 PRDIGIT: FF4C DEFINED AT LINE 374 > USED AT LINE 372 PRTEXT_: FF51 DEFINED AT LINE 378 > USED AT LINE 159 > USED AT LINE 427 PRSTRING_: FF5D DEFINED AT LINE 386 > USED AT LINE 419 PRSTRING_LP: FF61 DEFINED AT LINE 389 > USED AT LINE 400 PRSTRING_2: FF6A DEFINED AT LINE 394 > USED AT LINE 383 > USED AT LINE 392 LFEA6: FF70 DEFINED AT LINE 398 > USED AT LINE 396 SCANHEX_: FF73 DEFINED AT LINE 402 > USED AT LINE 421 INITERROR: FF73 DEFINED AT LINE 403 > USED AT LINE 432 UNSUPPORTED: FF73 DEFINED AT LINE 404 > USED AT LINE 343 > USED AT LINE 345 > USED AT LINE 346 > USED AT LINE 347 > USED AT LINE 348 > USED AT LINE 349 > USED AT LINE 350 > USED AT LINE 351 NULLRETURN: FF73 DEFINED AT LINE 405 > USED AT LINE 328 > USED AT LINE 332 > USED AT LINE 333 > USED AT LINE 334 > USED AT LINE 337 > USED AT LINE 338 > USED AT LINE 339 > USED AT LINE 340 > USED AT LINE 341 > USED AT LINE 342 > USED AT LINE 344 > USED AT LINE 352 > USED AT LINE 353 > USED AT LINE 354 > USED AT LINE 417 > USED AT LINE 420 > USED AT LINE 422 > USED AT LINE 423 > USED AT LINE 426 > USED AT LINE 431 > USED AT LINE 433 > USED AT LINE 434 LFF95: FF95 DEFINED AT LINE 417 OSCOLD: FF98 DEFINED AT LINE 418 > USED AT LINE 195 PRSTRNG: FF9B DEFINED AT LINE 419 > USED AT LINE 210 LFF9E: FF9E DEFINED AT LINE 420 SCANHEX: FFA1 DEFINED AT LINE 421 DISKACC: FFA4 DEFINED AT LINE 422 DISKCCP: FFA7 DEFINED AT LINE 423 PRHEX: FFAA DEFINED AT LINE 424 PR2HEX: FFAD DEFINED AT LINE 425 USERINT: FFB0 DEFINED AT LINE 426 PRTEXT: FFB3 DEFINED AT LINE 427 VECDEF: FFB6 DEFINED AT LINE 428 OSQUIT: FFB9 DEFINED AT LINE 430 > USED AT LINE 91 > USED AT LINE 418 OSERROR: FFBC DEFINED AT LINE 431 OSINIT: FFBF DEFINED AT LINE 432 DISKRST: FFC2 DEFINED AT LINE 433 LFFC5: FFC5 DEFINED AT LINE 434 NVRDCH: FFC8 DEFINED AT LINE 435 NVWRCH: FFCB DEFINED AT LINE 436 OSFIND: FFCE DEFINED AT LINE 438 OSGBPB: FFD1 DEFINED AT LINE 439 OSBPUT: FFD4 DEFINED AT LINE 440 OSBGET: FFD7 DEFINED AT LINE 441 OSARGS: FFDA DEFINED AT LINE 442 OSFILE: FFDD DEFINED AT LINE 443 OSRDCH: FFE0 DEFINED AT LINE 445 OSASCI: FFE3 DEFINED AT LINE 446 > USED AT LINE 393 OSNEWL: FFE7 DEFINED AT LINE 448 > USED AT LINE 193 > USED AT LINE 201 OSWRCR: FFEC DEFINED AT LINE 450 OSWRCH: FFEE DEFINED AT LINE 451 > USED AT LINE 376 > USED AT LINE 447 > USED AT LINE 449 OSWORD: FFF1 DEFINED AT LINE 452 OSBYTE: FFF4 DEFINED AT LINE 453 OS_CLI: FFF7 DEFINED AT LINE 454 NMIV: FFFA DEFINED AT LINE 456 RESETV: FFFC DEFINED AT LINE 457 IRQV: FFFE DEFINED AT LINE 458