mirror of
https://github.com/flowenol/applesoft-lite.git
synced 2024-12-27 00:29:18 +00:00
Added support for loading programs from Apple-1 Cartridge
This commit is contained in:
parent
a1e942851f
commit
943d2298f4
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
*.bin
|
*.bin
|
||||||
*.o
|
*.o
|
||||||
|
*.label
|
||||||
|
7
Makefile
7
Makefile
@ -1,7 +1,8 @@
|
|||||||
AFLAGS =
|
AFLAGS = -g
|
||||||
LFLAGS = -C apple1cartridge.cfg
|
LFLAGS = -C apple1cartridge.cfg -Ln applesoft-lite.label
|
||||||
BINFILE = applesoft-lite.bin
|
BINFILE = applesoft-lite.bin
|
||||||
OBJS = applesoft-lite.o io.o apple1serial.o
|
OBJS = applesoft-lite.o io.o apple1serial.o
|
||||||
|
LABELS = applesoft-lite.label
|
||||||
|
|
||||||
$(BINFILE): $(OBJS)
|
$(BINFILE): $(OBJS)
|
||||||
ld65 $(LFLAGS) $(OBJS) -o $(BINFILE)
|
ld65 $(LFLAGS) $(OBJS) -o $(BINFILE)
|
||||||
@ -19,4 +20,4 @@ io.o: io.s
|
|||||||
ca65 $(AFLAGS) $<
|
ca65 $(AFLAGS) $<
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm $(OBJS) $(BINFILE)
|
rm $(OBJS) $(BINFILE) $(LABELS)
|
||||||
|
13
README.md
13
README.md
@ -6,12 +6,19 @@ See https://cowgod.org/replica1/applesoft/
|
|||||||
|
|
||||||
# apple1serial
|
# apple1serial
|
||||||
|
|
||||||
This branch has been modified to perform LOAD and SAVE operations via Apple-1 Serial interface
|
This fork has been modified to perform LOAD and SAVE operations via Apple-1 Serial interface.
|
||||||
https://github.com/flowenol/apple1serial
|
|
||||||
|
See https://github.com/flowenol/apple1serial
|
||||||
|
|
||||||
# How to use LOAD?
|
# How to use LOAD?
|
||||||
|
|
||||||
The LOAD command implemented on this branch takes as an argument the length of the program
|
The LOAD command implemented on this branch takes as an argument the length of the program
|
||||||
as a decimal value, e.g.,
|
as a decimal value, e.g.,
|
||||||
|
|
||||||
]LOAD 1024
|
`]LOAD 1024`
|
||||||
|
|
||||||
|
# apple1cartridge
|
||||||
|
|
||||||
|
This fork has been modified to allow loading programs from Apple-1 RAM/ROM Cartridge via the `STARTFROMCART` routine.
|
||||||
|
|
||||||
|
See https://github.com/flowenol/apple1cartridge
|
||||||
|
@ -602,6 +602,8 @@ FIX_LINKS:
|
|||||||
jmp RESTART
|
jmp RESTART
|
||||||
@2: ldy #4 ; FIND END OF THIS LINE
|
@2: ldy #4 ; FIND END OF THIS LINE
|
||||||
@3: iny ; (NOTE MAXIMUM LENGTH < 256)
|
@3: iny ; (NOTE MAXIMUM LENGTH < 256)
|
||||||
|
;lda #'C'
|
||||||
|
;jsr OUTDO
|
||||||
lda (INDEX),y
|
lda (INDEX),y
|
||||||
bne @3
|
bne @3
|
||||||
iny ; COMPUTE ADDRESS OF NEXT LINE
|
iny ; COMPUTE ADDRESS OF NEXT LINE
|
||||||
@ -5498,3 +5500,64 @@ RESUME: lda ERRLIN ; RESTORE LINE # AND TXTPTR
|
|||||||
ldx ERRSTK ; RETRIEVE STACK PNTR AS IT WAS
|
ldx ERRSTK ; RETRIEVE STACK PNTR AS IT WAS
|
||||||
txs ; BEFORE STATEMENT SCANNED
|
txs ; BEFORE STATEMENT SCANNED
|
||||||
jmp NEWSTT ; DO STATEMENT AGAIN
|
jmp NEWSTT ; DO STATEMENT AGAIN
|
||||||
|
|
||||||
|
; ----------------------------------------------------------------------------
|
||||||
|
; START FROM CARTRIDGE ROUTINE
|
||||||
|
; ----------------------------------------------------------------------------
|
||||||
|
STARTFROMCART:
|
||||||
|
ldx #$FF ; SET DIRECT MODE FLAG
|
||||||
|
stx CURLIN+1
|
||||||
|
ldx #$FB ; SET STACK POINTER, LEAVING ROOM FOR
|
||||||
|
txs ; LINE BUFFER DURING PARSING
|
||||||
|
lda #<COLDSTART ; SET RESTART TO COLD.START
|
||||||
|
ldy #>COLDSTART ; UNTIL COLDSTART IS COMPLETED
|
||||||
|
sta GOWARM+1
|
||||||
|
sty GOWARM+2
|
||||||
|
sta GOSTROUTZ+1 ; ALSO SECOND USER VECTOR...
|
||||||
|
sty GOSTROUTZ+2 ; ..WE SIMPLY MUST FINISH COLD.START!
|
||||||
|
lda #$4C ; "JMP" OPCODE FOR 4 VECTORS
|
||||||
|
sta GOWARM ; WARM START
|
||||||
|
sta GOSTROUTZ ; ANYONE EVER USE THIS ONE?
|
||||||
|
sta JMPADRS ; USED BY FUNCTIONS (JSR JMPADRS)
|
||||||
|
|
||||||
|
; ----------------------------------------------------------------------------
|
||||||
|
; MOVE GENERIC CHRGET AND RANDOM SEED INTO PLACE
|
||||||
|
;
|
||||||
|
; NOTE THAT LOOP VALUE IS WRONG!
|
||||||
|
; THE LAST BYTE OF THE RANDOM SEED IS NOT
|
||||||
|
; COPIED INTO PAGE ZERO!
|
||||||
|
; ----------------------------------------------------------------------------
|
||||||
|
ldx #GENERIC_END-GENERIC_CHRGET-1
|
||||||
|
@1: lda GENERIC_CHRGET-1,x
|
||||||
|
sta CHRGET-1,x
|
||||||
|
dex
|
||||||
|
bne @1
|
||||||
|
; ----------------------------------------------------------------------------
|
||||||
|
txa ; A=0
|
||||||
|
sta SHIFTSIGNEXT
|
||||||
|
sta LASTPT+1
|
||||||
|
pha ; PUT $00 ON STACK (WHAT FOR?)
|
||||||
|
lda #3 ; SET LENGTH OF TEMP. STRING DESCRIPTORS
|
||||||
|
sta DSCLEN ; FOR GARBAGE COLLECTION SUBROUTINE
|
||||||
|
jsr CRDO ; PRINT <RETURN>
|
||||||
|
lda #1 ; SET UP FAKE FORWARD LINK
|
||||||
|
sta INPUTBUFFER-3
|
||||||
|
sta INPUTBUFFER-4
|
||||||
|
ldx #TEMPST ; INIT INDEX TO TEMP STRING DESCRIPTORS
|
||||||
|
stx TEMPPT
|
||||||
|
jsr STXTPT ; SET TXTPTR TO TXTTAB-1
|
||||||
|
ldy #0
|
||||||
|
lda #0
|
||||||
|
sta (TXTPTR),y ; ZERO THE TXTPTR - FOR SAKE OF RUN STATEMENT
|
||||||
|
lda #<STROUT ; PUT CORRECT ADDRESSES IN TWO
|
||||||
|
ldy #>STROUT ; USER VECTORS
|
||||||
|
sta GOSTROUTZ+1
|
||||||
|
sty GOSTROUTZ+2
|
||||||
|
lda #<RESTART
|
||||||
|
ldy #>RESTART
|
||||||
|
sta GOWARM+1
|
||||||
|
sty GOWARM+2
|
||||||
|
lda #$00
|
||||||
|
sta CURLIN
|
||||||
|
sta CURLIN+1
|
||||||
|
jmp FIX_LINKS ; FIX LINKS FOR PROGRAM
|
||||||
|
Loading…
Reference in New Issue
Block a user