mirror of
https://github.com/option8/greenscale.git
synced 2025-01-13 10:30:02 +00:00
single-file version
This commit is contained in:
parent
a330f2d787
commit
08b84a920e
539
BADAPPLET.s
Normal file
539
BADAPPLET.s
Normal file
@ -0,0 +1,539 @@
|
||||
DSK GREENSCALE
|
||||
|
||||
**************************************************
|
||||
* Autoplaying version for Bad Apple demo
|
||||
**************************************************
|
||||
* Variables
|
||||
**************************************************
|
||||
|
||||
ROW EQU $FA ; row in pixels - 1-48 (#00-#2F)
|
||||
COLUMN EQU $FB ; col in pixels - 1-40 (#00-#27)
|
||||
|
||||
COLOR EQU $FC ; index color of pixel to plot - #00-#0F
|
||||
PLOTCOLOR EQU $21 ; color to plot - #00-#0F from COLORTABLE
|
||||
CHAR EQU $FD ; byte at PLOTROW,PLOTCOLUMN
|
||||
|
||||
PLOTROW EQU $FE ; row in text page = ROW/2, remainder = nibble
|
||||
PLOTCOLUMN EQU $FF ; col in text page == COLUMN
|
||||
|
||||
IMGLO EQU $CD ; image data addres, LO
|
||||
IMGHI EQU $CE ; image data addres, HI
|
||||
|
||||
SEEDADDRLO EQU $CB ; db <TABLESEED
|
||||
SEEDADDRHI EQU $CC ; db >TABLESEED
|
||||
|
||||
FRAMENUM EQU $1D ; which frame of the anim
|
||||
FRAMES EQU $1E ; total frames
|
||||
|
||||
DELAY EQU $1F ; interframe delay amount.
|
||||
; FF=3FPS $80=10FPS $40=24FPS $20=37FPS $10=43FPS $00=46FPS
|
||||
PAUSED EQU $20 ; paused state - stop animation
|
||||
|
||||
COLORMODE EQU $22 ; which color mode are we in? which table to draw from
|
||||
TABLEOFFSET EQU $23
|
||||
|
||||
AUTOPLAYTIMER EQU $EB ; how many loops has the animation played?
|
||||
AUTOPLAY EQU $EC ; Autoplay mode or not
|
||||
|
||||
;from ProRWTS2
|
||||
;file read support
|
||||
sizelo EQU $52
|
||||
sizehi EQU $53
|
||||
ldrlo EQU $55
|
||||
ldrhi EQU $56
|
||||
|
||||
;file open support
|
||||
namlo EQU $57
|
||||
namhi EQU $58
|
||||
|
||||
;rewind support
|
||||
treeidx EQU $5a
|
||||
blkidx EQU $5e
|
||||
bleftlo EQU $60
|
||||
blefthi EQU $61
|
||||
|
||||
;API
|
||||
hddopendir EQU $BD03
|
||||
hddrdwrpart EQU $BD00
|
||||
hddblockhi EQU $BD06
|
||||
hddblocklo EQU $BD04
|
||||
|
||||
|
||||
**************************************************
|
||||
* Apple Standard Memory Locations
|
||||
**************************************************
|
||||
CLRLORES EQU $F832
|
||||
LORES EQU $C050
|
||||
TXTSET EQU $C051
|
||||
MIXCLR EQU $C052
|
||||
MIXSET EQU $C053
|
||||
TXTPAGE1 EQU $C054
|
||||
TXTPAGE2 EQU $C055
|
||||
KEY EQU $C000
|
||||
C80STOREOF EQU $C000
|
||||
C80STOREON EQU $C001
|
||||
STROBE EQU $C010
|
||||
SPEAKER EQU $C030
|
||||
VBL EQU $C02E
|
||||
RDVBLBAR EQU $C019 ;not VBL (VBL signal low
|
||||
WAIT EQU $FCA8
|
||||
RAMWRTAUX EQU $C005
|
||||
RAMWRTMAIN EQU $C004
|
||||
SETAN3 EQU $C05E ;Set annunciator-3 output to 0
|
||||
SET80VID EQU $C00D ;enable 80-column display mode (WR-only)
|
||||
CLR80VID EQU $C00C
|
||||
HOME EQU $FC58 ; clear the text screen
|
||||
CH EQU $24 ; cursor Horiz
|
||||
CV EQU $25 ; cursor Vert
|
||||
VTAB EQU $FC22 ; Sets the cursor vertical position (from CV)
|
||||
COUT EQU $FDED ; Calls the output routine whose address is stored in CSW,
|
||||
; normally COUTI
|
||||
STROUT EQU $DB3A ;Y=String ptr high, A=String ptr low
|
||||
|
||||
ALTTEXT EQU $C055
|
||||
ALTTEXTOFF EQU $C054
|
||||
|
||||
ROMINIT EQU $FB2F
|
||||
ROMSETKBD EQU $FE89
|
||||
ROMSETVID EQU $FE93
|
||||
|
||||
ALTCHAR EQU $C00F ; enables alternative character set - mousetext
|
||||
|
||||
BLINK EQU $F3
|
||||
SPEED EQU $F1
|
||||
|
||||
BELL EQU $FF3A ; Monitor BELL routine
|
||||
CROUT EQU $FD8E ; Monitor CROUT routine
|
||||
PRBYTE EQU $FDDA ; Monitor PRBYTE routine
|
||||
MLI EQU $BF00 ; ProDOS system call
|
||||
OPENCMD EQU $C8 ; OPEN command index
|
||||
READCMD EQU $CA ; READ command index
|
||||
CLOSECMD EQU $CC ; CLOSE command index
|
||||
|
||||
|
||||
**************************************************
|
||||
* START - sets up various fiddly zero page bits
|
||||
**************************************************
|
||||
|
||||
ORG $0800 ; PROGRAM DATA STARTS AT $0C00 NOW
|
||||
|
||||
JSR ROMSETVID ; Init char output hook at $36/$37
|
||||
JSR ROMSETKBD ; Init key input hook at $38/$39
|
||||
JSR ROMINIT ; GR/HGR off, Text page 1
|
||||
|
||||
LDA #$00
|
||||
STA BLINK ; blinking text? no thanks.
|
||||
STA LORES ; low res graphics mode
|
||||
|
||||
STA PAUSED ; start not paused
|
||||
STA COLORMODE ; start in default, real hardware mode
|
||||
DETECTGS
|
||||
SEC ;Set carry bit (flag)
|
||||
JSR $FE1F ;Call to the monitor
|
||||
BCS NOTGS ;If carry is still set, then old machine
|
||||
;BCC ISGS ;If carry is clear, then new machine
|
||||
|
||||
ISGS lda #$01 ; disable SHR for IIgs
|
||||
sta $c029 ; re: John Brooks
|
||||
; need to skip this if on IIe card, otherwise goes to alt ROM
|
||||
STA MIXCLR ; For IIGS - bottom 4 lines to GR
|
||||
|
||||
NOTGS LDA #$30
|
||||
STA DELAY ; start with a modest 30FPS
|
||||
|
||||
; lda SETAN3 ; *** does something strange to low res
|
||||
sta CLR80VID ; turn 80 column off
|
||||
|
||||
JSR CLRLORES ; clear screen
|
||||
|
||||
JSR EMULATORCHECK ; check for Virtual II, MicroM8
|
||||
|
||||
LDY COLORMODE ; colormode set by EMULATORCHECK, or 00
|
||||
LDA SEEDSTABLELO,Y ; which "Seed" table to generate from
|
||||
STA SEEDADDRLO
|
||||
|
||||
LDA SEEDSTABLEHI,Y
|
||||
STA SEEDADDRHI
|
||||
|
||||
JSR GENERATETABLE ; create a 256byte table from 16bytes. Magic!
|
||||
|
||||
**************************************************
|
||||
* MAIN LOOP
|
||||
**************************************************
|
||||
|
||||
STARTANIMATION
|
||||
|
||||
JSR BLOAD ; BLOAD DATA
|
||||
|
||||
EACHFRAME
|
||||
LDA DATAHI ; image data starts at end of code.
|
||||
STA IMGHI
|
||||
LDA DATALO
|
||||
STA IMGLO
|
||||
|
||||
JSR INTERFRAMEDELAY
|
||||
LDX #$00
|
||||
STX PLOTROW
|
||||
LDY #$27 ; Y IS PLOTCOLUMN
|
||||
|
||||
EACHROW LDA LoLineTableL,X
|
||||
STA $0
|
||||
LDA LoLineTableH,X
|
||||
STA $1 ; now word/pointer at $0+$1 points to screen line
|
||||
|
||||
EACHPIXEL LDA (IMGLO),Y ; load byte at IMGLO,IMGHI + COLUMN
|
||||
TAX ; look up color from lookup table
|
||||
WHICHTABLE LDA COLORTABLE,X
|
||||
STA ($0),Y ; store byte at LINE + COLUMN
|
||||
|
||||
DECCOLUMN DEY ; next column of 2 pixels
|
||||
BPL EACHPIXEL ; Y IS PLOTCOLUMN
|
||||
LDY #$27 ; reset to col 0
|
||||
|
||||
INCROW INC PLOTROW
|
||||
LDA IMGLO
|
||||
CLC
|
||||
ADC #$28
|
||||
STA IMGLO
|
||||
BCS INCHI
|
||||
|
||||
CMPROW LDX PLOTROW
|
||||
CPX #$18
|
||||
BNE EACHROW
|
||||
|
||||
LDA #3
|
||||
STA sizehi
|
||||
LDA #$C0
|
||||
STA sizelo
|
||||
LDA #>BEGINDATA
|
||||
STA ldrhi
|
||||
LDA #<BEGINDATA
|
||||
STA ldrlo
|
||||
JSR hddrdwrpart ;read a frame of data
|
||||
|
||||
LOOPTY BCC EACHFRAME ; next frame in sequence
|
||||
|
||||
BCS STARTANIMATION ;hit EOF, restart
|
||||
|
||||
INCHI INC IMGHI
|
||||
BCS CMPROW
|
||||
|
||||
;/MAIN LOOP
|
||||
|
||||
**************************************************
|
||||
* By popular(?) demand - slows down framerate
|
||||
* based on keyboard input
|
||||
**************************************************
|
||||
PAUSE STA PAUSED ; stores #$A0 at PAUSED.
|
||||
STA STROBE
|
||||
|
||||
INTERFRAMEDELAY
|
||||
INC AUTOPLAYTIMER ; played a frame, increment autoplay timer
|
||||
LDA KEY ; check for keydown
|
||||
CMP PAUSED ; space bar = #$A0
|
||||
BEQ UNPAUSE
|
||||
|
||||
LDA PAUSED ; check for paused state
|
||||
BNE INTERFRAMEDELAY ; loop forever until space bar
|
||||
|
||||
|
||||
CHECKDELAY LDA KEY ; check for keydown
|
||||
|
||||
CMP #$A0 ; space bar, pause
|
||||
BEQ PAUSE
|
||||
|
||||
CMP #$AB ; plus
|
||||
BEQ INCDELAY ; if EQ, slow down (INC DELAY)
|
||||
CMP #$BD ; equals
|
||||
BEQ INCDELAY ; if EQ, slow down (INC DELAY)
|
||||
CMP #$AD ; minus
|
||||
BEQ DECDELAY ; if EQ, speed up (DEC DELAY)
|
||||
|
||||
CMP #$C3 ; c
|
||||
BEQ SWITCHCOLOR ; if C switch color mode
|
||||
CMP #$E3 ; C
|
||||
BEQ SWITCHCOLOR ; if C switch color mode
|
||||
|
||||
XLOOP LDX DELAY ; typical delay loop
|
||||
|
||||
DELAYLOOP LDY DELAY
|
||||
|
||||
YLOOP DEY
|
||||
BNE YLOOP
|
||||
|
||||
DEX
|
||||
BNE DELAYLOOP
|
||||
|
||||
RTS
|
||||
;/INTERFRAMEDELAY
|
||||
|
||||
UNPAUSE LDA #$0
|
||||
STA PAUSED
|
||||
STA STROBE
|
||||
JMP CHECKDELAY
|
||||
|
||||
INCDELAY STA STROBE
|
||||
INC DELAY
|
||||
JMP XLOOP
|
||||
|
||||
DECDELAY STA STROBE
|
||||
DEC DELAY
|
||||
JMP XLOOP
|
||||
|
||||
SWITCHCOLOR STA STROBE
|
||||
JSR COLORSWAP
|
||||
JMP XLOOP
|
||||
|
||||
|
||||
**************************************************
|
||||
* Check to see if I'm running in Virtual II or
|
||||
* real hardware (or a different emulator)
|
||||
* CARRY SET == running in VII
|
||||
**************************************************
|
||||
|
||||
EMULATORCHECK
|
||||
LDX #$00 ; reset X and Y
|
||||
LDY #$00
|
||||
CLC ; CARRY=VII found
|
||||
|
||||
CHKVII ; if C04F is and stays zero, INC X
|
||||
INX ; if X rolls over to zero, it's VII
|
||||
BEQ FOUNDVII
|
||||
LDA $C04F
|
||||
BEQ CHKVII ; 0, then may be VII
|
||||
|
||||
CHKM8 INY ; now to check for MICROM8
|
||||
CPY #$FF
|
||||
BEQ FOUNDM8
|
||||
CMP #$2E
|
||||
BEQ CHKM8 ; it's #$2E. Does it stay that way?
|
||||
|
||||
CLC ;set return value: no Virtual II or M8
|
||||
RTS
|
||||
FOUNDVII
|
||||
SEC ;set return value: found Virtual II
|
||||
JSR COLORSWAP ; otherwise, swap the color table (#1 is VII)
|
||||
RTS
|
||||
|
||||
FOUNDM8 ADC #$80 ; add over 128 = set OVerflow
|
||||
INC COLORMODE ; next color mode
|
||||
JSR COLORSWAP ; otherwise, swap the color table (#2 is M8)
|
||||
RTS
|
||||
|
||||
|
||||
**************************************************
|
||||
* Load "banana" into memory
|
||||
*
|
||||
**************************************************
|
||||
|
||||
|
||||
BLOAD
|
||||
LDA #>FILENAME
|
||||
STA namhi
|
||||
LDA #<FILENAME
|
||||
STA namlo
|
||||
LDA #3
|
||||
STA sizehi ;pre-read needed
|
||||
LDA #$C0
|
||||
STA sizelo ;load first frame
|
||||
LDA #>BEGINDATA
|
||||
STA ldrhi
|
||||
LDA #<BEGINDATA
|
||||
STA ldrlo
|
||||
JMP hddopendir ;open "data"
|
||||
|
||||
|
||||
FILENAME DB ENDNAME-NAME ;Length of name
|
||||
NAME ASC 'DATA' ;followed by the name
|
||||
ENDNAME EQU *
|
||||
|
||||
|
||||
**************************************************
|
||||
* Swap the color table with one for real
|
||||
* hardware/OpenEmulator
|
||||
* This works because the color tables are $FF bytes long.
|
||||
**************************************************
|
||||
|
||||
COLORSWAP INC COLORMODE ; next mode to cycle through
|
||||
|
||||
LDX COLORMODE ; load to X
|
||||
CPX #$05 ; is it now the text mode?
|
||||
BEQ TEXTSWAP
|
||||
; otherwise, be sure to be back in GR
|
||||
STX LORES ; low res graphics mode
|
||||
STX MIXCLR ; For IIGS - bottom 4 lines to GR
|
||||
|
||||
NEWTABLE
|
||||
LDA SEEDSTABLELO,X
|
||||
STA SEEDADDRLO
|
||||
|
||||
LDA SEEDSTABLEHI,X
|
||||
STA SEEDADDRHI
|
||||
|
||||
JSR GENERATETABLE ; create a 256byte table from 16bytes. Magic!
|
||||
|
||||
LDA COLORTABLEHI ; grab table address for LUT
|
||||
STA WHICHTABLE+2 ; put it in the code
|
||||
RTS
|
||||
|
||||
TEXTSWAP STA TXTSET ; set text mode
|
||||
SWAPTABLE LDA TEXTTABLEHI ; grab table address for LUT
|
||||
STA WHICHTABLE+2 ; put it in the code
|
||||
LDX #$FF
|
||||
STX COLORMODE
|
||||
RTS
|
||||
|
||||
|
||||
|
||||
**************************************************
|
||||
* Data Tables
|
||||
*
|
||||
* I was looking up each nibble, then converting
|
||||
* the two nibbles to a full byte, but it's
|
||||
* considerably faster to lookup a full byte at
|
||||
* a time, skipping manipulating nibbles.
|
||||
*
|
||||
**************************************************
|
||||
|
||||
**************************************************
|
||||
* Generates a 256 byte table, given a pattern of
|
||||
* 16 bytes. With more color tables in the program,
|
||||
* this saves me more than 1K of memory
|
||||
**************************************************
|
||||
|
||||
GENERATETABLE
|
||||
; start with address of "seed"
|
||||
LDA #$FF ; TABLEOFFSET = FF
|
||||
STA TABLEOFFSET ; where in the COLORTABLE I'm writing
|
||||
|
||||
LDA #$0F ; for X F to 0
|
||||
STA $07
|
||||
|
||||
GENXLOOP LDA #$0F ; for Y F to 0
|
||||
STA $06
|
||||
|
||||
GENYLOOP
|
||||
; STY $06 ; hang onto Y
|
||||
LDY $07
|
||||
LDA (SEEDADDRLO),Y ; (A=0F)
|
||||
ROL ; ROLx4 (A=20)
|
||||
ROL
|
||||
ROL
|
||||
ROL
|
||||
LDY $06 ; get Y back
|
||||
ADC (SEEDADDRLO),Y ; (A=FF)
|
||||
; STY $06 ; store Y at $06 for safekeeping
|
||||
LDY TABLEOFFSET
|
||||
STA COLORTABLE,Y
|
||||
DEC TABLEOFFSET
|
||||
; LDY $06
|
||||
; DEY
|
||||
DEC $06
|
||||
BPL GENYLOOP ; if Y = FF, next X
|
||||
GENDECX DEC $07
|
||||
BPL GENXLOOP ; if X=FF, done
|
||||
GENRTS RTS
|
||||
;/GENERATETABLE
|
||||
|
||||
|
||||
|
||||
TABLESEED HEX 00,02,01,04,08,03,06,0C,09,05,0A,07,0B,0E,0D,0F
|
||||
V2COLORTABLE HEX 00,02,06,01,04,05,08,03,0C,09,07,0A,0B,0E,0D,0F ; Low res colors from darkest to lightest for Virtual ][
|
||||
MICROM8 HEX 00,02,04,08,0C,01,09,05,06,0E,0D,03,0A,07,0B,0F
|
||||
THREEGRAYSTABLE HEX 00,02,02,02,02,06,06,06,06,06,06,07,07,07,07,0F ; W/B and 3 grays/shades of blue
|
||||
VIDHD HEX 00,02,01,04,08,03,09,05,0A,06,0C,07,0B,0E,0D,0F
|
||||
|
||||
SEEDSTABLEHI db >TABLESEED,>V2COLORTABLE,>MICROM8,>THREEGRAYSTABLE,>VIDHD
|
||||
SEEDSTABLELO db <TABLESEED,<V2COLORTABLE,<MICROM8,<THREEGRAYSTABLE,<VIDHD
|
||||
|
||||
|
||||
|
||||
COLORTABLE DS 256,$FF
|
||||
|
||||
TEXTTABLE ASC " '''````~~~^^",A2,A2 ; Low res colors from darkest to lightest for Virtual ][
|
||||
ASC "..'''````~~~^^",A2,A2 ; A2 = ""
|
||||
ASC "..''~^!ll/?TYYFF"
|
||||
ASC ",,''!ll??TTYY7FF"
|
||||
ASC ",,''!l??TYYY74FF"
|
||||
ASC "__'!/llLI?7499PP"
|
||||
ASC "--'!/lLII?7499PP"
|
||||
ASC "::!/l)>LJJ7499PP"
|
||||
ASC ";;!/l)>CC66999RR"
|
||||
ASC "ii/11)>CCOO999RR"
|
||||
ASC "iil11UUZQGB988RR"
|
||||
ASC "vv1]]EEZQGB888RR"
|
||||
ASC "uu1]]WWZQGB888@@"
|
||||
ASC "oo[[[}}}JJNNMM@@"
|
||||
ASC "wwhhddbbkkKK##**"
|
||||
ASC "mmhhddbbkkKK##&*"
|
||||
|
||||
TEXTTABLEHI db >TEXTTABLE
|
||||
COLORTABLEHI db >COLORTABLE
|
||||
|
||||
|
||||
FRAMESTABLE HEX 03,07,0B,0F,12,16,1A,1E,21,25,29,2D,30,34,38,3C ; how many frames transferred? HI byte lookup table
|
||||
HEX 3F,43,47,4B,4E,52,56,5A,5D,61,65,69,6C,70,74,78
|
||||
HEX 7B,7F,83,87,8A,8E,92,96,99,9D,A1,A5,A8,AC,B0,B4
|
||||
|
||||
**************************************************
|
||||
* Lores/Text lines
|
||||
* Thanks to Dagen Brock for this.
|
||||
**************************************************
|
||||
Lo01 equ $400
|
||||
Lo02 equ $480
|
||||
Lo03 equ $500
|
||||
Lo04 equ $580
|
||||
Lo05 equ $600
|
||||
Lo06 equ $680
|
||||
Lo07 equ $700
|
||||
Lo08 equ $780
|
||||
Lo09 equ $428
|
||||
Lo10 equ $4a8
|
||||
Lo11 equ $528
|
||||
Lo12 equ $5a8
|
||||
Lo13 equ $628
|
||||
Lo14 equ $6a8
|
||||
Lo15 equ $728
|
||||
Lo16 equ $7a8
|
||||
Lo17 equ $450
|
||||
Lo18 equ $4d0
|
||||
Lo19 equ $550
|
||||
Lo20 equ $5d0
|
||||
* the "plus four" lines
|
||||
Lo21 equ $650
|
||||
Lo22 equ $6d0
|
||||
Lo23 equ $750
|
||||
Lo24 equ $7d0
|
||||
|
||||
LoLineTable da Lo01,Lo02,Lo03,Lo04
|
||||
da Lo05,Lo06,Lo07,Lo08
|
||||
da Lo09,Lo10,Lo11,Lo12
|
||||
da Lo13,Lo14,Lo15,Lo16
|
||||
da Lo17,Lo18,Lo19,Lo20
|
||||
da Lo21,Lo22,Lo23,Lo24
|
||||
|
||||
|
||||
** Here we split the table for an optimization
|
||||
** We can directly get our line numbers now
|
||||
** Without using ASL
|
||||
LoLineTableH db >Lo01,>Lo02,>Lo03
|
||||
db >Lo04,>Lo05,>Lo06
|
||||
db >Lo07,>Lo08,>Lo09
|
||||
db >Lo10,>Lo11,>Lo12
|
||||
db >Lo13,>Lo14,>Lo15
|
||||
db >Lo16,>Lo17,>Lo18
|
||||
db >Lo19,>Lo20,>Lo21
|
||||
db >Lo22,>Lo23,>Lo24
|
||||
LoLineTableL db <Lo01,<Lo02,<Lo03
|
||||
db <Lo04,<Lo05,<Lo06
|
||||
db <Lo07,<Lo08,<Lo09
|
||||
db <Lo10,<Lo11,<Lo12
|
||||
db <Lo13,<Lo14,<Lo15
|
||||
db <Lo16,<Lo17,<Lo18
|
||||
db <Lo19,<Lo20,<Lo21
|
||||
db <Lo22,<Lo23,<Lo24
|
||||
|
||||
DATALO DB <BEGINDATA
|
||||
DATAHI DB >BEGINDATA
|
||||
|
||||
BEGINDATA EQU *
|
141
LOADERT.s
Normal file
141
LOADERT.s
Normal file
@ -0,0 +1,141 @@
|
||||
DSK LOADER
|
||||
|
||||
**************************************************
|
||||
* boot stub at $2000 to BLOAD real program at $0C00, JMP $0C00
|
||||
**************************************************
|
||||
* Variables
|
||||
**************************************************
|
||||
|
||||
|
||||
**************************************************
|
||||
* Apple Standard Memory Locations
|
||||
**************************************************
|
||||
CLRLORES EQU $F832
|
||||
LORES EQU $C050
|
||||
TXTSET EQU $C051
|
||||
MIXCLR EQU $C052
|
||||
MIXSET EQU $C053
|
||||
TXTPAGE1 EQU $C054
|
||||
TXTPAGE2 EQU $C055
|
||||
KEY EQU $C000
|
||||
C80STOREOF EQU $C000
|
||||
C80STOREON EQU $C001
|
||||
STROBE EQU $C010
|
||||
SPEAKER EQU $C030
|
||||
VBL EQU $C02E
|
||||
RDVBLBAR EQU $C019 ;not VBL (VBL signal low
|
||||
WAIT EQU $FCA8
|
||||
RAMWRTAUX EQU $C005
|
||||
RAMWRTMAIN EQU $C004
|
||||
SETAN3 EQU $C05E ;Set annunciator-3 output to 0
|
||||
SET80VID EQU $C00D ;enable 80-column display mode (WR-only)
|
||||
CLR80VID EQU $C00C
|
||||
HOME EQU $FC58 ; clear the text screen
|
||||
CH EQU $24 ; cursor Horiz
|
||||
CV EQU $25 ; cursor Vert
|
||||
VTAB EQU $FC22 ; Sets the cursor vertical position (from CV)
|
||||
COUT EQU $FDED ; Calls the output routine whose address is stored in CSW,
|
||||
; normally COUTI
|
||||
STROUT EQU $DB3A ;Y=String ptr high, A=String ptr low
|
||||
|
||||
ALTTEXT EQU $C055
|
||||
ALTTEXTOFF EQU $C054
|
||||
|
||||
ROMINIT EQU $FB2F
|
||||
ROMSETKBD EQU $FE89
|
||||
ROMSETVID EQU $FE93
|
||||
|
||||
ALTCHAR EQU $C00F ; enables alternative character set - mousetext
|
||||
|
||||
BLINK EQU $F3
|
||||
SPEED EQU $F1
|
||||
|
||||
BELL EQU $FF3A ; Monitor BELL routine
|
||||
CROUT EQU $FD8E ; Monitor CROUT routine
|
||||
PRBYTE EQU $FDDA ; Monitor PRBYTE routine
|
||||
MLI EQU $BF00 ; ProDOS system call
|
||||
OPENCMD EQU $C8 ; OPEN command index
|
||||
READCMD EQU $CA ; READ command index
|
||||
CLOSECMD EQU $CC ; CLOSE command index
|
||||
|
||||
|
||||
**************************************************
|
||||
* START - sets up various fiddly zero page bits
|
||||
**************************************************
|
||||
|
||||
ORG $2000 ; PROGRAM DATA STARTS AT $2000
|
||||
|
||||
JSR BLOAD ; BLOAD DATA
|
||||
|
||||
JMP $0800 ; jump to the new location
|
||||
|
||||
**************************************************
|
||||
* Load "GREENSCALE" into memory at $0800
|
||||
**************************************************
|
||||
|
||||
|
||||
BLOAD JSR OPEN ;open "PRORWTS2"
|
||||
JSR READ
|
||||
JSR ERROR
|
||||
JSR CLOSE
|
||||
JSR ERROR
|
||||
JSR $800 ;init ProRWTS2
|
||||
LDA #>FILENAME2
|
||||
STA OPENLIST+2
|
||||
LDA #<FILENAME2
|
||||
STA OPENLIST+1
|
||||
JSR OPEN ;open "DATA"
|
||||
JSR READ
|
||||
JSR ERROR
|
||||
JSR CLOSE
|
||||
JSR ERROR
|
||||
RTS ;Otherwise done
|
||||
|
||||
OPEN JSR MLI ;Perform call
|
||||
DB OPENCMD ;CREATE command number
|
||||
DW OPENLIST ;Pointer to parameter list
|
||||
JSR ERROR ;If error, display it
|
||||
LDA REFERENCE
|
||||
STA READLIST+1
|
||||
STA CLOSELIST+1
|
||||
RTS
|
||||
|
||||
READ JSR MLI
|
||||
DB READCMD
|
||||
DW READLIST
|
||||
RTS
|
||||
|
||||
CLOSE JSR MLI
|
||||
DB CLOSECMD
|
||||
DW CLOSELIST
|
||||
RTS
|
||||
|
||||
ERROR JSR PRBYTE ;Print error code
|
||||
JSR BELL ;Ring the bell
|
||||
JSR CROUT ;Print a carriage return
|
||||
RTS
|
||||
|
||||
OPENLIST DB $03 ; parameter list for OPEN command
|
||||
DW FILENAME1
|
||||
DA $6000 ; not near me
|
||||
REFERENCE DB $00 ; reference to opened file
|
||||
|
||||
READLIST DB $04
|
||||
DB $00 ; REFERENCE written here after OPEN
|
||||
DB $00,$08 ; write to $0800
|
||||
DB $FF,$FF ; read as much as $FFFF - should error out with EOF before that.
|
||||
TRANSFERRED DB $00,$00
|
||||
|
||||
CLOSELIST DB $01
|
||||
DB $00
|
||||
|
||||
FILENAME1 DB ENDNAME1-NAME1 ;Length of name
|
||||
NAME1 ASC 'PRORWTS2T' ;followed by the name
|
||||
ENDNAME1 EQU *
|
||||
|
||||
FILENAME2 DB ENDNAME2-NAME2 ;Length of name
|
||||
NAME2 ASC 'BADAPPLET' ;followed by the name
|
||||
ENDNAME2 EQU *
|
||||
|
||||
|
||||
|
3295
PRORWTS2T.S
Normal file
3295
PRORWTS2T.S
Normal file
File diff suppressed because it is too large
Load Diff
BIN
prorwts2t#060800
Normal file
BIN
prorwts2t#060800
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user