Beginning of assembly language implementation

This commit is contained in:
Bill Chatfield 2018-12-29 15:51:43 -05:00
parent 332f067b2e
commit 670f41833e
3 changed files with 208 additions and 0 deletions

20
asm/copy.s Normal file
View File

@ -0,0 +1,20 @@
* Program: Copy file
* Author: Bill Chatfield
use symbols
use macros
* Get source file name
getSource
puts sourcePrompt
* Get destination directory
>>> puts;destPrompt
* Variables
sourcePrompt asc "File to copy:",00
destPrompt asc "Directory to copy it to:",00

124
asm/macros.s Normal file
View File

@ -0,0 +1,124 @@
********************************
* *
* PUTS MACRO *
* *
* APPLESOFT MUST BE IN MEMORY *
* BECAUSE THE STROUT SUB IS *
* USED. *
* *
* X & Y ARE PRESERVED *
* *
* ]1 - ADDRESS OF STRING *
* *
********************************
PUTS MAC
TYA ;PRESERVE Y
PHA
LDA #<]1 ;PUT LOW BYTE INTO A
LDY #>]1 ;PUT HIGH BYTE INTO Y
JSR STROUT ;CALL APPLESOFT'S STRING PRINT
PLA ;RESTORE Y
TAY
<<<
********************************
* *
* PUTS80 MACRO *
* *
* IN 80-COL MODE EVEN COLUMNS *
* ARE IN AUXILIARY MEMORY *
* WHILE ODD COLUMNS ARE IN *
* MAIN MEMORY. *
* *
* ]1 - CHARACTER TO DISPLAY *
* ]2 - DESIRED COLUMN *
* *
********************************
PUTS80 MAC
TYA ;MOVE Y TO A
PHA ;SAVE Y VALUE ON STACK
SEI ;DISABLE INTERRUPTS
STA STOR80ON ;ENABLE MAIN/AUX MEM SWITCHING
LDA ]2 ;LOAD 80-COL HORIZ CURSOR POSITN
LSR A ;DIVIDE BY 2 TO CALC PHYS COLUMN
BCC AUXMEM ;IF EVEN, COLUMN IS IN AUX MEM
MAINMEM STA PAGE2OFF ;TURN OFF AUX MEM, MAIN MEM ON
JMP CONTINUE ;AVOID AUX MEM ENABLE
AUXMEM STA PAGE2ON ;TURN ON AUX MEM, MAIN MEM OFF
CONTINUE TAY ;MOVE CURSOR POSITION TO Y
LDA ]1 ;LOAD THE CHARACTER TO DISPLAY
STA (BASL),Y ;DISPLAY THE CHARACTER
STA PAGE2OFF ;TURN MAIN MEM BACK ON
CLI ;ENABLE INTERRUPTS
PLA ;PULL Y VALUE FROM STACK
TAY ;RESTORE Y VALUE
<<<
********************************
* *
* GETKEY MACRO *
* *
********************************
GETKEY MAC
BIT KBD ;TEST FOR KEY PRESSED
BPL GETKEY ;WAIT FOR KEY PRESSED
LDA KBD ;GET THE KEY THAT WAS PRESSED
BIT KBDSTRB ;CLEAR KEYBOARD STROBE
STA ]1 ;STORE THE KEY THAT WAS READ
<<<
********************************
* *
* PUTSCUSTOM MACRO *
* *
********************************
PUTSCUSTOM MAC
TYA ;PRESERVE Y
PHA
LDY #0 ;PREPARE LOOP INDEX
]NEXTCHR LDA ]1,Y ;LOAD A CHARACTER
CMP #0 ;CHECK FOR END OF STRING
BEQ FINISH
JSR COUT
INY
JMP ]NEXTCHR
FINISH PLA ;RESTORE Y
TAY
<<<
********************************
* *
* PAUSE Macro *
* *
********************************
PAUSE MAC
PUTS ]1
JSR RDKEY
JSR CROUT
<<<
********************************
* *
* ADD_TO_ADDR MACRO *
* *
********************************
ADD_TO_ADDR MAC
LDA ]1
CLC
ADC ]2
STA ]1
BCC DONE
INC ]1+1
DONE <<<

64
asm/symbols.s Normal file
View File

@ -0,0 +1,64 @@
********************************
* *
* SYMBOLS REFERENCING SYSTEM *
* RESOURCES *
* *
* AUTHOR: BILL CHATFIELD *
* LICENSE: GPL *
* *
********************************
CH EQU $24 ;HORIZ CHAR POS (40-COL)
BASL EQU $28 ;BASE ADDR FOR CURR VIDEO LINE
KSWL EQU $38 ;KEYBOARD SWITCH LOW BYTE
KSWH EQU $39 ;KEYBOARD SWITCH HIGH BYTE
IN EQU $200 ;256-CHAR INPUT BUFFER
OURCH EQU $57B ;HORIZONTAL POSITION (80-COL)
OURCV EQU $5FB ;VERTICAL POSITION (80-COL)
* ProDOS Addresses
MLI EQU $BF00 ;ADDRESS OF MLI ENTRY POINT
* Memory Mapped Input/Output addresses C000 - CFFF
KBD EQU $C000 ;KEYBOARD DATA + STROBE
STOR80ON EQU $C001 ;ENABLE AUXILIARY MEM SWITCHING
CXROMOFF EQU $C006 ;ENABLE SLOT ROMS
CXROMON EQU $C007 ;TURN ON INTERNAL ROM
KBDSTRB EQU $C010 ;CLEAR KEYBOARD STROBE
ALTCHAR EQU $C01E ;>=$80 IF IN 80-COL
PAGE2OFF EQU $C054 ;TURN ON MAIN MEMORY
PAGE2ON EQU $C055 ;TURN ON AUXILIARY MEMORY
BASICIN EQU $C305
BINPUT EQU $C8F6
ESCAPING EQU $C918
NOESC EQU $C9B7 ;HANDLES KEY OTHER THAN ESC
INVERT EQU $CEDD ;80-col INVERT CHAR ON SCREEN
PICK EQU $CF01 ;80-col PICK CHAR OFF SCREEN
* Subroutines stored in ROM addresses D000 - FFFF
STROUT EQU $DB3A ;BAS? PRINT NULL-TERM STR IN AY
HEXDEC EQU $ED24 ;HEX-TO-DECIMAL CONVERSION
PRINTXY EQU $F940 ;MONITOR PRINT X & Y AS HEX
RDKEY EQU $FD0C ;READS 1 CHAR
KEYIN EQU $FD1B
RDCHAR EQU $FD35
GETLN EQU $FD6A
CROUT EQU $FD8E ;PRINT A CARRIAGE RETURN
PRBYTE EQU $FDDA ;MONITOR PRINT BYTE 2 HEX DIGITS
COUT EQU $FDED ;WRITE A CHARACTER
BELL EQU $FF3A ;SUBROUTINE TO BEEP
* Keyboard key code definitions
ESC EQU $9B ;ESC WITH HIGH BIT SET
RTARROW EQU $95 ;RIGHT ARROW WITH HIGH BIT SET
DELETE EQU $FF ;DELETE WITH HIGH BIT SET
BKSPACE EQU $88 ;BACKSPACE WITH HIGH BIT SET
* ProDOS command definitions
ON_LINE EQU $C5 ;ID FOR ON_LINE MLI SYSTEM CALL