mirror of
https://github.com/a2geek/jewel-of-kaldun.git
synced 2024-09-27 08:54:40 +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
|
include local.config
|
||||||
|
|
||||||
# Local stuff:
|
# Local stuff:
|
||||||
SRC =
|
# > PGMS is a list of direct assembler targetrs
|
||||||
PGM = jok
|
PGMS = jok.system.s
|
||||||
SYS = jok.system
|
# > SRC is a list of all source files used to trigger a rebuild
|
||||||
|
SRC = $(PGMS)
|
||||||
|
SYS = JOK.SYSTEM
|
||||||
TYPE = SYS
|
TYPE = SYS
|
||||||
ADDR = 0x2000
|
ADDR = 0x2000
|
||||||
TMPL = template.po
|
TMPL = template.po
|
||||||
DISK = jewel-of-kaldun.po
|
APP = jewel-of-kaldun
|
||||||
|
DISK = $(APP).po
|
||||||
|
ZIP = $(APP).zip
|
||||||
|
|
||||||
|
|
||||||
jok: $(SRC)
|
jok: $(SRC)
|
||||||
$(ASM) $(PGM).s
|
$(ASM) $(PGMS)
|
||||||
cp $(TMPL) $(DISK)
|
cp $(TMPL) $(DISK)
|
||||||
cat $(PGM) | $(AC) -p $(DISK) $(SYS) $(TYPE) $(ADDR)
|
cat $(SYS) | $(AC) -p $(DISK) $(SYS) $(TYPE) $(ADDR)
|
||||||
$(AC) -k $(DISK) $(SYS)
|
$(AC) -k $(DISK) $(SYS)
|
||||||
$(AC) -ll $(DISK)
|
$(AC) -ll $(DISK)
|
||||||
zip $(PGM).zip $(DISK)
|
zip $(ZIP) $(DISK)
|
||||||
|
|
||||||
clean:
|
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…
Reference in New Issue
Block a user