C02/include/kowalski.a02

96 lines
2.4 KiB
Plaintext

; Program initialization code for C02 programs
; Template for System Specific Code
ORG $0400 ;Program Start Address
;System Specific ASCII Key Mappings
DELKEY EQU $08 ;Delete/Backspace Key (Backspace)
ESCKEY EQU $1B ;Escape/Stop Key (Escape)
RTNKEY EQU $0D ;Return/Enter Key (Carriage Return)
NULKEY EQU $00 ;No Key was Pressed (Null)
;Zero Page Locations
SRCPTR EQU $10
DSTPTR EQU $12
BFRLO EQU $14 ;Work Buffer Pointer
BFRHI EQU $15
STKSAV EQU $1D ;Stack Pointer Storage
RDSEED EQU $1E ;Pseudo-RANDOM Seed
RANDOM EQU $1F ;Pseudo-RANDOM Number Storage
TEMP0 EQU $20 ;Temporary Storage
TEMP1 EQU $21
TEMP2 EQU $22
TEMP3 EQU $22
BLKBGN EQU $30 ;Block Start Address
BLKEND EQU $32 ;Block End Address
BLKPTR EQU $34 ;Block Pointer
BLKLEN EQU $36 ;Block Segment Length
STKSLO EQU $48 ;Stack Start Address
STKSHI EQU $49
STKELO EQU $4A ;Stack End Address
STKEHI EQU $4B
STKLO EQU $4C ;Stack Pointer
STKHI EQU $4D
;Memory Mapped I/O
IOBASE EQU $E000
IOINIT EQU IOBASE+0 ;Clear Terminal Window
IOPUTC EQU IOBASE+1 ;Put Character
IOPUTR EQU IOBASE+2 ;Put Raw Character
IOPUTH EQU IOBASE+3 ;Put as Hexadecimal Number
IOGETC EQU IOBASE+4 ;Get Character
IOPOSX EQU IOBASE+5 ;Set Cursor X Position
IOPOSY EQU IOBASE+6 ;Set Cursor Y Position
START: LDX #$FF ;Initialize Stack Pointer
TXS ;
STX IOINIT ;Clear Screen
JMP MAIN ;Execute Program
;Exit Program and Return to Monitor
EXIT: BRK ;Halt Debugger
;Read Character from Console
GETKEY EQU $FFE0 ;Emulator CHRIN Routine
;Poll Character from Keyboard
POLKEY: INC RDSEED ;Cycle the Random Seed
LDA IOGETC ;Code Read from Keyboard
RTS
;Wait for Character from Console
GETCHR: JSR POLKEY ;Usually calls PLKEY
BEQ GETCHR ; until a non-zero is returned
RTS
;Delete Previous Character
DELCHR: LDA #$08 ;Load Backspace into Accumulator
JMP PUTCHR ; and Print it
;Advance Character to Next line
NEWLIN: LDA #$0D ;Load Carriage Return
JSR PUTCHR ;And Print It
LDA #$0A ;Load Line Feed
;Print Character to Console
PUTCHR: STA IOPUTC ;Write Character to Screen
RTS
;Print Hexadecimal Digit
PRHEX: AND #$0F
ORA #'0'
BNE PUTCHR
;Print Hexadecimal Byte
PRBYTE: STA IOPUTH ;Put as Hexadecimal Number
RTS
INCLUDE "putstr.a02" ;PUTSTR routine