Compare commits

...

19 Commits

Author SHA1 Message Date
Bill Chatfield
995d550de9 Added funding link 2022-04-10 06:27:31 -04:00
Bill Chatfield
c19eceec31 Separate into 40-col and 80-col 2021-12-08 00:03:45 -05:00
Bill Chatfield
297fab0ef2 Reduce code and organize into subroutines 2021-12-04 05:57:00 -05:00
Bill Chatfield
793b02cf94 Fixed gitignore file with new program name 2021-12-04 04:49:19 -05:00
Bill Chatfield
f121b6dcb5 Fixed ESC handling 2021-12-03 00:37:50 -05:00
Bill Chatfield
3a69bebb12 Renamed source file again 2021-12-02 22:13:55 -05:00
Bill Chatfield
dd888c3766 Fixed name...again 2021-12-02 00:52:38 -05:00
Bill Chatfield
2ac3414119 Fixed most of 80-column problems 2021-12-01 05:14:41 -05:00
Bill Chatfield
d82a3a4c9f Updates 2021-11-30 00:53:13 -05:00
Bill Chatfield
5f122aba42 Some fixes 2021-11-28 23:57:08 -05:00
Bill Chatfield
0c3e688faf Try to fix 80-col detection 2021-10-01 02:12:32 -04:00
Bill Chatfield
8198d5adab Naming improvements 2021-09-30 00:12:36 -04:00
Bill Chatfield
ce69785917 Added todo 2021-09-28 22:23:59 -04:00
Bill Chatfield
56847733df Rename and move to 0x300 2021-09-28 21:44:41 -04:00
Bill Chatfield
bcb84bab4c Fix files excluded by git 2021-09-28 20:58:24 -04:00
Bill Chatfield
2a9ff7738d Fixed 'not prodos disk' error 2021-09-28 13:33:25 -04:00
Bill Chatfield
4b1791a27c Fix build 2021-09-24 00:40:18 -04:00
Bill Chatfield
c4ad69d367 Fix build 2021-09-23 23:47:16 -04:00
Bill Chatfield
ae27fffbbc Fixed start address of program 2018-08-06 23:59:43 -04:00
16 changed files with 555 additions and 252 deletions

2
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,2 @@
github: [gungwald]
custom: ["https://www.paypal.me/gungwald", "https://cash.app/$BillChatfield", "https://www.venmo.com/u/Bill-Chatfield"]

5
.gitignore vendored
View File

@ -1,2 +1,5 @@
*.dsk
*.swp
del2bs40
del2bs80
del2bs.dsk
_FileInformation.txt

BIN
AppleCommander-1.3.5-ac.jar Normal file

Binary file not shown.

Binary file not shown.

View File

@ -1,34 +1,35 @@
# Compiles with https://www.brutaldeluxe.fr/products/crossdevtools/merlin/
#
ifeq ($(OS),Windows_NT)
MERLIN_DIR=C:/opt/Merlin32_v1.0
MERLIN_LIB=$(MERLIN_DIR)/Library
MERLIN=$(MERLIN_DIR)/Windows/Merlin32
RM=del /s
else
MERLIN_DIR=$(HOME)/opt/Merlin32_v1.0
MERLIN_LIB=$(MERLIN_DIR)/Library
MERLIN=$(MERLIN_DIR)/Linux64/Merlin32
RM=rm -f
endif
# a.k.a. https://github.com/apple2accumulator/merlin32
AC=java -jar AppleCommander-ac-1.4.0.jar
SRC=delhndlr.s
PGM=DELHNDLR
VOL=$(PGM)
DSK=$(PGM).dsk
AC=java -jar AppleCommander-1.3.5-ac.jar
PGM=del2bs40
PGM2=del2bs80
SRC=$(PGM).s
SRC2=$(PGM2).s
VOL=del2bs
DSK=$(VOL).dsk
ADDR=0x0300
$(DSK): $(PGM)
$(AC) -pro140 $(DSK) $(VOL)
$(AC) -p $(DSK) $(PGM) SYS < $(PGM)
$(DSK): $(PGM) $(PGM2)
@#$(AC) -pro140 $(DSK) $(VOL) ---- Broken in 1.3.5 and others
cp prodos.dsk $(DSK)
$(AC) -p $(DSK) $(PGM) BIN $(ADDR) < $(PGM)
$(AC) -p $(DSK) $(PGM2) BIN $(ADDR) < $(PGM2)
$(PGM): $(SRC)
$(MERLIN) $(MERLIN_LIB) $(SRC)
merlin32 . $(SRC)
@# Merlin fails to provide a non-0 exit code on failure so
@# it needs to be simulated by checking for the error_output.txt
@# file.
@test -e $(PGM)
test -e $(PGM)
$(PGM2): $(SRC2)
merlin32 . $(SRC2)
@# Merlin fails to provide a non-0 exit code on failure so
@# it needs to be simulated by checking for the error_output.txt
@# file.
test -e $(PGM2)
clean:
$(RM) $(DSK) $(PGM) error_output.txt _FileInformation.txt
$(RM) $(PGM) $(PGM2) $(DSK) error_output.txt _FileInformation.txt

6
TODO Normal file
View File

@ -0,0 +1,6 @@
1. Split into 40-col and 80-col programs
2. Have a loader that figures out if it's in 40 or 80 col mode and then
load the right code.
3. Make a release.
4. Go back to $300 load address once split into 2 programs. Each need to be
< 200 bytes to fit at that location.

BIN
del2bs Normal file

Binary file not shown.

132
del2bs40.s Normal file
View File

@ -0,0 +1,132 @@
********************************
* *
* DELETE KEY TO BACKSPACE *
* CONVERTER *
* *
* AUTHOR: BILL CHATFIELD *
* LICENSE: GPL *
* *
********************************
***********************************************************
* INPUT SUBROUTINE CALL SEQUENCE: *
* GETLN ($FD6A) - READS A LINE INTO IN ($200) LENGTH IN X *
* '->RDCHAR ($FD35) - HANDLES ESC SEQUENCES FOR 40 COLUMN *
* '->RDKEY ($FD0C) - READS CHAR INTO ACCUMULATOR *
* '->KSW ($38) - POINTS TO KEYIN ($FD1B) FOR 40-COL *
* OR BASICIN ($C305) FOR 80-COL, *
* DELHNDLR IN THIS FILE, OTHER OTHER *
* CUSTOM SUBROUTINE. BASICIN HANDLES *
* ESC SEQUENCES FOR 80-COLUMN. *
***********************************************************
ORG $300
TYP $06 ;BINARY TYPE
DSK del2bs40 ;OUTPUT FILE NAME
USE symbols
USE register.macs
USE string.macs
********************************
* *
* INSTALL VECTOR TO DEL2BS40 *
* SUBROUTINE *
* *
********************************
MAIN BIT RDALTCHAR
BMI EIGHTY
LDA #<DEL2BS40
STA KSWL
LDA #>DEL2BS40
STA KSWH
WRSTR LOADMSG
JMP DONE
EIGHTY WRSTR WRONGMODE
DONE RTS
********************************
* *
* KEYBOARD INPUT SUBROUTINE *
* *
* PRECONDITIONS: *
* 1. CURSOR AT CH & BASL *
* - only works with 40-col *
* 2. ACCUM = ORIG SCREEN BYTE *
* - only works with 40-col *
* 3. Y = VALUE IN CH *
* - only works with 40-col *
* *
* POSTCONDITIONS: *
* 1. MUST RETURN CHAR IN ACCUM *
* 2. X & Y MUST NOT BE CHANGED *
* *
********************************
DEL2BS40
STA CURSOR ;STORE THE ORIGINAL CURSOR CHAR
STY CURSPOS
JSR GETKEY ;STORE USER-ENTERED KEY IN A
JSR CONV_DELETE
STA KEY ;STORE IT BECAUSE A WILL GET WIPED
JSR REPLACE_CURSOR
LDA KEY ;SETUP RETURN VALUE
RTS
********************************
* *
* CONV_DELETE SUBROUTINE *
* *
* INPUTS: *
* A - CONTAINS A CHARACTER *
* *
* OUTPUTS: *
* A - BACKSPACE CHAR IF *
* ACCUMULATOR CONTAINED *
* A DELETE CHAR, OTHER- *
* WISE IT IS UNCHANGED *
* *
* REGISTERS: *
* A - CHANGED. SEE ABOVE *
* X - PRESERVED *
* Y - PRESERVED *
* *
********************************
CONV_DELETE
CMP #DELETE ;IS THE KEY IN A THE DELETE KEY
BNE D2BDONE
LDA #BKSPACE
D2BDONE RTS
********************************
* *
* REPLACE_CURSOR SUBROUTINE *
* *
* INPUTS: *
* CURSOR *
* CURSPOS *
* *
* OUTPUTS: *
* NONE *
* *
* REGISTERS: *
* A - CONTAINS CURSOR *
* X - PRESERVED *
* Y - CONTAINS CURSPOS *
* *
********************************
REPLACE_CURSOR
LDA CURSOR
LDY CURSPOS
STA (BASL),Y
RTS
********************************
* *
* DATA *
* *
********************************
LOADMSG ASC "LOADED DELETE TO BACKSPACE CONVERTER",0D,00
WRONGMODE
ASC "THIS WILL NOT WORK IN 80-COLUMN MODE",0D,00
KEY DB 0
CURSOR DB 0
CURSPOS DB 0

133
del2bs80.s Normal file
View File

@ -0,0 +1,133 @@
********************************
* *
* DELETE KEY TO BACKSPACE *
* CONVERTER *
* *
* AUTHOR: BILL CHATFIELD *
* LICENSE: GPL *
* *
********************************
***********************************************************
* INPUT SUBROUTINE CALL SEQUENCE: *
* GETLN ($FD6A) - READS A LINE INTO IN ($200) LENGTH IN X *
* '->RDCHAR ($FD35) - HANDLES ESC SEQUENCES FOR 40 COLUMN *
* '->RDKEY ($FD0C) - READS CHAR INTO ACCUMULATOR *
* '->KSW ($38) - POINTS TO KEYIN ($FD1B) FOR 40-COL *
* OR BASICIN ($C305) FOR 80-COL, *
* DELHNDLR IN THIS FILE, OTHER OTHER *
* CUSTOM SUBROUTINE. BASICIN HANDLES *
* ESC SEQUENCES FOR 80-COLUMN. *
***********************************************************
ORG $300
TYP $06 ;BINARY TYPE
DSK del2bs80 ;OUTPUT FILE NAME
USE symbols
USE register.macs
USE string.macs
********************************
* *
* INSTALL VECTOR TO DEL2BS *
* SUBROUTINE *
* *
********************************
MAIN BIT RDALTCHAR
BPL FORTY
LDA #<DEL2BS80
STA KSWL
LDA #>DEL2BS80
STA KSWH
WRSTR LOADMSG
JMP DONE
FORTY WRSTR WRONGMODE
DONE RTS
********************************
* *
* 80-COL DEL2BS SUBROUTINE *
* *
********************************
DEL2BS80
PUSHY
LDY OURCH ;GET CURSOR POSITION
JSR PICK ;GET CURSOR CHARACTER
STA CURSOR80 ;REMEMBER CURSOR CHARACTER
JSR INVERT ;INVERT CHAR AT CURSOR POSITION
NEXTKEY JSR GETKEY ;GET KEYBOARD KEY IN ACCUMULATOR
JSR CONV_DEL2BS
STA KEY ;REMEMBER WHAT KEY WAS TYPED
CMP #ESC ;IS IT ESC?
BNE NOT_ESC ;KEY IS NOT ESC
JSR INVERT ;PREP FOR ESCAPING CURSOR
JSR HANDLE_ESC
JMP DEL2BS80
NOT_ESC CMP #RTARROW ;IS IT A RIGHT ARROW
BNE NOT_RT ;NOT RIGHT ARROW THEN DONE
LDY OURCH ;GET HORIZONTAL CURSOR POSITION
JSR PICK ;GRAB CHAR FROM SCREEN
ORA #$80 ;SET HIGH BIT
STA KEY ;REMEMBER ARROW OVERED CHAR AS TYPED KEY
NOT_RT LDY OURCH ;SET CURSOR POSITION
JSR INVERT ;CURSOR CHAR MUST BE IN A
POPY ;RESTORE X AND Y
LDA KEY ;LOAD RETURN VALUE
RTS
********************************
* *
* DEL2BS SUBROUTINE *
* *
* PRECONDITIONS: *
* 1. KEY IS IN ACCUMULATOR *
* *
* POSTCONDITIONS: *
* 1. KEY IS IN ACCUMULATOR *
* *
********************************
CONV_DEL2BS
CMP #DELETE ;IS THE KEY IN A THE DELETE KEY
BNE D2BDONE
LDA #BKSPACE
D2BDONE RTS
********************************
* *
* HANDLE_ESC SUBROUTINE *
* *
********************************
HANDLE_ESC
PUSHY
JSR ESC_ON
JSR GETKEY
JSR ESC_OFF
JSR UPSHFT
AND #$7F
LDY #$10
ESC2 CMP ESCTAB,Y
BEQ ESC3
DEY
BPL ESC2
JMP ESCDONE
ESC3 LDA ESCCHAR,Y
AND #$7F
JSR CTLCHAR
LDA ESCCHAR,Y
BMI HANDLE_ESC
ESCDONE POPY
RTS
********************************
* *
* DATA *
* *
********************************
LOADMSG ASC "LOADED DELETE TO BACKSPACE CONVERTER",0D,00
WRONGMODE
ASC "THIS WILL NOT WORK IN 40-COLUMN MODE",0D,00
KEY DB 0
ORIGCURS DB 0
CURSPOS DB 0
CURSOR80 DB 0

View File

@ -1,228 +0,0 @@
********************************
* *
* DELETE KEY HANDLER *
* *
* AUTHOR: BILL CHATFIELD *
* LICENSE: GPL *
* *
********************************
ORG $801
DSK DELHNDLR
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
OURCH EQU $57B ;HORIZONTAL POSITION (80-COL)
OURCV EQU $5FB ;VERTICAL POSITION (80-COL)
KBD EQU $C000 ;KEYBOARD DATA + STROBE
KBDSTRB EQU $C010 ;CLEAR KEYBOARD STROBE
CXROMON EQU $C007 ;TURN ON INTERNAL ROM
CXROMOFF EQU $C006 ;ENABLE SLOT ROMS
ALTCHAR EQU $C01E ;>=$80 IF IN 80-COL
COUT EQU $FDED ;WRITE A CHARACTER
* 80-COL SUBS INSIDE THE INTERNAL ROM
INVERT EQU $CEDD ;INVERT CHAR ON SCREEN
PICK EQU $CF01 ;PICK CHAR OFF SCREEN
* INPUT SUBS
RDKEY EQU $FD0C
RDCHAR EQU $FD35
KEYIN EQU $FD1B
BASICIN EQU $C305
GETLN EQU $FD6A
NOESC EQU $C9B7 ;HANDLES KEY OTHER THAN ESC
BINPUT EQU $C8F6
ESCAPING EQU $C918
IN EQU $200 ;256-CHAR INPUT BUFFER
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
HEXDEC EQU $ED24 ;HEX-TO-DECIMAL CONVERSION
CROUT EQU $FD8E ;PRINT A CARRIAGE RETURN
STROUT EQU $DB3A ;PRINT NULL-TERM STRING IN AY
* MONITOR SUBS
PRINTXY EQU $F940 ;PRINT X & Y AS HEX
PRBYTE EQU $FDDA ;PRINT BYTE AS 2 HEX DIGITS
STOR80ON EQU $C001 ;ENABLE AUXILIARY MEM SWITCHING
PAGE2OFF EQU $C054 ;TURN ON MAIN MEMORY
PAGE2ON EQU $C055 ;TURN ON AUXILIARY MEMORY
DEBUG EQU 1
DEBUG2 EQU 0
********************************
* *
* 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
<<<
********************************
* *
* PUT80 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 *
* *
********************************
PUT80 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
<<<
********************************
* *
* INSTALL VECTOR TO HANDLER *
* *
********************************
MAIN
LDA #<DELHNDLR
STA KSWL
LDA #>DELHNDLR
STA KSWH
PUTS LOADMSG
RTS
********************************
* *
* KEYBOARD INPUT ROUTINE *
* *
* PRECONDITIONS: *
* 1. CURSOR AT CH & BASL *
* 2. ACCUM = ORIG SCREEN BYTE *
* 3. Y = VALUE IN CH *
* *
* POSTCONDITIONS: *
* 1. MUST RETURN CHAR IN ACCUM *
* 2. X & Y MUST NOT BE CHANGED *
* *
********************************
DELHNDLR
STA ORIGCURS ;STORE THE ORIGINAL CURSOR CHAR
TXA ;SAVE X
PHA
TYA ;SAVE Y
PHA
BIT ALTCHAR ;TEST FOR 80-COL ON
BMI COL80
COL40
JSR GETKEY ;LOAD "KEY" VARIABLE
JSR DEL2BS ;CONVERT DELETE TO BACKSPACE
LDA ORIGCURS
STA (BASL),Y ;REMOVE CURSOR
JMP FINISH
COL80
PUT80 #' ';OURCH ;DISPLAY OUR CURSOR, INVERSE SPC
NEXTKEY
JSR GETKEY ;LOAD "KEY" VARIABLE
JSR DEL2BS ;CONVERT DELETE TO BACKSPACE
CMP #ESC ;IS IT ESC?
BEQ NEXTKEY ;IGNORE ESC
CMP #RTARROW ;IS IT A RIGHT ARROW
BNE CLRCURS ;NOT RIGHT ARROW THEN DONE
LDY OURCH ;GET HORIZONTAL CURSOR POSITION
JSR PICK ;GRAB CHAR FROM SCREEN
ORA #$80 ;SET HIGH BIT
STA KEY
CLRCURS
PUT80 #" ";OURCH ;ERASE CURSOR
FINISH
PLA ;RESTORE Y
TAY
PLA ;RESTORE X
TAX
LDA KEY ;LOAD RETURN VALUE
RTS
********************************
* *
* GETKEY SUBROUTINE *
* *
********************************
GETKEY
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 KEY ;STORE THE KEY THAT WAS READ
RTS
********************************
* *
* DEL2BS SUBROUTINE *
* *
********************************
DEL2BS
CMP #DELETE ;IS THE KEY IN A THE DELETE KEY
BNE D2BDONE
LDA #BKSPACE
STA KEY
D2BDONE
RTS
********************************
* *
* DATA *
* *
********************************
LOADMSG ASC "LOADED DELETE HANDLER",0D,00
KEY DB 0
ORIGCURS DB 0

36
handle_esc.s Normal file
View File

@ -0,0 +1,36 @@
HANDLE_ESC
JSR ESC_ON
JSR GETKEY
JSR ESC_OFF
JSR UPSHFT
AND #$7F
LDY #$10
ESC2 CMP ESCTAB,Y
BEQ ESC3
DEY
BPL ESC2
BMI ESCSPEC
ESC3 LDA ESCCHAR,Y
AND #$7F
JSR CTLCHAR
LDA ESCCHAR,Y
BMI HANDLE_ESC
RTS ;WAS JMP B.INPUT
ESCSPEC TAY
LDA DOS33_MODE
CPY #$11
BNE ESCSP1
JSR X_NAK
LDA #$98
STA A2C_CHAR
RTS ;WAS JMP BIORET
ESCSP1 CPY #$05
BNE ESCSP4
AND #$DF
ESCSP2 STA DOS33_MODE
ESCSP3 RTS ;WAS JMP B.INPUT
ESCSP4 CPY #$04
BNE ESCSP3
ORA #$20
BNE ESCSP2
RTS ;DID NOT EXIST IN ORIGINAL

BIN
prodos.dsk Normal file

Binary file not shown.

30
putchar80.s Normal file
View File

@ -0,0 +1,30 @@
********************************
* *
* PUTCHAR80 SUBROUTINE *
* *
* IN 80-COL MODE EVEN COLUMNS *
* ARE IN AUXILIARY MEMORY *
* WHILE ODD COLUMNS ARE IN *
* MAIN MEMORY. *
* *
* A - CHARACTER TO DISPLAY *
* Y - DESIRED COLUMN *
* *
********************************
PUTCHAR80
PHA
SEI ;DISABLE INTERRUPTS
STA SET80COL ;ENABLE MAIN/AUX MEM SWITCHING
TYA ;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
PLA ;LOAD THE CHARACTER TO DISPLAY
STA (BASL),Y ;DISPLAY THE CHARACTER
STA PAGE2OFF ;TURN MAIN MEM BACK ON
CLI ;ENABLE INTERRUPTS
RTS

67
register.macs.s Normal file
View File

@ -0,0 +1,67 @@
********************************
* *
* APPLE II MACROS *
* *
* AUTHOR: BILL CHATFIELD *
* LICENSE: GPL *
* *
********************************
********************************
* PUSHY MACRO *
********************************
PUSHY mac
tya
pha
<<<
********************************
* POPY MACRO *
********************************
POPY mac
pla
tay
<<<
********************************
* PUSHXY MACRO *
********************************
PUSHXY mac
txa
pha
tya
pha
<<<
********************************
* POPYX MACRO *
********************************
POPYX mac
pla
tay
pla
tax
<<<
********************************
* PUSHAXY MACRO *
********************************
PUSHAXY MAC
PHA
TXA
PHA
TYA
PHA
<<<
********************************
* POPYXA MACRO *
********************************
POPYXA MAC
PLA
TAY
PLA
TAX
PLA
<<<

45
string.macs.s Normal file
View File

@ -0,0 +1,45 @@
********************************
* *
* APPLE II MACROS *
* *
* AUTHOR: BILL CHATFIELD *
* LICENSE: GPL *
* *
********************************
********************************
* *
* WRSTR MACRO *
* *
* WRITES AN ASCII 0 TERMINATED *
* STRING TO THE *
* CURRENT OUTPUT DEVICE. *
* THE STROUT SUBROUTINE IS *
* USED, THE ADDRESS OF WHICH *
* IS $DB3A. THAT IS IN THE *
* APPLESOFT ROM LANGUAGE CARD, *
* WHICH CONSISTS OF THE *
* FOLLOWING PROGRAMS: *
* *
* $D000-$F7FF APPLESOFT *
* $F800-$FFFF SYSTEM MONITOR *
* *
* INPUTS: *
* ]1 - STRING TO WRITE *
* *
* OUTPUTS: *
* NONE *
* *
* REGISTERS: *
* A - PRESERVED *
* X - PRESERVED *
* Y - PRESERVED *
* *
********************************
WRSTR MAC
PUSHAXY
LDA #<]1 ;PUT LOW BYTE INTO A
LDY #>]1 ;PUT HIGH BYTE INTO Y
JSR STROUT ;CALL APPLESOFT'S STRING PRINT
POPYXA
<<<

76
symbols.s Normal file
View File

@ -0,0 +1,76 @@
********************************
* *
* APPLE II SYMBOLS FOR MEMORY *
* LOCATIONS *
* *
* AUTHOR: BILL CHATFIELD *
* LICENSE: GPL *
* *
********************************
WINWIDTH EQU $21
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
OURCH EQU $57B ;HORIZONTAL POSITION (80-COL)
OURCV EQU $5FB ;VERTICAL POSITION (80-COL)
KBD EQU $C000 ;KEYBOARD DATA + STROBE
CXROMOFF EQU $C006 ;ENABLE EXPANSION SLOTS AT $C100-$C7FF
CXROMON EQU $C007 ;ENABLE INTERNAL ROM AT $C100-$C7FF
RDCXROM EQU $C015 ;READ CXROM SWITCH (1 = SLOTS, 0 = ROM)
80COLOFF EQU $C00C ;Off: display 40 columns
80COLON EQU $C00D ;On: display 80 columns
ALTCHAROFF EQU $C00E ;USE PRIMARY CHARACTER SET
ALTCHARON EQU $C00F ;USE ALTERNATE CHARACTER SET
KBDSTRB EQU $C010 ;CLEAR KEYBOARD STROBE
RDALTCHAR EQU $C01E ;READ STATE OF Alt char set (1 = on)
RD80COL EQU $C01F ;READ 80COL SWITCH
COUT EQU $FDED ;WRITE A CHARACTER
* 80-COL SUBS
GETKEY EQU $C83B
INVERT EQU $CE26 ;TOGGLE NORMAL/INVERSE
PICK EQU $CE44 ;PICK CHAR OFF SCREEN
* INPUT SUBS
RDKEY EQU $FD0C
RDCHAR EQU $FD35
KEYIN EQU $FD1B
BASICIN EQU $C305
GETLN EQU $FD6A
GETLN1 EQU $FD6F ;GETLN WITH NO PROMPT
NOESC EQU $C9B7 ;HANDLES KEY OTHER THAN ESC
BINPUT EQU $C8F6
ESCAPING EQU $C91B
IN EQU $200 ;256-CHAR INPUT BUFFER
RD80VID EQU $C01F
* USED IN HANDLE_ESC
ESC_ON EQU $CEB1
ESC_OFF EQU $CEC4
UPSHFT EQU $CE14
CTLCHAR EQU $CAD6
X_NAK EQU $CD4D
A2C_CHAR EQU $067B
* DATA USED IN HANDLE_ESC
ESCTAB EQU $C97C
ESCCHAR EQU $C96B
DOS33_MODE EQU $04FB
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
HEXDEC EQU $ED24 ;HEX-TO-DECIMAL CONVERSION
CROUT EQU $FD8E ;PRINT A CARRIAGE RETURN
STROUT EQU $DB3A ;PRINT NULL-TERM STRING IN AY
* MONITOR SUBS
PRINTXY EQU $F940 ;PRINT X & Y AS HEX
PRBYTE EQU $FDDA ;PRINT BYTE AS 2 HEX DIGITS
SET80COL EQU $C001 ;ENABLE AUXILIARY MEM SWITCHING
PAGE2OFF EQU $C054 ;TURN ON MAIN MEMORY
PAGE2ON EQU $C055 ;TURN ON AUXILIARY MEMORY