mirror of
https://github.com/a2geek/jewel-of-kaldun.git
synced 2025-04-20 01:36:59 +00:00
Fixing build; adding first set of work to make bootable disk; adding AppleSoft BASIC programs that generate some of the initial graphics.
This commit is contained in:
parent
8de884d561
commit
dd81cd05dd
22
Makefile
22
Makefile
@ -2,23 +2,29 @@
|
||||
include local.config
|
||||
|
||||
# Local stuff:
|
||||
SRC =
|
||||
PGM = jok
|
||||
SYS = jok.system
|
||||
# > PGMS is a list of direct assembler targetrs
|
||||
PGMS = jok.system.s
|
||||
# > SRC is a list of all source files used to trigger a rebuild
|
||||
SRC = $(PGMS)
|
||||
SYS = JOK.SYSTEM
|
||||
TYPE = SYS
|
||||
ADDR = 0x2000
|
||||
TMPL = template.po
|
||||
DISK = jewel-of-kaldun.po
|
||||
APP = jewel-of-kaldun
|
||||
DISK = $(APP).po
|
||||
ZIP = $(APP).zip
|
||||
|
||||
|
||||
jok: $(SRC)
|
||||
$(ASM) $(PGM).s
|
||||
$(ASM) $(PGMS)
|
||||
cp $(TMPL) $(DISK)
|
||||
cat $(PGM) | $(AC) -p $(DISK) $(SYS) $(TYPE) $(ADDR)
|
||||
cat $(SYS) | $(AC) -p $(DISK) $(SYS) $(TYPE) $(ADDR)
|
||||
$(AC) -k $(DISK) $(SYS)
|
||||
$(AC) -ll $(DISK)
|
||||
zip $(PGM).zip $(DISK)
|
||||
zip $(ZIP) $(DISK)
|
||||
|
||||
clean:
|
||||
rm $(PGM) $(DISK) $(PGM).zip
|
||||
rm $(PGM) $(DISK) $(ZIP)
|
||||
rm *_Output.txt _FileInformation.txt
|
||||
rm $(SYS)
|
||||
|
||||
|
22
gravestone.bas
Executable file
22
gravestone.bas
Executable file
@ -0,0 +1,22 @@
|
||||
10 HGR
|
||||
20 GOSUB 200
|
||||
30 GOSUB 300
|
||||
90 END
|
||||
200 HCOLOR= 1
|
||||
210 FOR Y = 90 TO 159 STEP 4
|
||||
220 FOR X = 0 TO 279 STEP 8
|
||||
230 HPLOT X,Y TO X +3,Y
|
||||
240 NEXT X,Y
|
||||
250 FOR Y = 92 TO 159 STEP 4
|
||||
260 FOR X = 5 TO 276 STEP 8
|
||||
270 HPLOT X,Y TO X +3,Y
|
||||
280 NEXT X,Y
|
||||
290 RETURN
|
||||
300 HCOLOR= 3
|
||||
310 FOR D = 0 TO 3.14159 STEP 0.02
|
||||
320 X = 139 -35 * COS(D)
|
||||
330 Y = 90 -20 * SIN(D)
|
||||
340 HPLOT X,Y TO X,140
|
||||
345 IF INT(Y) < > INT(OY) THEN PRINT "(x,y)="; INT(X);","; INT(Y):OY = Y
|
||||
350 NEXT D
|
||||
360 RETURN
|
23
jewel-draw1.bas
Executable file
23
jewel-draw1.bas
Executable file
@ -0,0 +1,23 @@
|
||||
10 HGR : POKE -16302,0
|
||||
15 GOSUB 200: REM background
|
||||
20 D1 = 70:D2 = 77:D3 = 80
|
||||
30 DEF FN FX(A) = COS(D) *Z
|
||||
40 DEF FN FY(A) = SIN(D) *Z
|
||||
50 FOR D = 0 TO 6.28 STEP 0.01
|
||||
55 HCOLOR= 4
|
||||
60 Z = 60: GOSUB 100
|
||||
80 NEXT D
|
||||
90 PRINT CHR$(4);"-jewel-draw2"
|
||||
100 X = FN FX(1):Y = FN FY(1)
|
||||
110 HPLOT 140,96 TO 140 -X,96 -Y
|
||||
120 RETURN
|
||||
200 HCOLOR= 6
|
||||
210 FOR Y = 0 TO 191 STEP 4
|
||||
220 FOR X = 0 TO 279 STEP 8
|
||||
230 HPLOT X,Y TO X +3,Y
|
||||
240 NEXT X,Y
|
||||
250 FOR Y = 2 TO 191 STEP 4
|
||||
260 FOR X = 3 TO 276 STEP 8
|
||||
270 HPLOT X,Y TO X +3,Y
|
||||
280 NEXT X,Y
|
||||
290 RETURN
|
15
jewel-draw2.bas
Executable file
15
jewel-draw2.bas
Executable file
@ -0,0 +1,15 @@
|
||||
20 D1 = 60:D2 = 73:D3 = 77
|
||||
30 DEF FN FX(A) = COS(D) *Z
|
||||
40 DEF FN FY(A) = SIN(D) *Z
|
||||
50 FOR D = 0 TO 6.28 STEP 0.01
|
||||
55 HCOLOR= 3
|
||||
60 Z = 55: GOSUB 100
|
||||
65 HCOLOR= 1
|
||||
70 Z = 53: GOSUB 100
|
||||
80 NEXT D
|
||||
82 HCOLOR= 7:Z = D3:: FOR D = 0 TO 6.28 STEP 0.1
|
||||
83 X = FN FX(1):Y = FN FY(1): HPLOT 140 -D1 * COS(D),96 -D1 * SIN(D) TO 140 -X,96 -Y: NEXT D
|
||||
90 END
|
||||
100 X = FN FX(1):Y = FN FY(1)
|
||||
110 HPLOT 140,96 TO 140 -X,96 -Y
|
||||
120 RETURN
|
278
jok.system.s
Executable file
278
jok.system.s
Executable file
@ -0,0 +1,278 @@
|
||||
********************************
|
||||
* Jewel of Kaldun loader *
|
||||
* program. *
|
||||
********************************
|
||||
|
||||
TYP $FF ; system program
|
||||
ORG $2000 ; they originate @ $2000
|
||||
EXP OFF ; macro expansion
|
||||
TR ON ; truncate
|
||||
|
||||
* General Macros --
|
||||
|
||||
MOVB MAC
|
||||
LDA ]1
|
||||
STA ]2
|
||||
EOM
|
||||
|
||||
MOVW MAC
|
||||
MOVB ]1;]2
|
||||
IF #=]1
|
||||
MOVB ]1/$100;]2+1
|
||||
ELSE
|
||||
MOVB ]1+1;]2+1
|
||||
FIN
|
||||
EOM
|
||||
|
||||
* ProDOS Command Codes --
|
||||
|
||||
OPEN = $C8 ; open file
|
||||
READ = $CA ; read file
|
||||
CLOSE = $CC ; close file
|
||||
|
||||
* ProDOS addresses --
|
||||
|
||||
MLI = $BF00
|
||||
|
||||
* ProDOS Macro commands --
|
||||
* call: @name parameter #1;parameter #2; ... ;parameter #n
|
||||
|
||||
@OPEN MAC ; @open path;file_buffer; (1K)
|
||||
MOVW ]1;D:C8PATH ; reference_number (ret)
|
||||
MOVW ]2;D:C8BUFF
|
||||
JSR _OPEN
|
||||
MOVB D:C8REF;]3
|
||||
EOM
|
||||
|
||||
@READ MAC ; @read ref_num;input_buff;
|
||||
MOVB ]1;D:CAREF ; requested_length
|
||||
MOVW ]2;D:CABUFF ; (actual_length returned)
|
||||
MOVW ]3;D:CARLEN
|
||||
JSR _READ
|
||||
EOM
|
||||
|
||||
@CLOSE MAC ; @close reference_number
|
||||
MOVB ]1;D:CCREF
|
||||
JSR _CLOSE
|
||||
EOM
|
||||
|
||||
* Memory locations:
|
||||
|
||||
PTR EQU $00 ; pointer for checksum
|
||||
LINE10 EQU $05A8 ; text line #10
|
||||
LINE12 EQU $06A8 ; " " #12
|
||||
LINE15 EQU $0450 ; " " #15
|
||||
LINE24 EQU $07D0 ; " " #24
|
||||
JOK_BUFF EQU $3000 ; ProDOS buffer
|
||||
JOK_ADDR EQU $6000 ; Address to load at
|
||||
JOK_LEN EQU $5EFF ; Length of JOK (this is max)
|
||||
JOK2BUFF EQU $3000
|
||||
JOK2ADDR EQU $0800
|
||||
JOK2LEN EQU $07FF
|
||||
TIT_BUFF EQU $3000 ; ProDOS buffer
|
||||
TIT_ADDR EQU $4000 ; Address to load at
|
||||
TIT_LEN EQU $2000 ; Length of Title (full screen)
|
||||
|
||||
********************************
|
||||
* Main program: *
|
||||
********************************
|
||||
LDA #149 ; disable 80 columns
|
||||
JSR $FDED
|
||||
JSR $FB2F ; text
|
||||
JSR $FC58 ; home
|
||||
* Draw title lines:
|
||||
LDY #13
|
||||
:LINE10 LDA DATA10-1,Y
|
||||
STA LINE10+12,Y
|
||||
DEY
|
||||
BNE :LINE10
|
||||
LDY #26
|
||||
:LINE12 LDA DATA12-1,Y
|
||||
STA LINE12+6,Y
|
||||
DEY
|
||||
BNE :LINE12
|
||||
LDY #19
|
||||
:LINE15 LDA DATA15A-1,Y
|
||||
STA LINE15+9,Y
|
||||
DEY
|
||||
BNE :LINE15
|
||||
* Clear memory:
|
||||
LDY #24 ; clear the bitmap of the
|
||||
LDA #0 ; system...
|
||||
:CLRMEM STA $BF58-1,Y
|
||||
DEY
|
||||
BPL :CLRMEM
|
||||
LDA #$CF ; and set back to memory
|
||||
STA $BF58 ; as being empty except
|
||||
LDA #$01 ; ProDOS.
|
||||
STA $BF6F
|
||||
* Load in Title:
|
||||
@OPEN #TIT_NAME;#TIT_BUFF;REFNUM
|
||||
BCS :HELPERR ; can't quite make it.
|
||||
@READ REFNUM;#TIT_ADDR;#TIT_LEN
|
||||
@CLOSE REFNUM
|
||||
* Print version of Loader:
|
||||
LDY #19
|
||||
:LINE15B LDA DATA15B-1,Y
|
||||
STA LINE15+9,Y
|
||||
DEY
|
||||
BNE :LINE15B
|
||||
* Calculate checksum:
|
||||
JSR CHECKSUM
|
||||
* Load in JOK:
|
||||
@OPEN #JOK_NAME;#JOK_BUFF;REFNUM
|
||||
:HELPERR BCS :HELPER2
|
||||
@READ REFNUM;#JOK_ADDR;#JOK_LEN
|
||||
@CLOSE REFNUM
|
||||
* Load in JOK end game:
|
||||
@OPEN #JOK2NAME;#JOK2BUFF;REFNUM
|
||||
:HELPER2 BCS LOADERR2
|
||||
@READ REFNUM;#JOK2ADDR;#JOK2LEN
|
||||
@CLOSE REFNUM
|
||||
* Check Checksum: (A0E647)
|
||||
LDA SUM+2
|
||||
CMP #$A0
|
||||
BNE DATACORR
|
||||
LDA SUM+1
|
||||
CMP #$E6
|
||||
BNE DATACORR
|
||||
LDA SUM
|
||||
CMP #$47
|
||||
BNE DATACORR
|
||||
* Start JOK:
|
||||
JMP JOK_ADDR ; begin game!
|
||||
|
||||
LOADERR LDY #40
|
||||
:LOOP LDA ERRORMSG-1,Y
|
||||
STA LINE24-1,Y
|
||||
DEY
|
||||
BNE :LOOP
|
||||
BEQ ERRORXX
|
||||
LOADERR2 LDY #40
|
||||
:LOOP2 LDA ERRORMS2-1,Y
|
||||
STA LINE24-1,Y
|
||||
DEY
|
||||
BNE :LOOP2
|
||||
ERRORXX JSR $FF3A ; bell
|
||||
FOREVER LDA #<$0200 ; sets $03F0 (BRK address) to
|
||||
STA $3F0 ; point at $0200.
|
||||
STA $201 ; And, sets $0200:4C 00 02
|
||||
LDA #>$0200 ; ie, JMP $0200.
|
||||
STA $3F1 ; ... the begining of FOREVER!
|
||||
STA $202
|
||||
LDA #$4C
|
||||
STA $200
|
||||
LDA $3F3 ; scramble power-up byte, so
|
||||
EOR #%11111111 ; power-up automatically occurs
|
||||
STA $3F3 ; upon RESET.
|
||||
LDY #0 ; prepare to erase memory from
|
||||
LDA #<$4000 ; $4000 - $BEFF ...
|
||||
STA $00
|
||||
LDA #>$4000
|
||||
STA $01
|
||||
LDA #0
|
||||
:ERASE STA ($00),Y ; erase a page.
|
||||
INY
|
||||
BNE :ERASE
|
||||
INC $01 ; add 1 to hi byte
|
||||
LDA $01
|
||||
CMP #$BF ; at end?
|
||||
BLT :ERASE ; nope, do more
|
||||
LDA #$20 ; yes: Erase loader program.
|
||||
STA $01 ; will exit when BRK
|
||||
JMP :ERASE ; encountered.
|
||||
|
||||
DATACORR LDY #28
|
||||
:LOOP LDA DATA15C-1,Y
|
||||
STA LINE15+5,Y
|
||||
DEY
|
||||
BNE :LOOP
|
||||
JSR $FF3A ; bell
|
||||
JMP FOREVER
|
||||
|
||||
ERRORMSG ASC "ERROR: JEWEL.OF.KALDUN IS UNACCESSABLE!"
|
||||
ERRORMS2 ASC "ERROR: JEWEL.END.GAME IS UNACCESSABLE!"
|
||||
JOK2NAME STR "JEWEL.END.GAME"
|
||||
JOK_NAME STR "JEWEL.OF.KALDUN"
|
||||
TIT_NAME STR "JEWEL.TITLE.PIC"
|
||||
REFNUM HEX 00
|
||||
DATA10 INV " PLEASE WAIT "
|
||||
DATA12 ASC "JEWEL OF KALDUN IS LOADING"
|
||||
DATA15A ASC " L O A D E R "
|
||||
DATA15B ASC "LOADER: VERSION 1.3"
|
||||
DATA15C ASC "CANNOT LOAD: DATA CORRUPTED!"
|
||||
|
||||
* ProDOS Routines --
|
||||
|
||||
_OPEN JSR MLI ; perform open function
|
||||
DFB OPEN
|
||||
DW D:OPEN
|
||||
RTS
|
||||
|
||||
_READ JSR MLI ; perform read function
|
||||
DFB READ
|
||||
DW D:READ
|
||||
RTS
|
||||
|
||||
_CLOSE JSR MLI ; perform close function
|
||||
DFB CLOSE
|
||||
DW D:CLOSE
|
||||
RTS
|
||||
|
||||
* ProDOS data/parameters --
|
||||
|
||||
D:OPEN DFB $3 ; 3 parameters
|
||||
D:C8PATH DW 0 ; address of path name
|
||||
D:C8BUFF DW 0 ; address of file buffer
|
||||
D:C8REF DFB 0 ; reference number (returned)
|
||||
|
||||
D:READ DFB $4 ; 4 parameters
|
||||
D:CAREF DFB 0 ; reference number
|
||||
D:CABUFF DW 0 ; address of data buffer
|
||||
D:CARLEN DW 0 ; requested length
|
||||
D:CAALEN DW 0 ; actual length
|
||||
|
||||
D:CLOSE DFB $1 ; 1 parameter
|
||||
D:CCREF DFB 0 ; reference number
|
||||
|
||||
********************************
|
||||
* Compute a checksum on the *
|
||||
* graphic title page after *
|
||||
* being loaded into memory. *
|
||||
********************************
|
||||
CHECKSUM LDA #$00 ; point to location
|
||||
STA PTR ; $4000, beginning
|
||||
LDA #$40 ; of graphics page
|
||||
STA PTR+1
|
||||
LDA #0 ; initialize checksum
|
||||
STA SUM ; to be zero.
|
||||
STA SUM+1
|
||||
STA SUM+2
|
||||
LDY #0
|
||||
:LOOP CLC
|
||||
LDA (PTR),Y ; grab byte
|
||||
ADC SUM ; and add it to
|
||||
STA SUM ; the sum.
|
||||
ADC SUM+1 ; add following
|
||||
STA SUM+1 ; carry bits.
|
||||
ADC SUM+2
|
||||
STA SUM+2
|
||||
INY
|
||||
BNE :LOOP
|
||||
INC PTR+1
|
||||
CMP #$60 ; check if done
|
||||
BLT :LOOP ; if not, continue
|
||||
LDA SUM+2 ; dump sum to screen.
|
||||
JSR $FDDA ; will be replaced to
|
||||
LDA SUM+1 ; actually check if a
|
||||
JSR $FDDA ; an unmodified page
|
||||
LDA SUM ; was loaded.
|
||||
JSR $FDDA
|
||||
RTS
|
||||
SUM HEX 000000 ; check sum
|
||||
|
||||
* Save file:
|
||||
|
||||
SAV JOK.SYSTEM
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user