mirror of
https://github.com/RevCurtisP/C02.git
synced 2025-02-19 19:31:04 +00:00
Updated standard library include files
This commit is contained in:
parent
9bee7114fd
commit
11fbab1281
@ -46,7 +46,7 @@ STORY EQU $C3B3 ;Store Accumulator at Current Screen Position
|
||||
PRBLNK EQU $F94C ;Print 3 blanks
|
||||
PRBLNX EQU $F94C ;Print X blanks
|
||||
PRBLAX EQU $F94C ;Print character in A followed by X-1 blanks
|
||||
RDKEY EQU $FD0C ;Waits for keypress and return in A
|
||||
GETCHR EQU $FD0C ;Waits for keypress and return in A
|
||||
KEYIN EQU $FD1B ;Waits for keypress and cycle random-number generator
|
||||
RDCHAR EQU $FD35 ;Read keyboard (processing escapes)
|
||||
GETLIN EQU $FD6A ;Get Line from Keyboard into Input Buffer
|
||||
@ -74,13 +74,13 @@ PLKEY: LDA #0 ;Clear Accumulator
|
||||
PLKEYR: RTS
|
||||
|
||||
;Read Keyboard
|
||||
GETKEY JSR PLKEY ;Poll Keyboard
|
||||
GETKEY JSR POLKEY ;Poll Keyboard
|
||||
BEQ GETKEY ;Loop if No Key
|
||||
AND #$7F ;Strip High Bit
|
||||
RTS
|
||||
|
||||
;Print Character to Screen
|
||||
PRCHR: ORA #$80 ;Set High Bit
|
||||
PUTCHR ORA #$80 ;Set High Bit
|
||||
CMP #$E0 ;
|
||||
BCC PRCHRX ;If Lower Case
|
||||
AND #$1F ; Convert to Inverse
|
||||
@ -91,7 +91,7 @@ DELCHR: LDX #2 ;Two Characters Total
|
||||
LDA #$88 ;Load Backspace Character
|
||||
JSR PRBLAX ;Print Accumulator and X-1 Blanks
|
||||
LDA #$88 ;Load Backspace Character
|
||||
JMP PRCHR ;and Print it
|
||||
JMP PUTCHR ;and Print it
|
||||
|
||||
;Advance Character to Next line
|
||||
NEWLIN EQU CROUT ;Alias to Monitor Routine
|
||||
|
@ -27,10 +27,10 @@ void prbyte(); //Print Accumulator as Hexadadecimal number
|
||||
void prhex(); //Print Low Nybble of Accumulator as Hex Digit
|
||||
|
||||
//System Subroutines
|
||||
char plkey(); //Poll Console for character
|
||||
char rdkey(); //Wait for character from Console
|
||||
char polkey(); //Poll Console for character
|
||||
char getchr(); //Wait for character from Console
|
||||
char getkey(); //Read ASCII character from Console
|
||||
void newlin(); //Advance cursor to beginning of next line
|
||||
void prchr(); //Print ASCII character to Console
|
||||
char putchr(); //Print ASCII character to Console
|
||||
void setdst(); //Set Destination Pointer
|
||||
void setsrc(); //Set Source Pointer
|
||||
|
43
include/atari/color.a02
Normal file
43
include/atari/color.a02
Normal file
@ -0,0 +1,43 @@
|
||||
;Color and Character Assembly Language Equates for Atari 400 & 800
|
||||
|
||||
; Display Colors
|
||||
BLACK EQU $00 Black
|
||||
RED EQU $00 Red
|
||||
GREEN EQU $00 Green
|
||||
YELLOW EQU $00 Yellow
|
||||
BLUE EQU $00 Blue
|
||||
MAGENT EQU $00 Magenta
|
||||
CYAN EQU $00 Cyan
|
||||
WHITE EQU $00 White
|
||||
|
||||
;ASCII Screen Control Characters
|
||||
CHRBCK EQU $7E Backspace
|
||||
CHRBEL EQU $FD Beep (Buzzer)
|
||||
CHRCLR EQU $7D Clear Screen
|
||||
CHRDEL EQU $FE Delete (Character)
|
||||
CHRDWN EQU $1C Cursor Down
|
||||
CHRFLS EQU $00 Flash On
|
||||
CHRHOM EQU $00 Home (None)
|
||||
CHRINS EQU $FF Insert (Character)
|
||||
CHRLFT EQU $1E Cursor Left
|
||||
CHRRGT EQU $1F Cursor Right
|
||||
CHRRTN EQU $9B Return (End of Line)
|
||||
CHRTAB EQU $7F Tab
|
||||
CHRUP EQU $1B Cursor Up
|
||||
|
||||
;ATASCII Symbolic Characters
|
||||
CHRBLK EQU $A0 Block
|
||||
|
||||
;ASCII Box Drawing Characters
|
||||
BOXBLC EQU $0A Bottom Left Corner
|
||||
BOXBRC EQU $03 Bottom Right Corner
|
||||
BOXBCT EQU $18 Bottom to Cetter Tee
|
||||
BOXCTR EQU $13 Center Cross
|
||||
BOXHLN EQU $12 Horizontal Line
|
||||
BOXLCT EQU $01 Left To Center T)
|
||||
BOXRCT EQU $04 Right To Center T
|
||||
BOXTLC EQU $11 Top Left Corner
|
||||
BOXTRC EQU $05 Top Right Corner
|
||||
BOXTCT EQU $17 Top to Center T
|
||||
BOXVLN EQU $7C Vertical Line (|)
|
||||
|
22
include/atari/joystk.a02
Normal file
22
include/atari/joystk.a02
Normal file
@ -0,0 +1,22 @@
|
||||
;Joystick Assembly Language Module for Atari 400 & 800
|
||||
|
||||
JYSTKS EQU $02 ;Number of Joysticks
|
||||
|
||||
;Joystick Bit Masks
|
||||
JOYUP EQU $01 ;Bit 0 - Up
|
||||
JOYDN EQU $02 ;Bit 1 - Down
|
||||
JOYLF EQU $04 ;Bit 2 - Left
|
||||
JOYRT EQU $08 ;Bit 3 - Right
|
||||
JOYB0 EQU $10 ;Bit 4 - Button
|
||||
|
||||
;Read Joystick
|
||||
JOYSTK: CMP #JYSTKS ;If Invalid Joystick#
|
||||
BCS JOYSTZ ; Return Error
|
||||
EOR #$01 ;Invert Joystick Number
|
||||
TAX ;and Copy to X Register
|
||||
LDA $DC00,X ;Read Joystick
|
||||
EOR #$FF ;Invert and
|
||||
AND #$1F ;Mask Bits
|
||||
RTS
|
||||
JOYSTZ: LDA #$FF ;Return Error
|
||||
RTS
|
15
include/atari/joystk.h02
Normal file
15
include/atari/joystk.h02
Normal file
@ -0,0 +1,15 @@
|
||||
/* Joystick Module Header File for Atari 400 & 800 */
|
||||
|
||||
#define JYSTKS 4 //Number of Joysticks
|
||||
|
||||
#define JOYUP $01 //Bit 0 - Up
|
||||
#define JOYDN $02 //Bit 1 - Down
|
||||
#define JOYLF $04 //Bit 2 - Left
|
||||
#define JOYRT $08 //Bit 3 - Right
|
||||
#define JOYB0 $10 //Bit 4 - Button
|
||||
|
||||
/* Read Joystick State *
|
||||
* Args: n = Joystick Number *
|
||||
* Returns: Joystick Status *
|
||||
* $FF = Invalid Argument */
|
||||
char joystk();
|
21
include/atari/lgtpen.a02
Normal file
21
include/atari/lgtpen.a02
Normal file
@ -0,0 +1,21 @@
|
||||
;Lightpen Assembly Language Module for Atari 400 & 800
|
||||
|
||||
LGTPNS EQU #$FF ;Light Pen Status (Supported)
|
||||
|
||||
;Read Light Pen
|
||||
;Returns: A = X Position / 2
|
||||
; Y = Y Position
|
||||
; X = Trigger Status ($FF = Pressed)
|
||||
LGTPEN: LDX #0 ;Initialize X to FALSE (0)
|
||||
LDA $0284 ;Check Joystick Button
|
||||
EOR #$FF ;Invert and
|
||||
AND #$01 ;Mask Bits
|
||||
BEQ LGTPET ;If Trigger Pulled, Set X to $FF
|
||||
LDA $0278 ;Read Joystick Switches
|
||||
EOR #$FF ;Invert and
|
||||
AND #$0F ;Mask Bits
|
||||
BEQ LGTPEP ;If Trigger Pulled
|
||||
LGTPET: DEX ; Set X to TRUE ($FF)
|
||||
LGTPEP: LDY $0234 ;Read Y Position into Y
|
||||
LDA $0235 ;Read X Position into A
|
||||
RTS
|
5
include/atari/lgtpen.h02
Normal file
5
include/atari/lgtpen.h02
Normal file
@ -0,0 +1,5 @@
|
||||
/* Lightpen Module Header File for Atari 400 & 800 */
|
||||
|
||||
#define LGTPNS $FF //Light Pen Status (Supported)
|
||||
|
||||
char lgtpen(); //Read Light Pen
|
33
include/atari/paddle.a02
Normal file
33
include/atari/paddle.a02
Normal file
@ -0,0 +1,33 @@
|
||||
;Paddle Controller Constants and Functions for Atari 400 & 800
|
||||
|
||||
PADDLS EQU #$08 ;Maximum Numbers of Paddles
|
||||
|
||||
;Read Paddle
|
||||
;Args: A = Paddle #
|
||||
;Affects: X
|
||||
;Returns: A = Paddle Value
|
||||
; 0 and Carry Set if Paddle # Invalid
|
||||
PADDLE: CMP #PADDLS ;If Invalid Paddle #
|
||||
BCS BUTTOZ ; Return 0 & Carry Set
|
||||
TAX ;Copy Paddle # to X
|
||||
LDA $0270,X ;Read Paddle Shadow Register
|
||||
RTS
|
||||
|
||||
BUTTNS EQU #$04 ;Maximum Numbers of Paddle Buttons
|
||||
|
||||
;Read Paddle Button
|
||||
;Args: A = Button #
|
||||
;Affects: X,Y
|
||||
;Returns: A = $FF if Paddle Button Pressed
|
||||
; $00 if Paddle Button Not Pressed
|
||||
; Carry Set if Button Number Invalid
|
||||
BUTTON: CMP #BUTTNS ;If Button# >= # of Buttons
|
||||
BCS BUTTOZ ; Return FALSE & Carry Set
|
||||
TAX ;and Copy to X Register
|
||||
LDA $027C,Y ;Read Button Shadow Register
|
||||
AND #$01 ;Mask off Relevant Bit
|
||||
BNE BUTTOZ ;If Bit is 0
|
||||
LDA #$FF ; Return TRUE
|
||||
RTS ;Else
|
||||
BUTTOZ: LDA #$00 ; Return FALSE
|
||||
RTS
|
20
include/atari/paddle.h02
Normal file
20
include/atari/paddle.h02
Normal file
@ -0,0 +1,20 @@
|
||||
/* Psddle Controllers Header File for Atari 400 & 800 */
|
||||
|
||||
#define BUTTNS 4 //Number of Paddle Buttons
|
||||
#define PADDLS 4 //Number of Paddles
|
||||
|
||||
/* Get Paddle Button Status *
|
||||
* Args: b = Button Number *
|
||||
* Same as Paddle Number *
|
||||
* Returns: $FF if Button Pressed *
|
||||
* $00 if Not Pressed */
|
||||
void button();
|
||||
|
||||
/* Get Paddle Status *
|
||||
* Args: p = Paddle Number *
|
||||
* 0 - Port 1 Paddle X *
|
||||
* 1 - Port 1 Paddle Y *
|
||||
* 2 - Port 2 Paddle X *
|
||||
* 3 - Port 2 Paddle Y *
|
||||
* Returns: Paddle Value (0-255) */
|
||||
void paddle();
|
@ -1,4 +1,5 @@
|
||||
;Screen Control Assembly Language Routines for Oric-1
|
||||
;Screen Control Assembly Language Routines for Atari 400 & 800
|
||||
;*** Incomplete - Copied from Oric-1 ***
|
||||
|
||||
; Display Colors
|
||||
BLACK EQU $00 Black
|
||||
|
@ -90,20 +90,4 @@ NEWLIN: LDX #0 ;Store 0
|
||||
STX $D3 ;in Cursor Column and
|
||||
JMP $E87C ;Execute NXTLINE Routine
|
||||
|
||||
;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
|
||||
INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routine
|
||||
|
@ -1,6 +1,6 @@
|
||||
;Joystick Assembly Language Module for C64
|
||||
|
||||
JYSTKS EQU $02 ;Number of Joysticks
|
||||
JYSTKS EQU $04 ;Number of Joysticks
|
||||
|
||||
;Joystick Bit Masks
|
||||
JOYUP EQU $01 ;Bit 0 - Up
|
||||
@ -12,11 +12,14 @@ JOYB0 EQU $10 ;Bit 4 - Button
|
||||
;Read Joystick
|
||||
JOYSTK: CMP #JYSTKS ;If Invalid Joystick#
|
||||
BCS JOYSTZ ; Return Error
|
||||
EOR #$01 ;Invert Joystick Number
|
||||
TAX ;and Copy to X Register
|
||||
LDA $DC00,X ;Read Joystick
|
||||
TAX ;Copy Joystick # to X
|
||||
LDA $0284,X ;Read Trigger Control Register
|
||||
ROR ;Move Bit 0 into Carry
|
||||
LDA $DC00,X ;Read Joystick Shadow Register
|
||||
EOR #$FF ;Invert and
|
||||
AND #$1F ;Mask Bits
|
||||
RTS
|
||||
AND #$0F ;Mask Bits
|
||||
BCS JOYSTX ;If Trigger Pressed
|
||||
ORA #$10 ; Set Bit 4
|
||||
HOYSTX: RTS
|
||||
JOYSTZ: LDA #$FF ;Return Error
|
||||
RTS
|
||||
|
88
include/comm.h02
Normal file
88
include/comm.h02
Normal file
@ -0,0 +1,88 @@
|
||||
/***********************************************
|
||||
* comm - Serial Communication Library for C02 *
|
||||
***********************************************/
|
||||
|
||||
/* Command Register Constants */
|
||||
#define BR50 = $01 //Baud Rate - 50 BPS
|
||||
#define BR75 = $02 //Baud Rate - 75 BPS
|
||||
#define BR110 = $03 //Baud Rate - 110 BPS
|
||||
#define BR134 = $04 //Baud Rate - 134 BPS
|
||||
#define BR150 = $05 //Baud Rate - 140 BPS
|
||||
#define BR300 = $06 //Baud Rate - 300 BPS
|
||||
#define BR600 = $07 //Baud Rate - 300 BPS
|
||||
#define BR1200 = $08 //Baud Rate - 1200 BPS
|
||||
#define BR1800 = $09 //Baud Rate - 1800 BPS
|
||||
#define BR2400 = $0A //Baud Rate - 2400 BPS
|
||||
#define BR4800 = $0B //Baud Rate - 4800 BPS
|
||||
#define BR9600 = $0C //Baud Rate - 9600 BPS
|
||||
|
||||
#define SBITS1 = $00 //1 Stop Bit
|
||||
#define SBITS2 = $80 //2 Stop Bits
|
||||
|
||||
#define WRDLN5 = $60 //Word Length - 5 Bits
|
||||
#define WRDLN6 = $40 //Word Length - 5 Bits
|
||||
#define WRDLN7 = $20 //Word Length - 5 Bits
|
||||
#define WRDLN8 = $00 //Word Length - 5 Bits
|
||||
|
||||
/* Control Register Constants */
|
||||
#define PTYOFF = $00 //Parity - Disable
|
||||
#define PTYODD = $01 //Parity - Odd
|
||||
#define PTYEVN = $02 //Parity - Even
|
||||
#define PTYMRK = $03 //Parity - Mark
|
||||
#define PTYSPC = $04 //Parity - Space
|
||||
|
||||
#define DPXFUL = $00 //Duplex - Full
|
||||
#define DPXHLF = $80 //Duplex - Half
|
||||
|
||||
#define XLTNON = $00 //No Translation
|
||||
#define XTLASC = $10 //ASCII Translation
|
||||
|
||||
#define LFNONE = $00 //No LF after CR
|
||||
#define LFSEND = $40 //Send LF after CR
|
||||
|
||||
#define SHKSFT = $00 //Handshake - Software
|
||||
#define SHKHRD = $80 //Handshake - Hardware
|
||||
|
||||
/* Return Serial Buffer Status *
|
||||
* Args: fp - file pointer *
|
||||
* Returns: tuple: number of characters in *
|
||||
input buffer and output buffer */
|
||||
char cbffrs();
|
||||
|
||||
/* Close Serial Port *
|
||||
* Args: fp - file pointer *
|
||||
* Returns: 0 if successful *
|
||||
* 255 if error */
|
||||
char cclose();
|
||||
|
||||
/* Get Serial Port Error Status *
|
||||
* Returns: Error Code *
|
||||
* 0 if No Error */
|
||||
char cerror();
|
||||
|
||||
/* Read Character from Serial Port *
|
||||
* Args: fp - file pointer *
|
||||
* Returns: character read */
|
||||
char cgetc();
|
||||
|
||||
/* Open Serial Port for Communication *
|
||||
* Args: prt - Serial Port Number *
|
||||
* cmd - Command Register *
|
||||
* ctl - Control Register *
|
||||
* Returns: File Pointer for Opened Port *
|
||||
* 0 if Error */
|
||||
char copen();
|
||||
|
||||
/* Write Character to Serial Port *
|
||||
* Args: fp - file pointer *
|
||||
* c - character to write *
|
||||
* Returns: 0 if successful *
|
||||
255 if error */
|
||||
char cputc();
|
||||
|
||||
/* Write String to Serial Port *
|
||||
* Args: fp - file pointer *
|
||||
* &s - string to write *
|
||||
* Returns: 0 if successful *
|
||||
255 if error */
|
||||
char cputs();
|
@ -42,6 +42,14 @@ START: NOP ;System specific initialization code
|
||||
STX STKSAV ; the Stack Pointer should be preserved
|
||||
JMP MAIN ;Execute Program
|
||||
|
||||
|
||||
;Exit Program and Return to Operating System or Monitor
|
||||
EXIT: BRK ;Usually BRK if returning to Monitor
|
||||
LDX STKSAV ;If an RTS is used to return to the Operating System,
|
||||
TXS ; the Stack Pointer should be restored to original state
|
||||
RTS ; in case program exits in the middle of a Function
|
||||
JMP WSTART ;Or it may just execute the BASIC Warm Start Routine
|
||||
|
||||
;Poll Character from Keyboard
|
||||
PLKEY: INC RDSEED ;Cycle the Random Seed (if not provided by system)
|
||||
NOP ;Code Read from Keyboad
|
||||
@ -52,8 +60,8 @@ GETKEY; ;Usually Drops into RDKEY, but may need to call RDKEY
|
||||
; then clean/convert returned value (e.g. Apple-1)
|
||||
|
||||
;Wait for Character from Console
|
||||
RDKEY: JSR PLKEY ;Usually calls PLKEY
|
||||
BEQ RDKEY ; until a non-zero is returned
|
||||
GETCHR: JSR POLKEY ;Usually calls POLKEY
|
||||
BEQ GETCHR ; until a non-zero is returned
|
||||
RTS
|
||||
|
||||
;Delete Previous Character
|
||||
@ -65,13 +73,19 @@ NEWLIN: RTS ;Code to move Cursor to beginning of next line
|
||||
;May emit Carriage Return, Line Feed, or both
|
||||
|
||||
;Print Character to Screen
|
||||
PRCHR: RTS ;Code to write ASCII character to Screen
|
||||
PUTCHR RTS ;Code to write ASCII character to Screen
|
||||
|
||||
;Exit Program and Return to Operating System or Monitor
|
||||
EXIT: BRK ;Usually BRK if returning to Monitor
|
||||
LDX STKSAV ;If an RTS is used to return to the Operating System,
|
||||
TXS ; the Stack Pointer should be restored to original state
|
||||
RTS ; in case program exits in the middle of a Function
|
||||
;Clear the Screen
|
||||
CLRSCR: RTS ;Code to Clear Screen
|
||||
|
||||
;Move Cursor to Specified Coordinates
|
||||
SETPOS: RTS ;Move Cursor to Column A, Row Y
|
||||
|
||||
;Get Cursor Position
|
||||
GETPOS: RTS ;Return Cursor Column in A, Row in Y
|
||||
|
||||
;Get Screen Size
|
||||
GETSIZ: RTS ;Return Screen Width in A, Height in Y
|
||||
|
||||
;Note: The following two functions replicate calls available
|
||||
;in the Apple-1 monitor and are included for test purposes
|
||||
@ -94,7 +108,7 @@ PRHEX: AND #$0F ;Strip High Nybb
|
||||
ADC #$90 ;Convert to $90-$99,$00-$05
|
||||
ADC #$40 ;Convert to $30-$39,$41-$46
|
||||
CLD ;Clear Decimal Flag
|
||||
JMP PRCHR ;Print Hex Digit and Return
|
||||
JMP PUTCHR ;Print Hex Digit and Return
|
||||
|
||||
;Alternate Code for Systems with Interrupts that don't CLD
|
||||
PRHEX: AND #$0F ;Strip High Nybble
|
||||
@ -102,4 +116,4 @@ PRHEX: AND #$0F ;Strip High Nybble
|
||||
BCC PRHEXC ;
|
||||
ADC #$06 ; Convert ':' to 'A'...
|
||||
PRHEXC: ADC #$30 ;Convert to ASCII Character
|
||||
JMP PRCHR ;Print Hex Digit and Return
|
||||
JMP PUTCHR ;Print Hex Digit and Return
|
||||
|
@ -34,10 +34,14 @@ char random; //Last Result of Pseudo-Random Number Generator
|
||||
char rdseed; //System Seed for Pseudo-Random Number Generator
|
||||
|
||||
//System Subroutines
|
||||
char plkey(); //Poll Console for character
|
||||
char rdkey(); //Wait for character from Console
|
||||
void delchr(); //Delete previous character
|
||||
char getkey(); //Read ASCII character from Console
|
||||
char getpos(); //Get Cursor Position
|
||||
char getsiz(); //Get Screen Size
|
||||
void newlin(); //Advance cursor to beginning of next line
|
||||
void prchr(); //Print ASCII character to Console
|
||||
char polkey(); //Poll Console for character
|
||||
char putchr(); //Print ASCII character to Console
|
||||
void prbyte(); //Print Accumulator as Hexadadecimal number
|
||||
void prhex(); //Print Low Nybble of Accumulator as Hex Digit
|
||||
char getchr(); //Wait for character from Console
|
||||
void setpos(); //Set Cursor Position
|
||||
|
24
include/intrpt.a02
Normal file
24
include/intrpt.a02
Normal file
@ -0,0 +1,24 @@
|
||||
;Interrupt Vector Manipulation Routines
|
||||
|
||||
;Interrupt Vectors
|
||||
NMILO EQU $FFFA ;Non-Maskable Interrupt
|
||||
NMIHI EQU $FFFB
|
||||
RSTLO EQU $FFFC ;Reset
|
||||
RSTHI EQU $FFFD
|
||||
IRQLO EQU $FFFE ;Maskable Interrupt
|
||||
IRQHI EQU $FFFF
|
||||
|
||||
;Set Non-Maskable Interrupt Handler
|
||||
SETNMI: STY NMIHI
|
||||
STX NMILO
|
||||
RTS
|
||||
|
||||
;Set Reset Handler
|
||||
SETRST: STY RSTHI
|
||||
STX RSTLO
|
||||
RTS
|
||||
|
||||
;Set Maskable Interrupt Handler
|
||||
SETIRQ: STY IRQHI
|
||||
STX IRQLO
|
||||
RTS
|
@ -1,39 +1,30 @@
|
||||
; c02 Program Initialization Code for Commodore Plus/4 & 16
|
||||
|
||||
;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)
|
||||
|
||||
;Zero Page Locations
|
||||
strlo EQU $FE ;String Pointer (stdio.asm)
|
||||
strhi EQU $FF ;
|
||||
STRLO EQU $FE ;String Pointer (stdio.asm)
|
||||
STRHI EQU $FF ;
|
||||
|
||||
;Other RAM Locations
|
||||
tbffr EQU $0333 ;Cassette I/O Buffer
|
||||
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
|
||||
VIDSCN EQU $0C00 ;Video Screen Memory Area
|
||||
CHRROM EQU $D000 ;Character Generator ROM
|
||||
VIDCLR EQU $0800 ;Color RAM
|
||||
|
||||
;Kernal Routines
|
||||
chrin EQU $FFCF ;Input Character to Channel
|
||||
chrout EQU $FFD2 ;Output Character to Channel
|
||||
getin EQU $FFE4 ;Read Character from Keyboard Buffer
|
||||
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)
|
||||
BASIC: DC $0C, $10 ; Pointer to Next Line (4108)
|
||||
DC $00, $00 ; Line Number (0)
|
||||
DC $9E ; SYS
|
||||
DC $20 ; ' '
|
||||
@ -41,46 +32,44 @@ basic: DC $0C, $10 ; Pointer to Next Line (4108)
|
||||
DC $00 ;End of Line Marker
|
||||
DC $00, $00 ;End of Basic Program
|
||||
|
||||
start: TSX ;Get Stack Pointer
|
||||
START: TSX ;Get Stack Pointer
|
||||
STX user15 ;and Save for Exit
|
||||
JMP main ;Execute Program
|
||||
|
||||
exit: LDX user15 ;Retrieve Saved Stack Pointer
|
||||
EXIT: LDX user15 ;Retrieve Saved Stack Pointer
|
||||
TXS ;and Restore It
|
||||
RTS ;Return to BASIC
|
||||
|
||||
;Poll Keyboard for Character
|
||||
plkey EQU getin ;Read Character from Keyboard Buffer
|
||||
POLKEY EQU $FFE4 ;Alias to Kernal Routine GETIN
|
||||
|
||||
;Get Character from Keyboard
|
||||
getkey:
|
||||
GETKEY EQU POLKEY
|
||||
|
||||
;Wait for Character from Keyboard
|
||||
rdkey: JSR plkey ;Poll Keyboard
|
||||
BEQ getkey ;If No Key, Loop
|
||||
GETCHR: JSR POLKEY ;Poll Keyboard
|
||||
BEQ GETCHR ;If No Key, Loop
|
||||
RTS
|
||||
|
||||
;Delete Previous Character
|
||||
delchr: RTS
|
||||
|
||||
;Advance Character to Next line
|
||||
newlin: LDA #$0D ;Load C/R into Accumulator
|
||||
NEWLIN: LDA #$0D ;Load C/R into Accumulator
|
||||
JMP PUTCHR
|
||||
|
||||
;Print Character to Console
|
||||
prchr EQU chrout ;
|
||||
PUTCHR EQU $FFD2 ;Alias to Kernal Routine CHROUT
|
||||
|
||||
;Delete Previous Character
|
||||
delchr: LDA #$9D ;Load Cursor Left into Accumulator
|
||||
JSR prchr ; and Print it
|
||||
DELCJR: LDA #$9D ;Load Cursor Left into Accumulator
|
||||
JSR PUTCHR ; and Print it
|
||||
LDA #$14 ;Load Delete into Accumulater
|
||||
JMP prchr ; and Print it
|
||||
JMP PUTCHR ; and Print it
|
||||
|
||||
;Advance Character to Next line
|
||||
newlin: LDA #$0D ;Load C/R into Accumulator
|
||||
JMP prchr ; and Print it
|
||||
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
|
||||
PRBYTE: PHA ;Save Accumulater
|
||||
LSR ;Shift Hi Nybble to Low Nybble
|
||||
LSR
|
||||
LSR
|
||||
@ -90,12 +79,12 @@ prbyte: PHA ;Save Accumulater
|
||||
; and fall into prhex
|
||||
|
||||
;Print Low Nybble as Hex Digit to Console
|
||||
prhex: AND #$0F ;Strip High Nybble
|
||||
PRHEX: AND #$0F ;Strip High Nybble
|
||||
CMP #$0A ;If Low Nybble >= 10
|
||||
BCC prhexc ;
|
||||
BCC PRHEXC ;
|
||||
ADC #$06 ; Convert ':' to 'A'...
|
||||
prhexc: ADC #$30 ;Convert to ASCII Character
|
||||
JMP prchr ;Print Hex Digit and Return
|
||||
PRHEXC: ADC #$30 ;Convert to ASCII Character
|
||||
JMP PUTCHR ;Print Hex Digit and Return
|
||||
|
||||
exit: RTS ;Return to Monitor
|
||||
EXIT: RTS ;Return to BASIC
|
||||
|
||||
|
@ -66,7 +66,7 @@ POLKEY: INC RDSEED ;Cycle the Random Seed
|
||||
GETKEY EQU POLKEY ;Aliased to POLKEY
|
||||
|
||||
;Wait for Character from Console
|
||||
GETCHR JSR POLKEY ;Calls POLKEY
|
||||
GETCHR: JSR GETKEY ;Calls GETKEY
|
||||
BEQ GETCHR ; until a non-zero is returned
|
||||
RTS
|
||||
|
||||
@ -81,32 +81,17 @@ NEWLIN EQU $CB9F ;Basic NEWLINE Routine ($CBF0 for ATMOS)
|
||||
; LDA #$0A ;Load Line Feed and fall through to PRCHR
|
||||
|
||||
;Print Character to Screen
|
||||
PUTCHR TAX ;Transfer Character to X Register
|
||||
PUTCHR: TAX ;Transfer Character to X Register
|
||||
JMP $F409 ;Execute VDU Routine
|
||||
|
||||
;Get End of Free Memory
|
||||
RAMTOP: LDX $A6 ;Load HIMEM LSB
|
||||
LDY $A7 ;Load HIMEM MSB
|
||||
RTS
|
||||
|
||||
;Exit Program and Return to Operating System or Monitor
|
||||
EXIT LDA #255 ;Set Caps Lock On
|
||||
EXIT: LDA #255 ;Set Caps Lock On
|
||||
STA $020C
|
||||
JMP $C003 ;BASIC Warm Start
|
||||
;
|
||||
;Note: The following two functions replicate calls available
|
||||
;in the Apple-1 monitor and are included for test purposes
|
||||
;They will likely be removed before the final release
|
||||
|
||||
;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
|
||||
INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines
|
||||
|
106
include/oric/color.a02
Normal file
106
include/oric/color.a02
Normal file
@ -0,0 +1,106 @@
|
||||
;Screen Control Assembly Language Routines for Oric-1
|
||||
|
||||
; Display Colors
|
||||
BLACK EQU 0 Black
|
||||
RED EQU 1 Red
|
||||
GREEN EQU 2 Green
|
||||
YELLOW EQU 3 Yellow
|
||||
BLUE EQU 4 Blue
|
||||
MAGENT EQU 5 Magenta
|
||||
CYAN EQU 6 Cyan
|
||||
WHITE EQU 7 White
|
||||
|
||||
;ASCII Screen Control Characters
|
||||
CHRBEL EQU $07 Beep (Bell)
|
||||
CHRBLK EQU $FF Block
|
||||
CHRCAP EQU $14 Caps Lock ()
|
||||
CHRCKR EQU $7E Checkerboard
|
||||
CHRCLR EQU $0C Clear (Form Feed)
|
||||
CHRDEL EQU $7F Delete (Delete)
|
||||
CHRDWN EQU $0A Cursor Down (Line Feed)
|
||||
CHRFLS EQU 140 Flash On
|
||||
CHRHOM EQU $00 Home (None)
|
||||
CHRINS EQU $00 Insert
|
||||
CHRLFT EQU $08 Cursor Left (Backspace)
|
||||
CHRRGT EQU $09 Cursor Right (Tab)
|
||||
CHRRTN EQU $0D Return (Carriage Return)
|
||||
CHRRVF EQU $00 Reverse Off
|
||||
CHRRVN EQU $00 Reverse On
|
||||
CHRUP EQU $0B Cursor Up (Vertical Tab)
|
||||
|
||||
;ASCII Box Drawing Characters
|
||||
BOXBLC EQU 43 Bottom Left Corner (+)
|
||||
BOXBRC EQU 43 Bottom Right Corner (+)
|
||||
BOXBCT EQU 45 Bottom to Cetter Tee (-)
|
||||
BOXCTR EQU 123 Center Cross (+)
|
||||
BOXHLN EQU 45 Horizontal Line (-)
|
||||
BOXLCT EQU 124 Left To Center T (|)
|
||||
BOXRCT EQU 124 Right To Center T (|)
|
||||
BOXTLC EQU 43 Top Left Corner (+)
|
||||
BOXTRC EQU 43 Top Right Corner (+)
|
||||
BOXTCT EQU 45 Top to Center T (-)
|
||||
BOXVLN EQU 124 Vertical Line (|)
|
||||
|
||||
;ASCII Color Code Table
|
||||
CLRCDS DC 128, 129, 130, 131, 132, 133, 134, 136
|
||||
|
||||
;Set Background Color
|
||||
;Args: A = Oric Color Code
|
||||
;Uses: TEMP0 - Temporary Storage
|
||||
;Affects: A,C,N,Z
|
||||
SCRBKG: AND $07 ;Strip High Bits
|
||||
ORA $90 ;Convert to Control Character
|
||||
JMP PRCHR ;Print Character and Return
|
||||
|
||||
;Set Text Color
|
||||
;Args: A = Vic color code
|
||||
;Affects: A,X,C,N,Z
|
||||
SCRTXT: AND $07 ;Strip High Bits
|
||||
ORA $80 ;Convert to Control Character
|
||||
JMP PRCHR ;Print Character and Return
|
||||
|
||||
;Clear Screen
|
||||
;Affects A,C,N,Z
|
||||
SCRCLR: LDA #CHRCLR ;Load Clear Screen Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor Down
|
||||
;Affects A,C,N,Z
|
||||
SCRDWN: LDA #CHRDWN ;Load Cursor Down Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor To Home Position
|
||||
;Affects A,C,N,Z
|
||||
SCRHOM: LDA #0 ;Column 0
|
||||
TAY ;Row 0
|
||||
BEQ SRCMOV ;Move Cursor
|
||||
|
||||
;Move Cursor Left
|
||||
;Affects A,C,N,Z
|
||||
SCRLFT: LDA #CHRLFT ;Load Cursor Left Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor Right
|
||||
;Affects A,C,N,Z
|
||||
SCRRGT: LDA #CHRRGT ;Load Cursor Left Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor Up
|
||||
;Affects A,C,N,Z
|
||||
SCRUP: LDA #CHRUP ;Load Cursor Left Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor to Specified Coordinates
|
||||
;Args: A = screen column (0 = top)
|
||||
; Y = screen line (0 = left)
|
||||
SCRMOV: RTS ;Not Yet Implemented
|
||||
|
||||
;Get Cursor Position
|
||||
;Returns: A = current cursor column
|
||||
; Y = current cursor row
|
||||
SCRPOS: RTS ;Not Yet Implemented
|
||||
|
||||
;Get Screen Size
|
||||
;Returns: A = width of screen in columns
|
||||
; Y = height of screen in rows
|
||||
SCRSIZ: RTS ;Not Yet Implemented
|
84
include/oric/color.h02
Normal file
84
include/oric/color.h02
Normal file
@ -0,0 +1,84 @@
|
||||
/*****************************************************
|
||||
* Screen Control Functions and Constants for Oric-1 *
|
||||
* INCOMPLETE: Copied from VIC20/C64 *
|
||||
*****************************************************/
|
||||
|
||||
/* Display Colors */
|
||||
enum {BLACK, WHITE, RED, CYAN, MAGENT, GREEN, BLUE, YELLOW};
|
||||
|
||||
/* PETSCII Color Code Table */
|
||||
const char clrtbl = {144, 5, 28, 159, 156, 30, 32, 158};
|
||||
|
||||
;PETSCII Screen Control Characters
|
||||
CHRCLR EQU 147 Clear (CLR)
|
||||
CHRDEL EQU 20 Delete (DEL)
|
||||
CHRDN EQU 17 Cursor Down
|
||||
CHRRTN EQU 13 Return
|
||||
CHRFN1 EQU 133 Function Key 1 (F1)
|
||||
CHRFN2 EQU 137 Function Key 2 (F2)
|
||||
CHRFN3 EQU 134 Function Key 3 (F3)
|
||||
CHRFN4 EQU 138 Function Key 4 (F4)
|
||||
CHRFN5 EQU 135 Function Key 5 (F5)
|
||||
CHRFN6 EQU 139 Function Key 6 (F6)
|
||||
CHRFN7 EQU 136 Function Key 7 (F7)
|
||||
CHRFN8 EQU 140 Function Key 8 (F8)
|
||||
CHRHOM EQU 19 Home
|
||||
CHRINS EQU 148 Insert
|
||||
CHRLFT EQU 157 Cursor Left
|
||||
CHRRGT EQU 29 Cursor Left
|
||||
CHRRVF EQU 146 Reverse Off
|
||||
CHRRVN EQU 18 Reverse On
|
||||
CHRUP EQU 145 Cursor Up
|
||||
|
||||
|
||||
/* PETSCII Box Drawing Characters */
|
||||
#define BOXBLC = 173 //Bottom Left Corner
|
||||
#define BOXBRC = 189 //Bottom Right Corner
|
||||
#define BOXBCT = 177 //Bottom to Cetter Tee
|
||||
#define BOXCTR = 123 //Center Cross
|
||||
#define BOXHLN = 96 //Horizontal Line
|
||||
#define BOXLCT = 171 //Left To Center T
|
||||
#define BOXRCT = 179 //Right To Center T
|
||||
#define BOXTLC = 176 //Top Left Corner
|
||||
#define BOXTRC = 174 //Top Right Corner
|
||||
#define BOXTCT = 178 //Top to Center T
|
||||
#define BOXVLN = 98 //Verical Line
|
||||
|
||||
/* Set Background Color *
|
||||
* Args: c - color */
|
||||
char scrbkg();
|
||||
|
||||
/* Clear Screen*/
|
||||
char scrclr();
|
||||
|
||||
/* Move Cursor Down */
|
||||
char scrdwn();
|
||||
|
||||
/* Move Cursor Home */
|
||||
char scrhom();
|
||||
|
||||
/* Move Cursor Left */
|
||||
char scrlft();
|
||||
|
||||
/* Move Cursor *
|
||||
* Args: col - column *
|
||||
* row - row */
|
||||
char scrmov();
|
||||
|
||||
/* Get Cursor Position *
|
||||
* Returns: column, row */
|
||||
char scrpos();
|
||||
|
||||
/* Move Cursor Right */
|
||||
char scrrgt();
|
||||
|
||||
/* Get Screen Size *
|
||||
* Returns: width, height */
|
||||
char scrsiz();
|
||||
|
||||
/* Set Text Color *
|
||||
* Args: c - color */
|
||||
char scrtxt();
|
||||
|
||||
/* Move Cursor Upt */
|
||||
char scrup();
|
20
include/prbyte.a02
Normal file
20
include/prbyte.a02
Normal file
@ -0,0 +1,20 @@
|
||||
;Assembly Header Include File for platforms
|
||||
;that do not have PRBYTE amnd PRHEX routines in ROM
|
||||
|
||||
;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
|
@ -38,14 +38,6 @@ STKEHI EQU $4F
|
||||
PUTCON EQU $F001 ;Write Character to Console
|
||||
GETCON EQU $F004 ;Read Character from Console
|
||||
|
||||
;Interrupt Vectors
|
||||
NMILO EQU $FFFA ;Non-Maskable Interrupt
|
||||
NMIHI EQU $FFFB
|
||||
RSTLO EQU $FFFC ;Reset
|
||||
RSTHI EQU $FFFD
|
||||
IRQLO EQU $FFFE ;Maskable Interrupt
|
||||
IRQHI EQU $FFFF
|
||||
|
||||
ORG $0200 ;START Directly Above Stack
|
||||
|
||||
START: JMP MAIN ;Execute Program
|
||||
@ -53,19 +45,20 @@ START: JMP MAIN ;Execute Program
|
||||
;Poll Character from Keyboard
|
||||
POLKEY: INC RDSEED ;Cycle the RANDOM Seed (if not provided by system)
|
||||
LDA GETCON ;Read Character from Console
|
||||
CMP #$E0
|
||||
BEQ POLKEX ;If Not E0 Extended Key
|
||||
ORA #$00 ; Set Status Flags
|
||||
RTS ; and Return
|
||||
POLKEX: LDA GETCON ;Else Get Second Byte
|
||||
ORA #$80 ; Set High Byte
|
||||
RTS ; and Return
|
||||
RTS
|
||||
|
||||
;Read Character from Console
|
||||
GETKEY ;Same As RDKEY
|
||||
GETKEY JSR POLKEY ;Get Raw Key Character
|
||||
CMP #$E0
|
||||
BEQ GETKEX ;If Not E0 Extended Key
|
||||
ORA #$00 ; Set Status Flags
|
||||
RTS ; and Return
|
||||
GETKEX: JSR POLKEY ;Else Get Second Byte
|
||||
ORA #$80 ; Set High Bit
|
||||
RTS ; and Return
|
||||
|
||||
;Wait for Character from Console
|
||||
GETCHR: JSR POLKEY ;Read Character from Console
|
||||
GETCHR: JSR GETKEY ;Read Character from Console
|
||||
BEQ GETCHR ; Loop if None Received
|
||||
RTS
|
||||
|
||||
@ -89,36 +82,4 @@ PUTCHR STA PUTCON ;Write Character to Console
|
||||
|
||||
EXIT: BRK ;Return to Monitor
|
||||
|
||||
;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 Nybb
|
||||
SED ;Set Decimal Flag for
|
||||
CLC ; Addition Wizardry
|
||||
ADC #$90 ;Convert to $90-$99,$00-$05
|
||||
ADC #$40 ;Convert to $30-$39,$41-$46
|
||||
CLD ;Clear Decimal Flag
|
||||
JMP PUTCHR ;Print Hex Digit and Return
|
||||
|
||||
;Set Non-Maskable Interrupt Handler
|
||||
SETNMI: STY NMIHI
|
||||
STX NMILO
|
||||
RTS
|
||||
|
||||
;Set Reset Handler
|
||||
SETRST: STY RSTHI
|
||||
STX RSTLO
|
||||
RTS
|
||||
|
||||
;Set Maskable Interrupt Handler
|
||||
SETIRQ: STY IRQHI
|
||||
STX IRQLO
|
||||
RTS
|
||||
INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines
|
||||
|
@ -16,17 +16,17 @@ START: JMP MAIN ;Execute Program
|
||||
;Delete Previous Character
|
||||
DELCHR: JSR DELCHB ;Print Backspace
|
||||
LDA #$20 ;Load Space into Accumulater
|
||||
JSR PRCHR ; and Print it
|
||||
JSR PUTCHR ; and Print it
|
||||
DELCHB: LDA #$08 ;Load Backspace into Accumulator
|
||||
BNE PRCHR ; and Print it
|
||||
BNE PUTCHR ; and Print it
|
||||
|
||||
;Advance Character to Next line
|
||||
NEWLIN: LDA #$0D ;Load C/R into Accumulator
|
||||
JSR PRCHR ; and Print it
|
||||
JSR PUTCHR ; and Print it
|
||||
LDA #$0A ;Load L/F into Accumulater
|
||||
; and fall into PRCHR
|
||||
;Print Character to Console
|
||||
PRCHR: STA PUTCON ;Write Character to Console
|
||||
PUTCHR STA PUTCON ;Write Character to Console
|
||||
RTS
|
||||
|
||||
;Poll Keyboard for Keypress
|
||||
@ -34,8 +34,8 @@ PLKEY: LDA GETCON ;Read Character from Console
|
||||
RTS
|
||||
|
||||
;Wait for Character from Console
|
||||
RDKEY: JSR PLKEY ;Read Character from Console
|
||||
BEQ RDKEY ; Loop if None Received
|
||||
GETCHR: JSR POLKEY ;Read Character from Console
|
||||
BEQ GETCHR ; Loop if None Received
|
||||
RTS
|
||||
|
||||
EXIT: BRK ;Return to Monitor
|
||||
|
@ -11,8 +11,8 @@ char getc; //Read Character from Console
|
||||
//System Subroutines
|
||||
void newlin(); //Advance cursor to beginning of next line
|
||||
void delchr(); //Delete previous character
|
||||
char plkey(); //Poll Console for character
|
||||
char rdkey(); //Wait for character from Console
|
||||
char polkey(); //Poll Console for character
|
||||
char getchr(); //Wait for character from Console
|
||||
char getkey(); //Read ASCII character from Console
|
||||
void prchr(); //Print ASCII character to Console
|
||||
char putchr(); //Print ASCII character to Console
|
||||
|
||||
|
@ -55,26 +55,26 @@ PLKEYX: RTS
|
||||
GETKEY ;Same As RDKEY
|
||||
|
||||
;Wait for Character from Console
|
||||
RDKEY: JSR PLKEY ;Read Character from Console
|
||||
BEQ RDKEY ; Loop if None Received
|
||||
GETCHR: JSR POLKEY ;Read Character from Console
|
||||
BEQ GETCHR ; Loop if None Received
|
||||
RTS
|
||||
|
||||
;Delete Previous Character
|
||||
DELCHR: LDA #$08 ;Load Backspace into Accumulator
|
||||
JSR PRCHR ; and Print it
|
||||
JSR PUTCHR ; and Print it
|
||||
LDA #$20 ;Load Space into Accumulater
|
||||
JSR PRCHR ; and Print it
|
||||
JSR PUTCHR ; and Print it
|
||||
LDA #$08 ;Load Backspace into Accumulator
|
||||
JMP PRCHR ; and Print it
|
||||
JMP PUTCHR ; and Print it
|
||||
|
||||
;Advance Character to Next line
|
||||
NEWLIN: LDA #$0D ;Load C/R into Accumulator
|
||||
JSR PRCHR ; and Print it
|
||||
JSR PUTCHR ; and Print it
|
||||
LDA #$0A ;Load L/F into Accumulater
|
||||
; and fall into PRCHR
|
||||
|
||||
;Print Character to Console
|
||||
PRCHR: STA PUTCON ;Write Character to Console
|
||||
PUTCHR STA PUTCON ;Write Character to Console
|
||||
RTS
|
||||
|
||||
EXIT: BRK ;Return to Monitor
|
||||
@ -96,4 +96,4 @@ PRHEX: AND #$0F ;Strip High Nybb
|
||||
ADC #$90 ;Convert to $90-$99,$00-$05
|
||||
ADC #$40 ;Convert to $30-$39,$41-$46
|
||||
CLD ;Clear Decimal Flag
|
||||
JMP PRCHR ;Print Hex Digit and Return
|
||||
JMP PUTCHR ;Print Hex Digit and Return
|
||||
|
27
include/templates/keybrd.a02
Normal file
27
include/templates/keybrd.a02
Normal file
@ -0,0 +1,27 @@
|
||||
;Keyboard Assembly Language Equates for Oric-1
|
||||
|
||||
;ASCII Keyboard Codes
|
||||
KEYBCK EQU $00 Backspace
|
||||
KEYBRK EQU $03 Break
|
||||
KEYCLR EQU $0C Clear
|
||||
KEYCPY EQU $0C Copy (Acorn Atom)
|
||||
KEYDEL EQU $7F Delete
|
||||
KEYDN EQU $0A Cursor Down
|
||||
KEYESC EQU $1B Escape
|
||||
KEYFN1 EQU $00 Function Key 1
|
||||
KEYFN2 EQU $00 Function Key 2
|
||||
KEYFN3 EQU $00 Function Key 3
|
||||
KEYFN4 EQU $00 Function Key 4
|
||||
KEYFN5 EQU $00 Function Key 5
|
||||
KEYFN6 EQU $00 Function Key 6
|
||||
KEYFN7 EQU $00 Function Key 7
|
||||
KEYFN8 EQU $00 Function Key 8
|
||||
KEYFN9 EQU $00 Function Key 9
|
||||
KEYFNA EQU $00 Function Key 10
|
||||
KEYHOM EQU $00 Home
|
||||
KEYINS EQU $00 Insert
|
||||
KEYLFT EQU $08 Cursor Left
|
||||
KEYRGT EQU $09 Cursor Right
|
||||
KEYRTN EQU $0D Return
|
||||
KEYTAB EQU $09 Tab
|
||||
KEYUP EQU $0B Cursor Up
|
@ -95,20 +95,4 @@ NEWLIN: LDX #0 ;Store 0
|
||||
STX $D3 ;in Cursor Column and
|
||||
JMP $E8C3 ;Execute NXTLINE Routine
|
||||
|
||||
;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
|
||||
INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines
|
124
include/vic/color.a02
Normal file
124
include/vic/color.a02
Normal file
@ -0,0 +1,124 @@
|
||||
;Screen Control Assembly Lanuage Routines for C02
|
||||
|
||||
;Vic Display Colors
|
||||
BLACK EQU 0 Black
|
||||
WHITE EQU 1 White
|
||||
RED EQU 2 Red
|
||||
CYAN EQU 3 Cyan
|
||||
MAGENT EQU 4 Purple
|
||||
GREEN EQU 5 Green
|
||||
BLUE EQU 6 Blue
|
||||
YELLOW EQU 7 Yellow
|
||||
|
||||
;PETSCII Screen Control Characters
|
||||
CHRCLR EQU 147 Clear (CLR)
|
||||
CHRDEL EQU 20 Delete (DEL)
|
||||
CHRDN EQU 17 Cursor Down
|
||||
CHRRTN EQU 13 Return
|
||||
CHRFN1 EQU 133 Function Key 1 (F1)
|
||||
CHRFN2 EQU 137 Function Key 2 (F2)
|
||||
CHRFN3 EQU 134 Function Key 3 (F3)
|
||||
CHRFN4 EQU 138 Function Key 4 (F4)
|
||||
CHRFN5 EQU 135 Function Key 5 (F5)
|
||||
CHRFN6 EQU 139 Function Key 6 (F6)
|
||||
CHRFN7 EQU 136 Function Key 7 (F7)
|
||||
CHRFN8 EQU 140 Function Key 8 (F8)
|
||||
CHRHOM EQU 19 Home
|
||||
CHRINS EQU 148 Insert
|
||||
CHRLFT EQU 157 Cursor Left
|
||||
CHRRGT EQU 29 Cursor Left
|
||||
CHRRVF EQU 146 Reverse Off
|
||||
CHRRVN EQU 18 Reverse On
|
||||
CHRUP EQU 145 Cursor Up
|
||||
|
||||
;PETSCII Box Drawing Characters
|
||||
BOXBLC EQU 173 Bottom Left Corner
|
||||
BOXBRC EQU 189 Bottom Right Corner
|
||||
BOXBCT EQU 177 Bottom to Cetter Tee
|
||||
BOXCTR EQU 123 Center Cross
|
||||
BOXHLN EQU 96 Horizontal Line
|
||||
BOXLCT EQU 171 Left To Center T
|
||||
BOXRCT EQU 179 Right To Center T
|
||||
BOXTLC EQU 176 Top Left Corner
|
||||
BOXTRC EQU 174 Top Right Corner
|
||||
BOXTCT EQU 178 Top to Center T
|
||||
BOXVLN EQU 98 Verical Line
|
||||
|
||||
;PETSCII Color Code Table
|
||||
CLRCDS DC 144, 5, 28, 159, 156, 30, 32, 158
|
||||
|
||||
;Set Background Color
|
||||
;Args: A = Vic Color Code
|
||||
;Uses: TEMP0 - Temporary Storage
|
||||
;Affects: A,C,N,Z
|
||||
SCRBKG: LSR ;Shift Color Code 4 Bits Left
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA TEMP0 ;Save it
|
||||
LDA $900F ;Read VIC Color Control Register
|
||||
AND #$15 ;Strip Existing Backround Color
|
||||
ORA ;Add in Background Color
|
||||
STA $900F ;Write back to VIC Chip
|
||||
RTS
|
||||
|
||||
;Set Text Color
|
||||
;Args: A = Vic color code
|
||||
;Affects: A,X,C,N,Z
|
||||
SCRTXT: TAX ;Transfer Color Code to Index
|
||||
LDA CLRTBL,X ;Load PETSCII Color Control Character
|
||||
JMP PRCHR ;Print Character and Return
|
||||
|
||||
;Clear Screen
|
||||
;Affects A,C,N,Z
|
||||
SCRCLR: LDA #CLEAR ;Load Clear Screen Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor Down
|
||||
;Affects A,C,N,Z
|
||||
SCRDWN: LDA #DOWN ;Load Cursor Down Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor To Home Position
|
||||
;Affects A,C,N,Z
|
||||
SRCHOM: LDA #HOME ;Load Cursor Home Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor Left
|
||||
;Affects A,C,N,Z
|
||||
SCRLFT: LDA #LEFT ;Load Cursor Left Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor Right
|
||||
;Affects A,C,N,Z
|
||||
SCRRGT: LDA #RIGHT ;Load Cursor Left Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor Up
|
||||
;Affects A,C,N,Z
|
||||
SCRUP: LDA #UP ;Load Cursor Left Character
|
||||
JMP PRCHR ;Print it and Return
|
||||
|
||||
;Move Cursor to Specified Coordinates
|
||||
;Args: A = screen column (0 = top)
|
||||
; Y = screen line (0 = left)
|
||||
SCRMOV: TAX ;Transfer Column to X Register
|
||||
CLC ;Clear Carry Flag
|
||||
JMP $FFF0 ;Call PLOT Kernal Routine and Return
|
||||
|
||||
;Get Cursor Position
|
||||
;Returns: A = current cursor column
|
||||
; Y = current cursor row
|
||||
; X = current cursor column
|
||||
SCRPOS: SEC ;Set Carry Flag
|
||||
JSR $FFF0 ;Call PLOT Kernal Routine
|
||||
TXA ;Transfer Column to Accumulator
|
||||
RTS
|
||||
|
||||
;Get Screen Size
|
||||
;Returns: A = width of screen in columns
|
||||
; Y = height of screen in rows
|
||||
; X = width of screen in columns
|
||||
SCRSIZ: JSR $FFED ;Call SCREEN Kernal Routine
|
||||
TXA ;Transfer Width to Accumulator
|
||||
RTS
|
83
include/vic/color.h02
Normal file
83
include/vic/color.h02
Normal file
@ -0,0 +1,83 @@
|
||||
/*****************************************************
|
||||
* Screen Control Functions and Constants for VIC-20 *
|
||||
*****************************************************/
|
||||
|
||||
/* Display Colors */
|
||||
enum {BLACK, WHITE, RED, CYAN, MAGENT, GREEN, BLUE, YELLOW};
|
||||
|
||||
/* PETSCII Color Code Table */
|
||||
const char clrtbl = {144, 5, 28, 159, 156, 30, 32, 158};
|
||||
|
||||
;PETSCII Screen Control Characters
|
||||
CHRCLR EQU 147 Clear (CLR)
|
||||
CHRDEL EQU 20 Delete (DEL)
|
||||
CHRDN EQU 17 Cursor Down
|
||||
CHRRTN EQU 13 Return
|
||||
CHRFN1 EQU 133 Function Key 1 (F1)
|
||||
CHRFN2 EQU 137 Function Key 2 (F2)
|
||||
CHRFN3 EQU 134 Function Key 3 (F3)
|
||||
CHRFN4 EQU 138 Function Key 4 (F4)
|
||||
CHRFN5 EQU 135 Function Key 5 (F5)
|
||||
CHRFN6 EQU 139 Function Key 6 (F6)
|
||||
CHRFN7 EQU 136 Function Key 7 (F7)
|
||||
CHRFN8 EQU 140 Function Key 8 (F8)
|
||||
CHRHOM EQU 19 Home
|
||||
CHRINS EQU 148 Insert
|
||||
CHRLFT EQU 157 Cursor Left
|
||||
CHRRGT EQU 29 Cursor Left
|
||||
CHRRVF EQU 146 Reverse Off
|
||||
CHRRVN EQU 18 Reverse On
|
||||
CHRUP EQU 145 Cursor Up
|
||||
|
||||
|
||||
/* PETSCII Box Drawing Characters */
|
||||
#define BOXBLC = 173 //Bottom Left Corner
|
||||
#define BOXBRC = 189 //Bottom Right Corner
|
||||
#define BOXBCT = 177 //Bottom to Cetter Tee
|
||||
#define BOXCTR = 123 //Center Cross
|
||||
#define BOXHLN = 96 //Horizontal Line
|
||||
#define BOXLCT = 171 //Left To Center T
|
||||
#define BOXRCT = 179 //Right To Center T
|
||||
#define BOXTLC = 176 //Top Left Corner
|
||||
#define BOXTRC = 174 //Top Right Corner
|
||||
#define BOXTCT = 178 //Top to Center T
|
||||
#define BOXVLN = 98 //Verical Line
|
||||
|
||||
/* Set Background Color *
|
||||
* Args: c - color */
|
||||
char scrbkg();
|
||||
|
||||
/* Clear Screen*/
|
||||
char scrclr();
|
||||
|
||||
/* Move Cursor Down */
|
||||
char scrdwn();
|
||||
|
||||
/* Move Cursor Home */
|
||||
char scrhom();
|
||||
|
||||
/* Move Cursor Left */
|
||||
char scrlft();
|
||||
|
||||
/* Move Cursor *
|
||||
* Args: col - column *
|
||||
* row - row */
|
||||
char scrmov();
|
||||
|
||||
/* Get Cursor Position *
|
||||
* Returns: column, row */
|
||||
char scrpos();
|
||||
|
||||
/* Move Cursor Right */
|
||||
char scrrgt();
|
||||
|
||||
/* Get Screen Size *
|
||||
* Returns: width, height */
|
||||
char scrsiz();
|
||||
|
||||
/* Set Text Color *
|
||||
* Args: c - color */
|
||||
char scrtxt();
|
||||
|
||||
/* Move Cursor Upt */
|
||||
char scrup();
|
Loading…
x
Reference in New Issue
Block a user