mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-28 10:51:14 +00:00
96 lines
2.4 KiB
Plaintext
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
|
|
|
|
|
|
|