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 0 0000 TARGET_6850_ADDRESS: EQU $FEF0 0000 TARGET_W65C02SXB: EQU 1 0000 IF target_W65C02SXB 0000 TIDE_VIA: EQU $7FE0 0000 TIDE_VIA_IOB: EQU TIDE_VIA+0 ; }; 0000 TIDE_VIA_IOA: EQU TIDE_VIA+1 ; }; 0000 TIDE_VIA_DDRB: EQU TIDE_VIA+2 ; }; 0000 TIDE_VIA_DDRA: EQU TIDE_VIA+3 ; } 0000 ; 0000 TUSB_TXE_BITMASK: EQU $01 ; 0 = in 0000 TUSB_RXF_BITMASK: EQU $02 ; 0 = in 0000 TUSB_WR_BITMASK: EQU $04 ; 1 = out 0000 TUSB_RD_BITMASK: EQU $08 ; 1 = out 0000 ; TUSB__bitmask equ $10 ; 1 = out RFU 0000 TUSB_PWRENB_BITMASK: EQU $20 ; 0 = in 0000 ; TUSB__bitmask equ $40 ; 0 = in RFU 0000 TUSB_SEL_BITMASK: EQU $80 ; 0 = in 0000 TIDE_RESET_ENTRY: EQU $8115 0000 ENDIF 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 know-good version 0000 ; 2021-11-23 Hacked to use USB port in W65C02SXB 0000 ; but not tried out yet!!! 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 TXRXCONTROL: EQU target_6850_address ; write-only TXSTATUS: EQU target_6850_address ; read-only TXDATA: EQU target_6850_address+1 TXRDY: EQU 2 TXINIT: EQU $13 RXSTOP: EQU $55 ; ; $13=Reset ACIA, $55=8N1, clock/16, RTS high ; RXSTATUS: EQU target_6850_address RXDATA: EQU target_6850_address+1 RXRDY: EQU 1 RXINIT: EQU $55 RXCONT: EQU $15 ; ; $55=RTS high, $15=RTS low ; 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 IF target_W65C02SXB FE21 ; FE21 A9 1C LDA #$1C ; directions used by board FE23 8D E2 7F STA TIDE_VIA_DDRB FE26 2C E0 7F BIT TIDE_VIA_IOB ; read switch state FE29 F0 03 BEQ boot_BBC FE2B 4C 15 81 JMP TIDE_RESET_entry ; floating high, BBC code off, TIDE on. FE2E BOOT_BBC: FE2E ENDIF FE2E A2 35 LDX #default_vector_table_end-default_vector_table-1 ; 0x35 is last-byte offset FE30 RESETLP: FE30 BD 00 FF LDA default_vector_table,X FE33 9D 00 02 STA vector_table,X ; Copy default vectors FE36 CA DEX FE37 10 F7 BPL RESETlp FE39 9A TXS ; Clear stack FE3A IF target_6850 LDA #TxInit STA TxRxControl ; Initialise I/O port LDA #RxInit STA RxStatus LDA #0 STA ESCFLG FE3A ENDIF FE3A ; FE3A IF target_W65C02SXB FE3A ; USB devices should not speak until spoken to. FE3A ; wait for any character, discard it, then proceed. FE3A 20 CC FE JSR TIDE_VIA_USB_CHAR_RX FE3D ENDIF FE3D 58 CLI FE3E 20 03 FE JSR PrBanner FE41 20 E7 FF JSR OSNEWL FE44 A9 01 LDA #1 FE46 4C 98 FF JMP OSCOLD ; Enter main program FE49 ; FE49 ; FE49 ; Default error handler FE49 ; ===================== FE49 ERRORHANDLER: FE49 20 E7 FF JSR OSNEWL FE4C A6 FD LDX FAULT+0 FE4E A4 FE LDY FAULT+1 FE50 ; FE50 E8 INX FE51 D0 01 BNE skip_inc_y FE53 C8 INY ; XY=>error string FE54 SKIP_INC_Y: FE54 ; FE54 20 9B FF JSR PRSTRNG ; Print error string FE57 HALT: FE57 4C 57 FE JMP HALT ; And stop FE5A ; FE5A ; Interrupt handlers FE5A ; ================== FE5A IRQHANDLER: FE5A 85 FC STA IRQA FE5C 68 PLA FE5D 48 PHA ; Save A, get flags from stack FE5E 29 10 AND #$10 FE60 D0 06 BNE BRKHandler ; If BRK, jump to BRK handler FE62 6C 04 02 JMP (IRQ1V) ; Continue via IRQ1V handler FE65 IRQ1HANDLER: FE65 6C 06 02 JMP (IRQ2V) ; Pass on to IRQ2V FE68 BRKHANDLER: FE68 8A TXA FE69 48 PHA ; Save X FE6A BA TSX FE6B BD 03 01 LDA $0103,X FE6E D8 CLD ; Get address from stack FE6F 38 SEC FE70 E9 01 SBC #1 FE72 85 FD STA FAULT+0 FE74 BD 04 01 LDA $0104,X FE77 E9 00 SBC #0 FE79 85 FE STA FAULT+1 ; 0xFD/E=>after BRK opcode FE7B 68 PLA FE7C AA TAX FE7D A5 FC LDA IRQA ; Restore X, get saved A FE7F 58 CLI FE80 6C 02 02 JMP (BRKV) ; Restore IRQs, jump to Error Handler FE83 IRQ2HANDLER: FE83 A5 FC LDA IRQA ; Restore A FE85 NMIHANDLER: FE85 40 RTI ; Return from interupt FE86 ; FE86 ; OSRDCH - Wait for character from input stream FE86 ; ============================================= FE86 ; On exit, A =char, Cy=Escape flag FE86 ; osRDCH_: FE86 OSRDCH_: FE86 20 CC FE JSR ReadData FE89 90 FB BCC osRDCH_ ; Wait for character FE8B D0 05 BNE osRDCH_2 FE8D OSRDCH_1: FE8D 20 CC FE JSR ReadData FE90 90 FB BCC osRDCH_1 ; Wait for character FE92 OSRDCH_2: FE92 C9 1B CMP #ASCII_ESC FE94 F0 01 BEQ osRDCH_3 ; Exit with CS if Escape FE96 READDATANONE: FE96 18 CLC ; CC if not Escape FE97 OSRDCH_3: FE97 60 RTS FE98 ; FE98 ; OSWRCH - Send character to output stream FE98 ; ======================================== FE98 ; On entry, A =character FE98 OSWRCH_: ; WRCH is simply SendByte FE98 SENDBYTE: FE98 20 9F FE JSR SendData ; Send byte FE9B C9 9B CMP #TUBE_ESC FE9D D0 2C BNE SendByteDone ; If not TUBE_ESC, done FE9F ; Fall through to send again FE9F ; FE9F ; FE9F ; *** LOW-LEVEL I/O CODE *** FE9F ; ========================== FE9F ; FE9F ; Send a raw byte of data FE9F ; ----------------------- FE9F SENDDATA: FE9F IF target_6850 PHA SENDWAIT: LDA TxStatus ; Get Status AND #TxRDY BEQ SendWait ; Wait until data can be sent PLA STA TxData ; Send data FE9F ELSE FE9F IF target_W65C02SXB FE9F TIDE_VIA_USB_CHAR_TX: FE9F A2 00 LDX #$00 FEA1 8E E3 7F STX TIDE_VIA_DDRA ; port A outputs FEA4 8D E1 7F STA TIDE_VIA_IOA ; setup data lines FEA7 A9 01 LDA #TUSB_TXE_bitmask FEA9 TIDE_VIA_USB_CHAR_TX_WAIT: FEA9 2C E0 7F BIT TIDE_VIA_IOB FEAC D0 FB BNE TIDE_VIA_USB_CHAR_TX_WAIT FEAE AD E0 7F LDA TIDE_VIA_IOB FEB1 29 FB AND #$FF-TUSB_WR_bitmask ; FEB3 AA TAX FEB4 09 04 ORA #TUSB_WR_bitmask ; FEB6 8D E0 7F STA TIDE_VIA_IOB ; WR goes active high FEB9 A9 FF LDA #$FF FEBB 8D E3 7F STA TIDE_VIA_DDRA FEBE EA NOP FEBF EA NOP FEC0 8E E0 7F STX TIDE_VIA_IOB ; WR goes inactive low FEC3 AD E1 7F LDA TIDE_VIA_IOA FEC6 A2 00 LDX #$00 FEC8 8E E3 7F STX TIDE_VIA_DDRA FECB ; rts ; FECB ENDIF FECB ENDIF FECB SENDBYTEDONE: FECB 60 RTS FECC ; FECC ; Read raw data FECC ; ------------- FECC ; On exit, P =CC, no data FECC READDATA: FECC IF target_6850 LDA RxStatus AND #RxRDY ; Get RxStatus BNE ReadDataNone ; Exit if no data present LDA RxData FECC ELSE FECC IF target_W65C02SXB FECC TIDE_VIA_USB_CHAR_RX: FECC A9 00 LDA #$00 FECE 8D E3 7F STA TIDE_VIA_DDRA ; port A direction FED1 A9 02 LDA #$02 FED3 TIDE_VIA_USB_CHAR_RX_WAIT: FED3 2C E0 7F BIT TIDE_VIA_IOB FED6 D0 FB BNE TIDE_VIA_USB_CHAR_RX_WAIT FED8 AD E0 7F LDA TIDE_VIA_IOB FEDB 09 08 ORA #TUSB_RD_bitmask FEDD AA TAX FEDE 29 F7 AND #$FF-TUSB_RD_bitmask FEE0 8D E0 7F STA TIDE_VIA_IOB ; RD goes active low FEE3 EA NOP FEE4 EA NOP FEE5 EA NOP FEE6 EA NOP FEE7 AD E1 7F LDA TIDE_VIA_IOA ; read data from port A FEEA 8E E0 7F STX TIDE_VIA_IOB ; RD goes active low FEED ; rts ; don't return just yet FEED ENDIF FEED ENDIF FEED C9 9B CMP #TUBE_ESC FEEF 38 SEC FEF0 60 RTS ; CS=Data present, EQ/NE=TUBE_ESC FEF1 ; FEF1 ; db STRING$((default_vector_table-$)AND255,CHR$255) FEF1 ; FEF1 ; Fill unused space with FF FEF1 ; FEF1 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 49 FE DW ErrorHandler ; 0x202 - BRKV FF04 65 FE DW IRQ1Handler ; 0x204 - IRQ1V FF06 83 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 98 FE DW osWRCH_ ; 0x20E - WRCHV FF10 86 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 #$0F 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 86 FE NVRDCH: JMP osRDCH_ ; 0xFFC8 FFCB 4C 98 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 85 FE NMIV: DW NMIHandler ; 0xFFFA NMI Vector FFFC 20 FE RESETV: DW RESET ; 0xFFFC RESET Vector FFFE 5A FE IRQV: DW IRQHandler ; 0xFFFE IRQ Vector 10000 END ROM_START: FE00 DEFINED AT LINE 24 > USED AT LINE 70 > USED AT LINE 178 TARGET_6850: 0000 DEFINED AT LINE 30 TARGET_6850_ADDRESS: FEF0 DEFINED AT LINE 31 TARGET_W65C02SXB: 0001 DEFINED AT LINE 33 TIDE_VIA: 7FE0 DEFINED AT LINE 36 > USED AT LINE 38 > USED AT LINE 39 > USED AT LINE 40 > USED AT LINE 41 TIDE_VIA_IOB: 7FE0 DEFINED AT LINE 38 > USED AT LINE 203 > USED AT LINE 344 > USED AT LINE 346 > USED AT LINE 350 > USED AT LINE 355 > USED AT LINE 387 > USED AT LINE 389 > USED AT LINE 393 > USED AT LINE 399 TIDE_VIA_IOA: 7FE1 DEFINED AT LINE 39 > USED AT LINE 341 > USED AT LINE 356 > USED AT LINE 398 TIDE_VIA_DDRB: 7FE2 DEFINED AT LINE 40 > USED AT LINE 202 TIDE_VIA_DDRA: 7FE3 DEFINED AT LINE 41 > USED AT LINE 340 > USED AT LINE 352 > USED AT LINE 358 > USED AT LINE 384 TUSB_TXE_BITMASK: 0001 DEFINED AT LINE 43 TUSB_RXF_BITMASK: 0002 DEFINED AT LINE 44 TUSB_WR_BITMASK: 0004 DEFINED AT LINE 45 TUSB_RD_BITMASK: 0008 DEFINED AT LINE 46 TUSB_PWRENB_BITMASK: 0020 DEFINED AT LINE 48 TUSB_SEL_BITMASK: 0080 DEFINED AT LINE 50 TIDE_RESET_ENTRY: 8115 DEFINED AT LINE 52 > USED AT LINE 205 ASCII_CR: 000D DEFINED AT LINE 89 > USED AT LINE 186 > USED AT LINE 190 ASCII_LF: 000A DEFINED AT LINE 90 ASCII_ESC: 001B DEFINED AT LINE 91 ASCII_SP: 0020 DEFINED AT LINE 92 > USED AT LINE 189 VECTOR_TABLE: 0200 DEFINED AT LINE 94 > USED AT LINE 213 VECTOR_TABLE_SIZE: 0035 DEFINED AT LINE 95 TUBE_ENTRY_TABLE: FF95 DEFINED AT LINE 96 > USED AT LINE 507 > USED AT LINE 508 TUBE_ESC: 009B DEFINED AT LINE 101 MAIN: FFB9 DEFINED AT LINE 115 > USED AT LINE 523 USERV: 0200 DEFINED AT LINE 130 BRKV: 0202 DEFINED AT LINE 131 > USED AT LINE 283 IRQ1V: 0204 DEFINED AT LINE 132 > USED AT LINE 264 IRQ2V: 0206 DEFINED AT LINE 133 > USED AT LINE 266 CLIV: 0208 DEFINED AT LINE 134 > USED AT LINE 547 BYTEV: 020A DEFINED AT LINE 135 > USED AT LINE 546 WORDV: 020C DEFINED AT LINE 136 > USED AT LINE 545 WRCHV: 020E DEFINED AT LINE 137 > USED AT LINE 544 RDCHV: 0210 DEFINED AT LINE 138 > USED AT LINE 538 FILEV: 0212 DEFINED AT LINE 139 > USED AT LINE 536 ARGSV: 0214 DEFINED AT LINE 140 > USED AT LINE 535 BGETV: 0216 DEFINED AT LINE 141 > USED AT LINE 534 BPUTV: 0218 DEFINED AT LINE 142 > USED AT LINE 533 GBPBV: 021A DEFINED AT LINE 143 > USED AT LINE 532 FINDV: 021C DEFINED AT LINE 144 > USED AT LINE 531 FSCV: 021E DEFINED AT LINE 145 EVNTV: 0220 DEFINED AT LINE 146 TEXT: 00FA DEFINED AT LINE 147 > USED AT LINE 473 > USED AT LINE 475 > USED AT LINE 477 > USED AT LINE 480 > USED AT LINE 481 > USED AT LINE 484 > USED AT LINE 488 > USED AT LINE 490 IRQA: 00FC DEFINED AT LINE 148 > USED AT LINE 259 > USED AT LINE 281 > USED AT LINE 285 FAULT: 00FD DEFINED AT LINE 149 > USED AT LINE 244 > USED AT LINE 245 > USED AT LINE 275 > USED AT LINE 278 ESCFLG: 00FF DEFINED AT LINE 150 CODE_STARTS_HERE: FE00 DEFINED AT LINE 180 PRBANNER: FE03 DEFINED AT LINE 183 > USED AT LINE 234 BANNER: FE06 DEFINED AT LINE 185 RESET: FE20 DEFINED AT LINE 196 > USED AT LINE 181 > USED AT LINE 550 BOOT_BBC: FE2E DEFINED AT LINE 206 > USED AT LINE 204 RESETLP: FE30 DEFINED AT LINE 211 > USED AT LINE 215 ERRORHANDLER: FE49 DEFINED AT LINE 242 > USED AT LINE 422 SKIP_INC_Y: FE54 DEFINED AT LINE 250 > USED AT LINE 248 HALT: FE57 DEFINED AT LINE 253 > USED AT LINE 254 IRQHANDLER: FE5A DEFINED AT LINE 258 > USED AT LINE 551 IRQ1HANDLER: FE65 DEFINED AT LINE 265 > USED AT LINE 423 BRKHANDLER: FE68 DEFINED AT LINE 267 > USED AT LINE 263 IRQ2HANDLER: FE83 DEFINED AT LINE 284 > USED AT LINE 424 NMIHANDLER: FE85 DEFINED AT LINE 286 > USED AT LINE 549 OSRDCH_: FE86 DEFINED AT LINE 294 > USED AT LINE 296 > USED AT LINE 429 > USED AT LINE 528 OSRDCH_1: FE8D DEFINED AT LINE 298 > USED AT LINE 300 OSRDCH_2: FE92 DEFINED AT LINE 301 > USED AT LINE 297 READDATANONE: FE96 DEFINED AT LINE 304 OSRDCH_3: FE97 DEFINED AT LINE 306 > USED AT LINE 303 OSWRCH_: FE98 DEFINED AT LINE 312 > USED AT LINE 428 > USED AT LINE 529 SENDBYTE: FE98 DEFINED AT LINE 313 SENDDATA: FE9F DEFINED AT LINE 326 > USED AT LINE 314 TIDE_VIA_USB_CHAR_TX: FE9F DEFINED AT LINE 338 TIDE_VIA_USB_CHAR_TX_WAIT: FEA9 DEFINED AT LINE 343 > USED AT LINE 345 SENDBYTEDONE: FECB DEFINED AT LINE 365 > USED AT LINE 316 READDATA: FECC DEFINED AT LINE 372 > USED AT LINE 295 > USED AT LINE 299 TIDE_VIA_USB_CHAR_RX: FECC DEFINED AT LINE 382 > USED AT LINE 230 TIDE_VIA_USB_CHAR_RX_WAIT: FED3 DEFINED AT LINE 386 > USED AT LINE 388 DEFAULT_VECTOR_TABLE: FF00 DEFINED AT LINE 420 > USED AT LINE 212 > USED AT LINE 521 > USED AT LINE 522 DEFAULT_VECTOR_TABLE_END: FF36 DEFINED AT LINE 448 > USED AT LINE 521 PRHEX_XY: FF36 DEFINED AT LINE 450 > USED AT LINE 518 PRHEX_A: FF3B DEFINED AT LINE 454 > USED AT LINE 452 > USED AT LINE 517 PRNYBBLE: FF44 DEFINED AT LINE 462 > USED AT LINE 460 PRDIGIT: FF4C DEFINED AT LINE 467 > USED AT LINE 465 PRTEXT_: FF51 DEFINED AT LINE 471 > USED AT LINE 184 > USED AT LINE 520 PRSTRING_: FF5D DEFINED AT LINE 479 > USED AT LINE 512 PRSTRING_LP: FF61 DEFINED AT LINE 482 > USED AT LINE 493 PRSTRING_2: FF6A DEFINED AT LINE 487 > USED AT LINE 476 > USED AT LINE 485 LFEA6: FF70 DEFINED AT LINE 491 > USED AT LINE 489 SCANHEX_: FF73 DEFINED AT LINE 495 > USED AT LINE 514 INITERROR: FF73 DEFINED AT LINE 496 > USED AT LINE 525 UNSUPPORTED: FF73 DEFINED AT LINE 497 > USED AT LINE 436 > USED AT LINE 438 > USED AT LINE 439 > USED AT LINE 440 > USED AT LINE 441 > USED AT LINE 442 > USED AT LINE 443 > USED AT LINE 444 NULLRETURN: FF73 DEFINED AT LINE 498 > USED AT LINE 421 > USED AT LINE 425 > USED AT LINE 426 > USED AT LINE 427 > USED AT LINE 430 > USED AT LINE 431 > USED AT LINE 432 > USED AT LINE 433 > USED AT LINE 434 > USED AT LINE 435 > USED AT LINE 437 > USED AT LINE 445 > USED AT LINE 446 > USED AT LINE 447 > USED AT LINE 510 > USED AT LINE 513 > USED AT LINE 515 > USED AT LINE 516 > USED AT LINE 519 > USED AT LINE 524 > USED AT LINE 526 > USED AT LINE 527 LFF95: FF95 DEFINED AT LINE 510 OSCOLD: FF98 DEFINED AT LINE 511 > USED AT LINE 237 PRSTRNG: FF9B DEFINED AT LINE 512 > USED AT LINE 252 LFF9E: FF9E DEFINED AT LINE 513 SCANHEX: FFA1 DEFINED AT LINE 514 DISKACC: FFA4 DEFINED AT LINE 515 DISKCCP: FFA7 DEFINED AT LINE 516 PRHEX: FFAA DEFINED AT LINE 517 PR2HEX: FFAD DEFINED AT LINE 518 USERINT: FFB0 DEFINED AT LINE 519 PRTEXT: FFB3 DEFINED AT LINE 520 VECDEF: FFB6 DEFINED AT LINE 521 OSQUIT: FFB9 DEFINED AT LINE 523 > USED AT LINE 115 > USED AT LINE 511 OSERROR: FFBC DEFINED AT LINE 524 OSINIT: FFBF DEFINED AT LINE 525 DISKRST: FFC2 DEFINED AT LINE 526 LFFC5: FFC5 DEFINED AT LINE 527 NVRDCH: FFC8 DEFINED AT LINE 528 NVWRCH: FFCB DEFINED AT LINE 529 OSFIND: FFCE DEFINED AT LINE 531 OSGBPB: FFD1 DEFINED AT LINE 532 OSBPUT: FFD4 DEFINED AT LINE 533 OSBGET: FFD7 DEFINED AT LINE 534 OSARGS: FFDA DEFINED AT LINE 535 OSFILE: FFDD DEFINED AT LINE 536 OSRDCH: FFE0 DEFINED AT LINE 538 OSASCI: FFE3 DEFINED AT LINE 539 > USED AT LINE 486 OSNEWL: FFE7 DEFINED AT LINE 541 > USED AT LINE 235 > USED AT LINE 243 OSWRCR: FFEC DEFINED AT LINE 543 OSWRCH: FFEE DEFINED AT LINE 544 > USED AT LINE 469 > USED AT LINE 540 > USED AT LINE 542 OSWORD: FFF1 DEFINED AT LINE 545 OSBYTE: FFF4 DEFINED AT LINE 546 OS_CLI: FFF7 DEFINED AT LINE 547 NMIV: FFFA DEFINED AT LINE 549 RESETV: FFFC DEFINED AT LINE 550 IRQV: FFFE DEFINED AT LINE 551