mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-28 10:51:14 +00:00
91 lines
2.7 KiB
Plaintext
91 lines
2.7 KiB
Plaintext
; c02 Program Initialization Code for Commodore Plus/4 & 16
|
|
|
|
;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)
|
|
|
|
;Zero Page Locations
|
|
STRLO EQU $FE ;String Pointer (stdio.asm)
|
|
STRHI EQU $FF ;
|
|
|
|
;Other RAM Locations
|
|
TBFFR EQU $0333 ;Cassette I/O Buffer
|
|
|
|
;Video RAM and ROM
|
|
VIDSCN EQU $0C00 ;Video Screen Memory Area
|
|
CHRROM EQU $D000 ;Character Generator ROM
|
|
VIDCLR EQU $0800 ;Color RAM
|
|
|
|
;Kernal Routines
|
|
CHROUT EQU $FFD2 ;Output Character to Channel
|
|
GETIN EQU $FFE4 ;Read Character from Keyboard Buffer
|
|
CHRIN EQU $FFCF ;Input Character to Channel
|
|
|
|
;Machine Language Basic Stub
|
|
ORG $1001 ;Start
|
|
BASIC: DC $0C, $10 ; Pointer to Next Line (4108)
|
|
DC $00, $00 ; Line Number (0)
|
|
DC $9E ; SYS
|
|
DC $20 ; ' '
|
|
DC $34, $31, $31 ,$30 ; "4110"
|
|
DC $00 ;End of Line Marker
|
|
DC $00, $00 ;End of Basic Program
|
|
|
|
START: TSX ;Get Stack Pointer
|
|
STX user15 ;and Save for Exit
|
|
JMP main ;Execute Program
|
|
|
|
EXIT: LDX user15 ;Retrieve Saved Stack Pointer
|
|
TXS ;and Restore It
|
|
RTS ;Return to BASIC
|
|
|
|
;Poll Keyboard for Character
|
|
POLKEY EQU $FFE4 ;Alias to Kernal Routine GETIN
|
|
|
|
;Get Character from Keyboard
|
|
GETKEY EQU POLKEY
|
|
|
|
;Wait for Character from Keyboard
|
|
GETCHR: JSR POLKEY ;Poll Keyboard
|
|
BEQ GETCHR ;If No Key, Loop
|
|
RTS
|
|
|
|
;Advance Character to Next line
|
|
NEWLIN: LDA #$0D ;Load C/R into Accumulator
|
|
JMP PUTCHR
|
|
|
|
;Print Character to Console
|
|
PUTCHR EQU $FFD2 ;Alias to Kernal Routine CHROUT
|
|
|
|
;Delete Previous Character
|
|
DELCJR: LDA #$9D ;Load Cursor Left into Accumulator
|
|
JSR PUTCHR ; and Print it
|
|
LDA #$14 ;Load Delete into Accumulater
|
|
JMP PUTCHR ; and Print it
|
|
|
|
;Advance Character to Next line
|
|
NEWLIN: LDA #$0D ;Load C/R into Accumulator
|
|
JMP PUTCHR ; 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 PUTCHR ;Print Hex Digit and Return
|
|
|
|
EXIT: RTS ;Return to BASIC
|
|
|