1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-07-07 18:28:58 +00:00
C02/vic20/include/vic20a0cart.a02
2018-01-28 13:45:16 -05:00

133 lines
4.2 KiB
Plaintext

; c02 Program Initialization Code for Unexpanded VIC-20
;ASCII Control Codes Equivalents
CR EQU $0D ;Carriage Return
LF EQU $11 ;Line Feed (Cursor Down)
DEL EQU $14 ;Delete
HT EQU $1D ;Horizontal Tab (Cursor Right)
VT EQU $91 ;Vertical Tab (Cursor Up)
FF EQU $93 ;Form Feed (Clear Screen)
BS EQU $9D ;Backspace (Cursor Left)
;PETSCII Key Mappings
DELKEY EQU $14 ;Delete/Backspace Key (Delete)
ESCKEY EQU $03 ;Escape/Stop Key (RUN/STOP)
RTNKEY EQU $0D ;Return/Enter Key (RETURN)
;Standard Library Constants
FOMAX EQU 7 ;Maximum Number of Open Files
FNMAX EQU 16 ;Maximum Filename Length
;Zero Page Locations
SRCLO EQU $FB ;String Pointer (stdio.asm)
SRCHI EQU $FC ;Free Byte for User Programs
DSTLO EQU $FD ;Free Byte for User Programs
DSTHI EQU $FE ;Free Byte for User Programs
;Other RAM Locations
TEMP0 EQU $0310 ;Free Byte for User Programs
TEMP1 EQU $0311 ;Free Byte for User Programs
TEMP2 EQU $0312 ;Free Byte for User Programs
TEMP3 EQU $0313 ;Free Byte for User Programs
FTBL EQU $0334 ;File Table (files.a02)
TBFFR EQU $033C ;Cassette I/O Buffer
user12 EQU $03FC ;Free Byte for User Programs
user13 EQU $03FD ;Free Byte for User Programs
user14 EQU $03FE ;Free Byte for User Programs
STKPTR EQU $03FF ;Stack Pointer Storage
;Video RAM and ROM
VICSCN EQU $1E00 ;Video Screen Memory Area (Unexpanded)
CHRROM EQU $8000 ;Character Generator ROM
VICCLR EQU $9600 ;COLOR RAM (UNEXPANDED)
;Kernal Routines
SETMSG EQU $FF90 ;Control System Message Output
SETLFS EQU $FFBA ;Set up Logical File
READST EQU $FFB7 ;Read Status Word
SETNAM EQU $FFBD ;Set File Name
OPEN EQU $FFC0 ;Open a Logical File
CLOSE EQU $FFC3 ;Close Logical File
CHKIN EQU $FFC6 ;Open Channel for Input
CHKOUT EQU $FFC9 ;Open Channel for Output
CLRCHN EQU $FFCC ;Clear I/O Channels
CHRIN EQU $FFCF ;Input Character to Channel
CHROUT EQU $FFD2 ;Output Character to Channel
GETIN EQU $FFE4 ;Read Character from Keyboard Buffer
CLALL EQU $FFE7 ;Close All Files
;Machine Language Basic Stub
ORG $A000 ;Start
DC.W START ;Cartridge Start Address
DC.W RESTR ;Restore Key Routine
DC $41,$30,$C3,$C2,$CD ;Cartridge Start Sequence
START: JMP MAIN ;Execute Program
;Exit - Return to BASIC
;Execute a Warm Start, bypassing the Cartridge Check Code
EXIT: LDX #$FF ; Set X for stack
SEI ; Disable interrupts
TXS ; Clear stack
CLD ; Clear decimal mode
JMP $FD2F ; Jump into Initialization Code
;Poll Keyboard for Character
PLKEY EQU GETIN ;Read Character from Keyboard Buffer
;Get Character from Keyboard
GETKEY:
;Wait for Character from Keyboard
RDKEY: JSR PLKEY ;Poll Keyboard
BEQ GETKEY ;If No Key, Loop
RTS
;Print Character to Console
PRCHR EQU CHROUT ;
;Delete Previous Character
DELCHR: LDA #$9D ;Load Cursor Left into Accumulator
JSR PRCHR ; and Print it
LDA #$14 ;Load Delete into Accumulater
JMP PRCHR ; and Print it
;Advance Character to Next line
NEWLIN: LDA #$0D ;Load C/R into Accumulator
JMP PRCHR ; and Print it
;Print Byte as Two-Digit Hex Number to Console
PRBYTE: PHA ;Save Accumulater
LSR ;Shift Hi Nybble to Low Nybble
LSR
LSR
LSR
JSR PRHEX ; and Print it
PLA ;Restore Accumulator
; and fall into prhex
;Print Low Nybble as Hex Digit to Console
PRHEX: AND #$0F ;Strip High Nybble
CMP #$0A ;If Low Nybble >= 10
BCC PRHEXC ;
ADC #$06 ; Convert ':' to 'A'...
PRHEXC: ADC #$30 ;Convert to ASCII Character
JMP PRCHR ;Print Hex Digit and Return
;Functions to set String Pointers
;Used by memory, stdio, stdlin, string, and stringx libraries
;Initialize Destination String Pointer and Index
SETDST: STX DSTLO ;Save Destination String Pointer
STY DSTHI
RTS
;Initialize Source String Pointer and Index
SETSRC: STX SRCLO ;Save Source String Pointer
STY SRCHI
LDY #$00 ;Initialize Index Into String
RTS
;Retrieve Source String Pointer
GETSRC: LDX SRCLO
LDY SRCHI
RTS
**