mirror of
https://github.com/a2geek/jewel-of-kaldun.git
synced 2025-03-21 14:29:33 +00:00
First functional build with make, Merlin32, and AppleCommander!
This commit is contained in:
parent
d24afe1c8b
commit
953fa9d1b5
19
Makefile
19
Makefile
@ -2,13 +2,17 @@
|
||||
include local.config
|
||||
|
||||
# Local stuff:
|
||||
# > PGMS is a list of direct assembler targetrs
|
||||
PGMS = jok.system.s newgame.s
|
||||
# > SRC is a list of all source files used to trigger a rebuild
|
||||
SRC = $(PGMS) castle-level-1.s castle-level-2.s variables.s
|
||||
SRC = castle-level-1.s castles.s display.s filing.s graphics.s input.output.s jok.system.s \
|
||||
math.mac.s monsters.s noise.s prolib.mac.s reset.s story.s variables.s \
|
||||
castle-level-2.s convert.s endgame.s general.mac.s io.mac.s jewel.of.kaldun.s \
|
||||
main.control.s math.s newgame.s places.s prolib.s shapes.s title.s jewel.end.game.s \
|
||||
jok.segments.s
|
||||
JOK_SYS = JOK.SYSTEM
|
||||
JOK_PIC = JOK.TITLE.PIC
|
||||
JOK_PIC = JEWEL.TITLE.PIC
|
||||
NEWGAME = NEWGAME
|
||||
JOK_PGM = JEWEL.OF.KALDUN
|
||||
JOK_END = JEWEL.END.GAME
|
||||
TMPL = template.po
|
||||
APP = jewel-of-kaldun
|
||||
DISK = $(APP).po
|
||||
@ -18,6 +22,7 @@ ZIP = $(APP).zip
|
||||
jok: $(SRC)
|
||||
$(ASM) jok.system.s
|
||||
$(ASM) newgame.s
|
||||
$(ASM) jok.segments.s
|
||||
cp $(TMPL) $(DISK)
|
||||
cat $(JOK_SYS).bin | $(AC) -p $(DISK) $(JOK_SYS) SYS 0x2000
|
||||
$(AC) -k $(DISK) $(JOK_SYS)
|
||||
@ -25,11 +30,15 @@ jok: $(SRC)
|
||||
$(AC) -k $(DISK) $(JOK_PIC)
|
||||
cat $(NEWGAME).bin | $(AC) -p $(DISK) $(NEWGAME) BIN 0x1000
|
||||
$(AC) -k $(DISK) $(NEWGAME)
|
||||
cat $(JOK_PGM).bin | $(AC) -p $(DISK) $(JOK_PGM) BIN 0x6000
|
||||
$(AC) -k $(DISK) $(JOK_PGM)
|
||||
cat $(JOK_END).bin | $(AC) -p $(DISK) $(JOK_END) BIN 0x0800
|
||||
$(AC) -k $(DISK) $(JOK_END)
|
||||
$(AC) -ll $(DISK)
|
||||
zip $(ZIP) $(DISK)
|
||||
|
||||
clean:
|
||||
rm $(PGM) $(DISK) $(ZIP)
|
||||
rm *_Output.txt _FileInformation.txt
|
||||
rm $(JOK_SYS).bin $(NEWGAME).bin
|
||||
rm $(JOK_SYS).bin $(NEWGAME).bin $(JOK_PGM).bin $(JOK_END).bin
|
||||
|
||||
|
375
castles.s
Executable file
375
castles.s
Executable file
@ -0,0 +1,375 @@
|
||||
********************************
|
||||
* Draw CASTLE1, CASTLE2, and *
|
||||
* lower the drawbridge for *
|
||||
* castle #1. *
|
||||
* Uses: GENERAL.MAC *
|
||||
********************************
|
||||
|
||||
********************************
|
||||
* Draw King Aradeas' castle *
|
||||
********************************
|
||||
|
||||
CASTLE1 ENT
|
||||
LDX #5
|
||||
JSR HCOLOR ; HCOLOR = 5
|
||||
MOVB #159;EY ; set starting points:
|
||||
NILW EX ; HPLOT 0,? TO 0,159
|
||||
NILW SX
|
||||
MOVB #5;CTR0
|
||||
:0 JSR PARAPET1 ; draw 5 sets of parapets
|
||||
DEC CTR0
|
||||
BNE :0
|
||||
MOVB #10;SY ; draw a bar 10 pixels wide
|
||||
JSR PARAPET0 ; !
|
||||
MOVB #0;SY ; !
|
||||
JSR PARAPET0 ; !
|
||||
MOVB #10;SY ; !
|
||||
JSR PARAPET0 ; finished tower
|
||||
MOVW #90;SX ; prepare for sloped left
|
||||
MOVW #90;EX ; side of tower
|
||||
MOVB #0;SY
|
||||
MOVB #20;EY
|
||||
JSR SLOPDOWN
|
||||
MOVW #130;SX ; prepare for sloped right
|
||||
MOVW #130;EX ; side of tower
|
||||
MOVB #0;SY
|
||||
JSR SLOPUP
|
||||
LDX #7 ; HCOLOR = 7
|
||||
JSR HCOLOR
|
||||
MOVB #40;SY ; and prepare for drawing the
|
||||
NILW SX ; outline of castle
|
||||
MOVW #10;EX
|
||||
MOVB #40;EY
|
||||
MOVB #5;CTR0
|
||||
:1 JSR OUTLINE1 ; draw outline of parapets
|
||||
DEC CTR0
|
||||
BNE :1
|
||||
MOVW #100;SX ; begin outlining the tower
|
||||
MOVB #159;SY
|
||||
MOVW #100;EX
|
||||
MOVB #30;EY
|
||||
JSR DRAWLINE
|
||||
MOVW #90;EX
|
||||
MOVB #20;EY
|
||||
JSR LINETO
|
||||
MOVB #0;EY
|
||||
JSR LINETO
|
||||
MOVB #0;SY
|
||||
MOVW #90;SX
|
||||
MOVW #100;EX
|
||||
MOVB #2;CTR0
|
||||
:4 JSR OUTLINE1 ; now outlining upper parapets
|
||||
DEC CTR0 ; of the tower
|
||||
BNE :4
|
||||
MOVW #140;EX ; and finish off the tower.
|
||||
JSR LINETO
|
||||
MOVB #20;EY
|
||||
JSR LINETO
|
||||
MOVW #130;EX
|
||||
MOVB #31;EY
|
||||
JSR LINETO
|
||||
MOVB #159;EY
|
||||
JSR LINETO
|
||||
NILW SX ; draw the bottom line.
|
||||
MOVB #159;SY
|
||||
MOVW #279;EX
|
||||
JSR DRAWLINE
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Draw the Castle of Kaldun. *
|
||||
********************************
|
||||
|
||||
CASTLE2 LDX #5
|
||||
JSR HCOLOR
|
||||
MOVB #159;EY
|
||||
MOVW #80;EX
|
||||
MOVB #70;SY
|
||||
MOVW #80;SX
|
||||
JSR PARAPET0
|
||||
MOVB #60;SY
|
||||
JSR PARAPET0
|
||||
MOVB #70;SY
|
||||
JSR PARAPET0
|
||||
MOVB #100;SY
|
||||
JSR PARAPET0
|
||||
JSR PARAPET0
|
||||
MOVB #5;CTR0
|
||||
:0 JSR PARAPET2
|
||||
DEC CTR0
|
||||
BNE :0
|
||||
MOVW #70;SX
|
||||
MOVW #70;EX
|
||||
MOVB #60;SY
|
||||
MOVB #80;EY
|
||||
JSR SLOPDOWN
|
||||
MOVB #90;EY
|
||||
MOVW #110;SX
|
||||
MOVW #110;EX
|
||||
JSR SLOPUP
|
||||
LDX #7
|
||||
JSR HCOLOR
|
||||
MOVB #159;SY
|
||||
MOVB #159;EY
|
||||
NILW SX
|
||||
MOVW #279;EX
|
||||
JSR DRAWLINE
|
||||
MOVW #45;SX
|
||||
MOVB #125;EY
|
||||
MOVW #80;EX
|
||||
JSR DRAWLINE
|
||||
MOVB #159;SY
|
||||
MOVW #80;SX
|
||||
MOVW #80;EX
|
||||
MOVB #90;EY
|
||||
JSR DRAWLINE
|
||||
MOVW #70;EX
|
||||
MOVB #80;EY
|
||||
JSR LINETO
|
||||
MOVB #60;EY
|
||||
JSR LINETO
|
||||
MOVW #70;SX
|
||||
MOVB #60;SY
|
||||
MOVW #80;EX
|
||||
JSR OUTLINE1
|
||||
JSR OUTLINE1
|
||||
MOVW #120;EX
|
||||
JSR LINETO
|
||||
MOVB #80;EY
|
||||
JSR LINETO
|
||||
MOVW #110;EX
|
||||
MOVB #90;EY
|
||||
JSR LINETO
|
||||
MOVB #100;EY
|
||||
JSR LINETO
|
||||
MOVW #130;EX
|
||||
JSR LINETO
|
||||
MOVW #130;SX
|
||||
MOVB #100;SY
|
||||
MOVW #130;EX
|
||||
MOVB #90;EY
|
||||
MOVB #5;CTR0
|
||||
:1 JSR OUTLINE2
|
||||
DEC CTR0
|
||||
BNE :1
|
||||
MOVW #80;SX
|
||||
MOVB #155;SY
|
||||
MOVW #279;EX
|
||||
MOVB #155;EY
|
||||
MOVB #11;CTR0
|
||||
:2 JSR LAYERS2
|
||||
DEC CTR0
|
||||
BNE :2
|
||||
MOVW #110;EX
|
||||
JSR LAYERS2
|
||||
JSR LAYERS2
|
||||
JSR LAYERS2
|
||||
MOVW #75;SX
|
||||
MOVW #115;EX
|
||||
JSR LAYERS2
|
||||
MOVW #70;SX
|
||||
MOVW #120;EX
|
||||
JSR LAYERS2
|
||||
JSR LAYERS2
|
||||
MOVW #80;SX
|
||||
MOVB #81;SY
|
||||
MOVW #80;EX
|
||||
MOVB #84;EY
|
||||
JSR BRICKS2
|
||||
MOVW #90;SX
|
||||
MOVB #76;SY
|
||||
MOVW #90;EX
|
||||
MOVB #79;EY
|
||||
JSR BRICKS2
|
||||
MOVW #100;SX
|
||||
MOVB #81;SY
|
||||
MOVW #100;EX
|
||||
MOVB #84;EY
|
||||
JSR BRICKS2
|
||||
MOVW #110;SX
|
||||
MOVB #76;SY
|
||||
MOVW #110;EX
|
||||
MOVB #79;EY
|
||||
JSR DRAWLINE
|
||||
MOVB #9;CTR0
|
||||
:3 MOVB #106;SY
|
||||
MOVB #109;EY
|
||||
JSR BRICKS2
|
||||
ADDW SX;#10;SX
|
||||
MOVW SX;EX
|
||||
MOVB #111;SY
|
||||
MOVB #114;EY
|
||||
JSR BRICKS2
|
||||
ADDW SX;#10;SX
|
||||
MOVW SX;EX
|
||||
DEC CTR0
|
||||
BNE :3
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* General subroutines used by *
|
||||
* castle drawing routines. *
|
||||
********************************
|
||||
|
||||
BRICKS2 JSR DRAWLINE
|
||||
ADDB SY;#10;SY
|
||||
ADDB EY;#10;EY
|
||||
LDA EY
|
||||
CMP #160
|
||||
BLT BRICKS2
|
||||
RTS
|
||||
|
||||
LAYERS2 JSR DRAWLINE
|
||||
SUBB SY;#5;SY
|
||||
SUBB EY;#5;EY
|
||||
RTS
|
||||
|
||||
OUTLINE2 JSR DRAWLINE
|
||||
SUBB SY;#10;SY ; SY=SY-10
|
||||
ADDW EX;#20;EX ; EX=EX+20
|
||||
JSR DRAWLINE
|
||||
ADDW SX;#20;SX ; SX=SX+20
|
||||
ADDB EY;#10;EY ; EY=EY+10
|
||||
JSR DRAWLINE
|
||||
ADDB SY;#10;SY ; SY=SY+10
|
||||
ADDW EX;#9;EX ; EX=EX+9 (not off page..)
|
||||
JSR DRAWLINE
|
||||
ADDW EX;#1;EX ; EX=EX+1 (correct ^^^)
|
||||
ADDW SX;#10;SX ; SX=SX+10
|
||||
SUBB EY;#10;EY ; EY=EY-10
|
||||
RTS
|
||||
|
||||
OUTLINE1 JSR DRAWLINE
|
||||
ADDB #10;SX;SX ; SX=SX+10
|
||||
ADDB #10;EY;EY ; EY=EY+10
|
||||
JSR DRAWLINE
|
||||
ADDB #10;SY;SY ; SY=SY+10
|
||||
ADDB #10;EX;EX ; EX=EX+10
|
||||
JSR DRAWLINE
|
||||
ADDB #10;SX;SX ; SX=SX+10
|
||||
SUBB EY;#10;EY ; EY=EY-10
|
||||
JSR DRAWLINE
|
||||
SUBB SY;#10;SY ; SY=SY-10
|
||||
ADDB #10;EX;EX ; EX=EX+10
|
||||
RTS
|
||||
|
||||
DRAWLINE ENT
|
||||
LDA SY ; draws a hi-res line
|
||||
LDX SX ; using the AppleSoft
|
||||
LDY SX+1 ; routines:
|
||||
JSR HPOSN ; HPLOT SX,SY TO EX,EY
|
||||
LINETO LDY EY
|
||||
LDA EX
|
||||
LDX EX+1
|
||||
JSR HPLOTTO
|
||||
RTS
|
||||
|
||||
PARAPET1 MOVB #40;SY ; draw the high part of
|
||||
JSR PARAPET0 ; a parapet and then the
|
||||
MOVB #50;SY ; low part of it.
|
||||
JMP PARAPET0 ; (King Aradeas' castle)
|
||||
|
||||
PARAPET2 MOVB #90;SY ; draw parapets for
|
||||
JSR PARAPET0 ; Kalduns' castle.
|
||||
JSR PARAPET0
|
||||
MOVB #100;SY
|
||||
|
||||
PARAPET0 MOVB #10;CTR1 ; draw a block of 10 lines
|
||||
:0 JSR DRAWLINE ; (vertical)
|
||||
JSR INCX
|
||||
DEC CTR1
|
||||
BNE :0
|
||||
RTS
|
||||
|
||||
SLOPDOWN MOVB #10;CTR0
|
||||
:0 JSR DRAWLINE
|
||||
JSR INCX
|
||||
INC EY
|
||||
DEC CTR0
|
||||
BNE :0
|
||||
RTS
|
||||
|
||||
SLOPUP MOVB #10;CTR0
|
||||
:0 JSR DRAWLINE
|
||||
JSR INCX
|
||||
DEC EY
|
||||
DEC CTR0
|
||||
BNE :0
|
||||
RTS
|
||||
|
||||
INCX INC SX ; increase both
|
||||
BNE :0 ; SX and EX by one.
|
||||
INC SX+1
|
||||
:0 INC EX
|
||||
BNE :1
|
||||
INC EX+1
|
||||
:1 RTS
|
||||
|
||||
********************************
|
||||
* Variables used by the Castle *
|
||||
* drawing routines. *
|
||||
********************************
|
||||
|
||||
SX ENT
|
||||
HEX 0000
|
||||
SY ENT
|
||||
HEX 00
|
||||
EX ENT
|
||||
HEX 0000
|
||||
EY ENT
|
||||
HEX 00
|
||||
CTR0 HEX 00
|
||||
CTR1 HEX 00
|
||||
|
||||
********************************
|
||||
* Lower King Aradeas' *
|
||||
* drawbridge: *
|
||||
********************************
|
||||
|
||||
DRAWBRID MOVB #0;CTR0
|
||||
NILW SX
|
||||
NILW EX
|
||||
MOVB #131;SX
|
||||
:0 LDX #7
|
||||
JSR DISPLAYB
|
||||
LDA #100
|
||||
JSR MONWAIT
|
||||
LDX #4
|
||||
JSR DISPLAYB
|
||||
INC CTR0
|
||||
LDA CTR0
|
||||
CMP #27
|
||||
BLT :0
|
||||
DEC CTR0 ; fall through to Display
|
||||
LDX #7 ; Bridge routine...
|
||||
|
||||
DISPLAYB JSR HCOLOR
|
||||
MOVB #159;SY
|
||||
LDY CTR0
|
||||
MOVB BRIDGEX,Y;EX
|
||||
MOVB BRIDGEY,Y;EY
|
||||
JSR DRAWLINE
|
||||
MOVB #120;SY
|
||||
LDY CTR0
|
||||
MOVB CHAINX,Y;EX
|
||||
MOVB CHAINY,Y;EY
|
||||
JSR DRAWLINE
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Drawbridge points: *
|
||||
********************************
|
||||
|
||||
BRIDGEX DFB 131,133,136,139,142,145,148,151,154
|
||||
DFB 156,159,161,163,166,168,170,171,173
|
||||
DFB 175,176,177,178,179,180,180,180,180
|
||||
BRIDGEY DFB 109,109,109,109,110,111,112,113,114
|
||||
DFB 116,117,119,121,123,125,127,130,132
|
||||
DFB 135,138,140,143,146,149,152,155,159
|
||||
CHAINX DFB 131,133,135,138,140,142,145,147,149
|
||||
DFB 151,153,155,157,159,160,162,163,165
|
||||
DFB 166,167,168,169,169,170,170,170,170
|
||||
CHAINY DFB 119,119,119,119,120,120,121,122,123
|
||||
DFB 124,125,127,128,130,132,134,136,138
|
||||
DFB 140,142,144,146,149,151,153,156,159
|
||||
|
137
convert.s
Executable file
137
convert.s
Executable file
@ -0,0 +1,137 @@
|
||||
********************************
|
||||
* Integer conversion routines. *
|
||||
* Uses: IO *
|
||||
* IO.MAC *
|
||||
* MATH *
|
||||
********************************
|
||||
|
||||
* External references
|
||||
; jewel.of.kaldun.s
|
||||
DATA EXT
|
||||
|
||||
|
||||
********************************
|
||||
* CONVERT converts a hex byte *
|
||||
* to decimal and prints it in *
|
||||
* the form: XXX. *
|
||||
* I.E. $10 = 016 *
|
||||
********************************
|
||||
|
||||
CONVERT LDA #"0"
|
||||
LDY #3
|
||||
:0 STA CONVSTR-1,Y
|
||||
DEY
|
||||
BNE :0
|
||||
LDA (PTR),Y
|
||||
:1 CMP #100
|
||||
BLT :2
|
||||
SBC #100
|
||||
INC CONVSTR
|
||||
JMP :1
|
||||
:2 CMP #10
|
||||
BLT :3
|
||||
SBC #10
|
||||
INC CONVSTR+1
|
||||
JMP :2
|
||||
:3 CMP #1
|
||||
BLT :DONE
|
||||
SBC #1
|
||||
INC CONVSTR+2
|
||||
JMP :3
|
||||
:DONE LDY #0 ; kill leading zeros
|
||||
:LOOP LDA CONVSTR,Y
|
||||
CMP #"0"
|
||||
BNE :JUSTIFY
|
||||
INY
|
||||
CPY #2 ; check only 1st two 0's
|
||||
BLT :LOOP
|
||||
:JUSTIFY CPY #0 ; Y contains how many 0's
|
||||
BEQ :PRINTIT ; to "zap"
|
||||
:JBEGIN LDX #0 ; the Jloop shifts data left
|
||||
:JLOOP LDA CONVSTR+1,X
|
||||
STA CONVSTR,X
|
||||
INX
|
||||
CPX #3
|
||||
BLT :JLOOP
|
||||
DEY
|
||||
BNE :JBEGIN
|
||||
:PRINTIT LDA DATA ; call output routine to
|
||||
PHA ; print number string.
|
||||
LDA DATA+1
|
||||
PHA
|
||||
PRINT CONVSTR
|
||||
PLA
|
||||
STA DATA+1
|
||||
PLA
|
||||
STA DATA
|
||||
RTS
|
||||
CONVSTR ASC "999"00
|
||||
|
||||
********************************
|
||||
* Converts a hex word into a *
|
||||
* printable string. *
|
||||
* I.E. $FFFF = 65535 *
|
||||
* $0000 = 00000 *
|
||||
********************************
|
||||
|
||||
CONVWORD LDY #5
|
||||
LDA #"0"
|
||||
:0 STA CWSTR-1,Y
|
||||
DEY
|
||||
BNE :0
|
||||
LDX #0
|
||||
:AGAIN LDY #0
|
||||
:LOOP LDA (PTR),Y
|
||||
STA NUM1,Y
|
||||
LDA NUMBERS,X
|
||||
STA NUM2,Y
|
||||
INX
|
||||
INY
|
||||
CPY #2
|
||||
BLT :LOOP
|
||||
STX XTEMP
|
||||
JSR IDIV
|
||||
LDX XTEMP
|
||||
LDA #<NUM1
|
||||
STA PTR
|
||||
LDA #>NUM1
|
||||
STA PTR+1
|
||||
TXA
|
||||
LSR
|
||||
TAY
|
||||
LDA RESULT
|
||||
CLC
|
||||
ADC CWSTR-1,Y
|
||||
STA CWSTR-1,Y
|
||||
CPX #10
|
||||
BLT :AGAIN
|
||||
:KILL LDY #0 ; kill leading zeros
|
||||
:KILLOOP LDA CWSTR,Y
|
||||
CMP #"0"
|
||||
BNE :JUSTIFY
|
||||
INY
|
||||
CPY #4 ; check 1st 4 zeros
|
||||
BLT :KILLOOP
|
||||
:JUSTIFY CPY #0 ; Y contains how many 0's
|
||||
BEQ :PRINTIT ; to "zap"
|
||||
:JBEGIN LDX #0 ; the Jloop shifts data left
|
||||
:JLOOP LDA CWSTR+1,X
|
||||
STA CWSTR,X
|
||||
INX
|
||||
CPX #5
|
||||
BLT :JLOOP
|
||||
DEY ; check if another leading 0
|
||||
BNE :JBEGIN ; must be killed.
|
||||
:PRINTIT LDA DATA ; call output routine to
|
||||
PHA ; print number string.
|
||||
LDA DATA+1
|
||||
PHA
|
||||
PRINT CWSTR
|
||||
PLA
|
||||
STA DATA+1
|
||||
PLA
|
||||
STA DATA
|
||||
RTS
|
||||
CWSTR ASC "99999"00
|
||||
NUMBERS DA 10000,1000,100,10,1
|
||||
|
332
display.s
Executable file
332
display.s
Executable file
@ -0,0 +1,332 @@
|
||||
********************************
|
||||
* Display map routines: *
|
||||
********************************
|
||||
|
||||
* Default values:
|
||||
|
||||
WSCREEN = 24
|
||||
HSCREEN = 20
|
||||
WMAP = 48
|
||||
HMAP = 32
|
||||
|
||||
********************************
|
||||
* Get the value of map @ (x,y) *
|
||||
********************************
|
||||
|
||||
MAPINDEX DEX
|
||||
DEY
|
||||
STX XOFF
|
||||
STY YOFF
|
||||
LDA #0
|
||||
STA XOFF+1
|
||||
STA YOFF+1
|
||||
LDA MAPSW
|
||||
BMI :NOMONS
|
||||
*-------------------------------
|
||||
LDY #0
|
||||
:REPEAT LDA M_HP,Y ; if HP = 0, no monster at this
|
||||
BEQ :CHECK ; location.
|
||||
LDA M_LEVEL,Y ; check if monster is on the
|
||||
CMP MAPADDR+1 ; correct level
|
||||
BNE :CHECK
|
||||
LDA M_X,Y ; check x-coordinate against
|
||||
CMP XOFF ; map x-coordinate.
|
||||
BNE :CHECK
|
||||
LDA M_Y,Y ; check y-coordinate
|
||||
CMP YOFF
|
||||
BNE :CHECK
|
||||
LDA XOFF ; ensure that map x and map y
|
||||
ORA YOFF ; are not both 0 (no monster)
|
||||
BEQ :CHECK
|
||||
LDA M_TYPE,Y ; get the monster type!
|
||||
STY MAP_MNUM
|
||||
RTS ; have mons type, so exit
|
||||
:CHECK INY
|
||||
CPY #MONSMAX
|
||||
BLT :REPEAT
|
||||
*-------------------------------
|
||||
:NOMONS IMULW YOFF;#WMAP;PTR
|
||||
ADDW PTR;MAPADDR;PTR
|
||||
LDY XOFF
|
||||
LDA (PTR),Y
|
||||
RTS
|
||||
MAP_MNUM HEX 00
|
||||
|
||||
********************************
|
||||
* Update Screen *
|
||||
********************************
|
||||
|
||||
UPSCREEN MOVB X0;AX
|
||||
MOVB Y0;AY
|
||||
MOVB CX;X0
|
||||
MOVB CY;Y0
|
||||
MOVB CX;X1
|
||||
MOVB CY;Y1
|
||||
LDA #%10000000
|
||||
STA CLRFLAG
|
||||
LDA #%00000000
|
||||
STA XORFLAG
|
||||
:0 LDA Y0
|
||||
CMP #2
|
||||
BLT :1
|
||||
DEC Y0
|
||||
LDX CX
|
||||
LDY Y0
|
||||
JSR MAPCHECK
|
||||
BCC :0
|
||||
:1 LDA X0
|
||||
CMP #2
|
||||
BLT :2
|
||||
DEC X0
|
||||
LDX X0
|
||||
LDY CY
|
||||
JSR MAPCHECK
|
||||
BCC :1
|
||||
:2 LDA X1
|
||||
CMP #WMAP+1
|
||||
BGE :3
|
||||
INC X1
|
||||
LDX X1
|
||||
LDY CY
|
||||
JSR MAPCHECK
|
||||
BCC :2
|
||||
:3 LDA Y1
|
||||
CMP #HMAP+1
|
||||
BGE :4
|
||||
INC Y1
|
||||
LDX CX
|
||||
LDY Y1
|
||||
JSR MAPCHECK
|
||||
BCC :3
|
||||
:4 SEC
|
||||
LDA Y1
|
||||
SBC Y0
|
||||
CMP #HSCREEN-1
|
||||
BLT :5
|
||||
SEC
|
||||
LDA CY
|
||||
SBC Y0
|
||||
STA TEMP0
|
||||
SEC
|
||||
LDA Y1
|
||||
SBC CY
|
||||
CMP TEMP0
|
||||
BLT :40
|
||||
DEC Y1
|
||||
JMP :4
|
||||
:40 INC Y0
|
||||
JMP :4
|
||||
:5 SEC
|
||||
LDA X1
|
||||
SBC X0
|
||||
CMP #WSCREEN-1
|
||||
BLT :6
|
||||
SEC
|
||||
LDA CX
|
||||
SBC X0
|
||||
STA TEMP0
|
||||
SEC
|
||||
LDA X1
|
||||
SBC CX
|
||||
CMP TEMP0
|
||||
BLT :50
|
||||
DEC X1
|
||||
JMP :5
|
||||
:50 INC X0
|
||||
JMP :5
|
||||
:6 SUBB X1;X0;WX
|
||||
SUBB Y1;Y0;WY
|
||||
LDA WX
|
||||
LSR
|
||||
STA ZX
|
||||
SEC
|
||||
LDA #WSCREEN/2
|
||||
SBC ZX
|
||||
STA ZX
|
||||
LDA WY
|
||||
LSR
|
||||
STA ZY
|
||||
SEC
|
||||
LDA #HSCREEN/2
|
||||
SBC ZY
|
||||
STA ZY
|
||||
LDA OX
|
||||
ORA OY
|
||||
BPL :7
|
||||
MOVB ZX;OX
|
||||
MOVB ZY;OY
|
||||
JSR HCLEAR
|
||||
JMP :8
|
||||
:7 LDA #%10000000 ; to erase old picture
|
||||
STA XORFLAG ; of Meltok ...
|
||||
LDA #%00000000
|
||||
STA CLRFLAG
|
||||
MOVB #2;SNUM
|
||||
LDA CH:X+1 ; Should be current location
|
||||
LDX CH:X ; of Meltok on screen.
|
||||
LDY CH:Y ; Including "sliding" movement.
|
||||
JSR DRAWSHAP ; Draw it
|
||||
LDA #%00000000 ; Clear reverse flag
|
||||
STA XORFLAG ; Done.
|
||||
LDA #%10000000
|
||||
STA CLRFLAG
|
||||
SUBB AX;X0;DX
|
||||
SUBB AY;Y0;DY
|
||||
SUBB OX;DX;NX
|
||||
SUBB OY;DY;NY
|
||||
:70 LDA NX
|
||||
BPL :71
|
||||
JSR HRIGHT
|
||||
INC NX
|
||||
JMP :70
|
||||
:71 LDA NY
|
||||
BPL :72
|
||||
JSR HDOWN
|
||||
INC NY
|
||||
JMP :71
|
||||
:72 CLC
|
||||
LDA NY
|
||||
ADC WY
|
||||
CMP #19
|
||||
BLT :73
|
||||
JSR HUP
|
||||
DEC NY
|
||||
JMP :72
|
||||
:73 CLC
|
||||
LDA NX
|
||||
ADC WX
|
||||
CMP #24
|
||||
BLT :74
|
||||
JSR HLEFT
|
||||
DEC NX
|
||||
JMP :73
|
||||
:74 MOVB NX;ZX
|
||||
MOVB NY;ZY
|
||||
MOVB ZX;OX
|
||||
MOVB ZY;OY
|
||||
:8 MOVB Y0;TEMPY
|
||||
:_NEXTY MOVB X0;TEMPX
|
||||
:_NEXTX LDY TEMPY
|
||||
LDX TEMPX
|
||||
JSR MAPINDEX
|
||||
CMP #15 ; show monsters too!
|
||||
BLT :SHGOOD
|
||||
CMP #98
|
||||
BNE :NEXTSH1
|
||||
LDA #1
|
||||
JMP :SHGOOD
|
||||
:NEXTSH1 CMP #99
|
||||
BNE :NEXTSH2
|
||||
LDA #6
|
||||
JMP :SHGOOD
|
||||
:NEXTSH2 CMP #97
|
||||
BNE :NEXTSH3
|
||||
LDA #4
|
||||
JMP :SHGOOD
|
||||
:NEXTSH3 CMP #100
|
||||
BLT :NEXTSH4
|
||||
LDA #0
|
||||
JMP :SHGOOD
|
||||
:NEXTSH4 CMP #22 ; barred door
|
||||
BEQ :SHGOOD
|
||||
:NEXTSH5 LDA #15 ; circle -- for errors
|
||||
:SHGOOD STA SNUM
|
||||
NILB XPLACE+1
|
||||
NILB YPLACE+1
|
||||
MOVB ZX;XPLACE
|
||||
MOVB ZY;YPLACE
|
||||
LDY #3
|
||||
:MUL8 ASL XPLACE
|
||||
ROL XPLACE+1
|
||||
ASL YPLACE
|
||||
ROL YPLACE+1
|
||||
DEY
|
||||
BNE :MUL8
|
||||
LDA SNUM
|
||||
CMP #12
|
||||
BLT :MOREYET
|
||||
CMP #14+1
|
||||
BGE :MOREYET
|
||||
LDY MAP_MNUM
|
||||
LDA YPLACE
|
||||
STA M_Y0,Y
|
||||
LDA XPLACE
|
||||
STA M_X0,Y
|
||||
LDA XPLACE+1
|
||||
STA M_X1,Y
|
||||
:MOREYET LDY YPLACE
|
||||
LDX XPLACE
|
||||
LDA XPLACE+1
|
||||
JSR DRAWSHAP
|
||||
LDA TEMPX
|
||||
CMP CX
|
||||
BNE :99
|
||||
LDA TEMPY
|
||||
CMP CY
|
||||
BNE :99
|
||||
LDA #%00000000
|
||||
STA CLRFLAG
|
||||
LDA #%10000000
|
||||
STA XORFLAG
|
||||
MOVB #2;SNUM
|
||||
LDY YPLACE
|
||||
LDX XPLACE
|
||||
LDA XPLACE+1
|
||||
JSR DRAWSHAP
|
||||
MOVW XPLACE;CH:X
|
||||
MOVW YPLACE;CH:Y
|
||||
LDA #%00000000
|
||||
STA XORFLAG
|
||||
LDA #%10000000
|
||||
STA CLRFLAG
|
||||
:99 INC ZX
|
||||
INC TEMPX
|
||||
LDA TEMPX
|
||||
CMP #WMAP
|
||||
BEQ :9999
|
||||
BGE :100
|
||||
:9999 CMP X1
|
||||
BLT :NEXTX
|
||||
BEQ :NEXTX
|
||||
:100 SUBB ZX;WX;ZX
|
||||
DEC ZX
|
||||
INC ZY
|
||||
INC TEMPY
|
||||
LDA TEMPY
|
||||
CMP #HMAP
|
||||
BEQ :1111
|
||||
BGE :EXIT
|
||||
:1111 CMP Y1
|
||||
BLT :NEXTY
|
||||
BEQ :NEXTY
|
||||
JMP :EXIT
|
||||
:NEXTY JMP :_NEXTY
|
||||
:NEXTX JMP :_NEXTX
|
||||
:EXIT RTS
|
||||
|
||||
********************************
|
||||
* Map Check verifies that the *
|
||||
* check square is valid to *
|
||||
* see through. *
|
||||
********************************
|
||||
MAPSW HEX 00
|
||||
MAPCHECK LDA #$80 ; special switch to ignore the
|
||||
STA MAPSW ; monsters!
|
||||
JSR MAPINDEX ; get data
|
||||
PHA ; save data
|
||||
LDA #0 ; reset switch to normal
|
||||
STA MAPSW ; ...
|
||||
PLA ; restore data and work with it:
|
||||
CMP #99
|
||||
BGE :GOOD
|
||||
CMP #0
|
||||
BEQ :GOOD
|
||||
CMP #6
|
||||
BLT :BAD
|
||||
CMP #12 ; for monsters #12-#14
|
||||
BGE :BAD
|
||||
:GOOD CLC
|
||||
RTS
|
||||
:BAD SEC
|
||||
RTS
|
||||
|
320
endgame.s
Executable file
320
endgame.s
Executable file
@ -0,0 +1,320 @@
|
||||
********************************
|
||||
* End Game routines: *
|
||||
* death *
|
||||
* and WINNING! *
|
||||
********************************
|
||||
|
||||
* External routines
|
||||
; graphics.s
|
||||
HGRCLEAR EXT
|
||||
HADDR EXT
|
||||
HADDR2 EXT
|
||||
SETHGR EXT
|
||||
; input.output.s
|
||||
PRSTR EXT
|
||||
CBOT3 EXT
|
||||
CLRSCRN EXT
|
||||
TEXT EXT
|
||||
TEXTADDR EXT
|
||||
CSTRING EXT
|
||||
CLRMID EXT
|
||||
GETRET EXT
|
||||
; title.s
|
||||
WAIT EXT
|
||||
; shapes.s
|
||||
CLRFLAG EXT
|
||||
XORFLAG EXT
|
||||
SNUM EXT
|
||||
DRAWSHAP EXT
|
||||
; noise.s
|
||||
DONOISE EXT
|
||||
DURATION EXT
|
||||
FREQUENC EXT
|
||||
VOLUME EXT
|
||||
; castles.s
|
||||
SX EXT
|
||||
SY EXT
|
||||
EX EXT
|
||||
EY EXT
|
||||
DRAWLINE EXT
|
||||
CASTLE1 EXT
|
||||
|
||||
********************************
|
||||
* This is the death routine. *
|
||||
********************************
|
||||
THEDEATH ENT
|
||||
JSR HGRCLEAR
|
||||
JSR GREENBCK
|
||||
LDY #10
|
||||
JSR PAUSE
|
||||
PRINT DEATH1
|
||||
JSR RAISTONE
|
||||
LDY #15
|
||||
JSR PAUSE
|
||||
PRINT DEATH2
|
||||
JSR DRAWRIP
|
||||
LDY #10
|
||||
JSR PAUSE
|
||||
JSR CBOT3
|
||||
RTS
|
||||
DEATH1 HEX 825583
|
||||
ASC "... You're dead! ..."00
|
||||
DEATH2 HEX 825583
|
||||
ASC "All good things must"8D83
|
||||
ASC "come to and end!"00
|
||||
|
||||
********************************
|
||||
* Pause for a bit. *
|
||||
********************************
|
||||
PAUSE LDA #255
|
||||
JSR WAIT
|
||||
DEY
|
||||
BNE PAUSE
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Do the green background for *
|
||||
* death scene. *
|
||||
********************************
|
||||
GREENBCK LDA #90
|
||||
STA HLINE
|
||||
LDA #92
|
||||
STA HLINE2
|
||||
:LOOP JSR HADDR
|
||||
JSR HADDR2
|
||||
BCS :ALLDONE
|
||||
JSR GREEN12
|
||||
ADDB #4;HLINE;HLINE
|
||||
ADDB #4;HLINE2;HLINE2
|
||||
LDA HLINE2
|
||||
CMP #159
|
||||
BLT :LOOP
|
||||
:ALLDONE RTS
|
||||
|
||||
********************************
|
||||
* Do two lines of green. *
|
||||
********************************
|
||||
GREEN12 LDY #0
|
||||
:1 LDX #0
|
||||
:0 LDA GREEN1,X
|
||||
STA (HPTR),Y
|
||||
LDA GREEN2,X
|
||||
STA (HPTR2),Y
|
||||
INX
|
||||
INY
|
||||
CPX #8
|
||||
BLT :0
|
||||
CPY #40
|
||||
BLT :1
|
||||
RTS
|
||||
GREEN1 HEX 204102050A142850
|
||||
GREEN2 HEX 0A14285020410205
|
||||
|
||||
********************************
|
||||
* Draw R. I. P. on gravestone. *
|
||||
********************************
|
||||
DRAWRIP LDA #%00000000 ; prepare to draw R. I. P.
|
||||
STA CLRFLAG
|
||||
LDA #%10000000
|
||||
STA XORFLAG
|
||||
MOVB #19;SNUM ; Draw "R"
|
||||
LDY #100
|
||||
LDX #<115
|
||||
LDA #>115
|
||||
JSR DRAWSHAP
|
||||
MOVB #16;SNUM ; Draw "."
|
||||
LDY #103
|
||||
LDX #<121
|
||||
LDA #>121
|
||||
JSR DRAWSHAP
|
||||
JSR DO_THUMP ; make noise
|
||||
MOVB #20;SNUM ; Draw "I"
|
||||
LDY #100
|
||||
LDX #<135
|
||||
LDA #>135
|
||||
JSR DRAWSHAP
|
||||
MOVB #16;SNUM ; Draw "."
|
||||
LDY #103
|
||||
LDX #<141
|
||||
LDA #>141
|
||||
JSR DRAWSHAP
|
||||
JSR DO_THUMP ; make noise
|
||||
MOVB #21;SNUM ; Draw "P"
|
||||
LDY #100
|
||||
LDX #<155
|
||||
LDA #>155
|
||||
JSR DRAWSHAP
|
||||
MOVB #16;SNUM ; Draw "."
|
||||
LDY #103
|
||||
LDX #<159
|
||||
LDA #>159
|
||||
JSR DRAWSHAP
|
||||
JSR DO_THUMP
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Make a thumping sound. *
|
||||
********************************
|
||||
DO_THUMP LDY #35 ; make a sound similar to
|
||||
:LOOP BIT SPEAKER ; typical "thump"
|
||||
LDA #45
|
||||
JSR WAIT
|
||||
DEY
|
||||
BNE :LOOP
|
||||
LDY #2
|
||||
LDA #255 ; pause for effect.
|
||||
JSR WAIT
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Routine to raise gravestone *
|
||||
* out of the ground. *
|
||||
********************************
|
||||
RAISTONE LDY #140
|
||||
:LOOP STY :YSAVE
|
||||
JSR DRAWSTON
|
||||
MOVB #15;VOLUME
|
||||
MOVB #1;DURATION
|
||||
MOVB #150;FREQUENC
|
||||
JSR DONOISE
|
||||
LDY :YSAVE
|
||||
DEY
|
||||
CPY #70
|
||||
BGE :LOOP
|
||||
RTS
|
||||
:YSAVE HEX 00
|
||||
|
||||
********************************
|
||||
* Routine to draw gravestone *
|
||||
* from Y to 140. *
|
||||
********************************
|
||||
DRAWSTON STY SY ; set starting and
|
||||
STY EY ; ending y positions
|
||||
MOVB #0;:COUNTER ; init counter
|
||||
LDX #3
|
||||
JSR HCOLOR ; HCOLOR=3
|
||||
:LOOP MOVW #104;SX ; default starting and
|
||||
MOVW #174;EX ; ending x positions
|
||||
LDA :COUNTER ; check counter
|
||||
CMP #15 ; if < 15 then use data
|
||||
BGE :DRAW ; if =>15 then use default
|
||||
ASL ; multiply by 2
|
||||
TAY
|
||||
LDA GRAVSTON,Y ; set endpoints
|
||||
STA SX ; for hline
|
||||
LDA GRAVSTON+1,Y
|
||||
STA EX
|
||||
:DRAW JSR DRAWLINE ; use drawline routine
|
||||
BIT SPEAKER ; buzz
|
||||
INC :COUNTER ; counter+= 1
|
||||
LDA :COUNTER ; exit early -- no need
|
||||
CMP #16 ; to draw the WHOLE gravestone
|
||||
BGE :EXIT ; again!
|
||||
INC SY ; sy+= 1
|
||||
INC EY ; ey+= 1
|
||||
LDA SY ; check if y is still
|
||||
CMP #141 ; < 141.
|
||||
BLT :LOOP ; if y<141 then repeat
|
||||
:EXIT RTS
|
||||
:COUNTER HEX 00 ; used for offset in table
|
||||
|
||||
********************************
|
||||
* Data for gravestone. *
|
||||
********************************
|
||||
GRAVSTON DFB 128,150 ; for y=70 (final position)
|
||||
DFB 123,155 ; y=71
|
||||
DFB 120,158 ; y=72
|
||||
DFB 118,160 ; y=73
|
||||
DFB 116,162 ; y=74
|
||||
DFB 114,164 ; y=75
|
||||
DFB 112,166 ; y=76
|
||||
DFB 111,167 ; y=77
|
||||
DFB 110,168 ; y=78
|
||||
DFB 108,170 ; y=79
|
||||
DFB 107,171 ; y=80
|
||||
DFB 107,171 ; y=81
|
||||
DFB 106,172 ; y=82
|
||||
DFB 105,173 ; y=83
|
||||
DFB 105,173 ; y=84
|
||||
|
||||
GAMEWON ENT
|
||||
JSR CLRSCRN
|
||||
JSR TEXT
|
||||
LDA #11
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
CENTER CONGRATS
|
||||
JSR HGRCLEAR
|
||||
JSR CASTLE1
|
||||
LDY #15
|
||||
:DELAY LDA #255
|
||||
JSR WAIT
|
||||
DEY
|
||||
BNE :DELAY
|
||||
JSR CLRMID
|
||||
JSR SETHGR
|
||||
PRINT GAMEWIN1
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT GAMEWIN2
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT GAMEWIN3
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
JSR TEXT
|
||||
PRINT GAMEWIN4
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT GAMEWIN5
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
JSR SETHGR
|
||||
PRINT GAMEWIN6
|
||||
RTS
|
||||
|
||||
CONGRATS ASC "Contragulations!!"00
|
||||
GAMEWIN1 HEX 54
|
||||
ASC "As you return from your successful"8D
|
||||
ASC "journey to retrieve the Jewel of Kaldun,"8D
|
||||
ASC "the kingdom stirs with renewed hope!"00
|
||||
GAMEWIN2 HEX 54
|
||||
ASC "The king, upon hearing of your return,"8D
|
||||
ASC "prepares a royal reception in honor of"8D
|
||||
ASC "the kingdoms hero."00
|
||||
GAMEWIN3 HEX 54
|
||||
ASC "However, throughout the whole affair,"8D
|
||||
ASC "the king appears troubled. By what, you"8D
|
||||
ASC "do know."00
|
||||
GAMEWIN4 HEX 43
|
||||
ASC "Later, while the two of you relax in the"8D
|
||||
ASC "plush surroundings, you inquire why he"8D
|
||||
ASC "looked troubled."8D
|
||||
HEX 8D
|
||||
ASC "'Alas,' he replies, 'the whole kingdom"8D
|
||||
ASC "rejoices at your wonderful success."8D
|
||||
ASC "However, my daughter is another matter."8D
|
||||
ASC "You see, she is a particularly strong-"8D
|
||||
ASC "willed woman. I'm afraid that she is"8D
|
||||
ASC "too dear to me to force her into an un-"8D
|
||||
ASC "wanted marriage. And, I also don't wish"8D
|
||||
ASC "for you to be forced to marry.'"8D
|
||||
HEX 8D
|
||||
ASC "You breathe a sigh of relief, that is"8D
|
||||
ASC "not really your style. You tell the"8D
|
||||
ASC "king that you understand, and was think-"8D
|
||||
ASC "ing the same thing."00
|
||||
GAMEWIN5 HEX 43
|
||||
ASC "The king answers, 'I like you kid, and"8D
|
||||
ASC "you definately are good material. So,"8D
|
||||
ASC "here is the deal: I will give you a"8D
|
||||
ASC "dutchy.'"8D
|
||||
HEX 8D
|
||||
ASC "Wow, your own dutchy... now if you can"8D
|
||||
ASC "just figure out that last comment. When"8D
|
||||
ASC "you left, the king mumbled, 'For the"8D
|
||||
ASC "sake of the kingdom, I hope I have done"8D
|
||||
ASC "the right thing...'"00
|
||||
GAMEWIN6 HEX 54
|
||||
ASC "Stay tuned for part two!"00
|
||||
|
85
filing.s
Executable file
85
filing.s
Executable file
@ -0,0 +1,85 @@
|
||||
********************************
|
||||
* Filer Module: Load and Save *
|
||||
* game states. *
|
||||
* Uses: PROLIB *
|
||||
* PROLIB.MAC *
|
||||
* IO *
|
||||
* IO.MAC *
|
||||
********************************
|
||||
|
||||
BUFFER = $BB00
|
||||
GAMEDATA = $1000
|
||||
|
||||
********************************
|
||||
* Loader: Loads a new game *
|
||||
* or an old game. Selected by *
|
||||
* the user. *
|
||||
********************************
|
||||
|
||||
LOADER PRINT LOADSTR
|
||||
MOVB #0;LOADSTAT
|
||||
STA KEYSTROB
|
||||
:AGAIN LDA KEYBOARD
|
||||
BPL :AGAIN
|
||||
STA KEYSTROB
|
||||
CMP #"N"
|
||||
BEQ :NEWGAME
|
||||
CMP #"n"
|
||||
BEQ :NEWGAME
|
||||
CMP #"O"
|
||||
BEQ :OLDGAME
|
||||
CMP #"o"
|
||||
BNE :AGAIN
|
||||
:OLDGAME JSR CLINE
|
||||
PRINT OLDSTR
|
||||
MOVB #1;LOADSTAT
|
||||
@OPEN #OLDNAME;#BUFFER;REFNUM
|
||||
JMP :LOAD
|
||||
:NEWGAME JSR CLINE
|
||||
PRINT NEWSTR
|
||||
@OPEN #NEWNAME;#BUFFER;REFNUM
|
||||
:LOAD @READ REFNUM;#GAMEDATA;#$D3C
|
||||
@CLOSE REFNUM
|
||||
JSR CLINE
|
||||
RTS
|
||||
|
||||
LOADSTR HEX 5783
|
||||
ASC "Play New or Old game? (N/O)"00
|
||||
OLDSTR HEX 5783
|
||||
ASC "... Loading old game ..."00
|
||||
NEWSTR HEX 5783
|
||||
ASC "... Loading new game ..."00
|
||||
OLDNAME STR "OLDGAME"
|
||||
NEWNAME STR "NEWGAME"
|
||||
REFNUM HEX 00
|
||||
LOADSTAT HEX 00
|
||||
|
||||
********************************
|
||||
* Saves a game currently in *
|
||||
* play. *
|
||||
********************************
|
||||
|
||||
SAVER PRINT SAVESTR
|
||||
JSR GETYN
|
||||
BCC :YUP
|
||||
JMP :NOPE
|
||||
:YUP PRINT SAVESTR2
|
||||
@DESTROY #OLDNAME
|
||||
CMP #0 ; no error?
|
||||
BEQ :FINISH ; ok!
|
||||
CMP #$46 ; file not found?
|
||||
BEQ :FINISH ; ok!
|
||||
JMP _MLICHK ; unknown error
|
||||
:FINISH @CREATE #OLDNAME;#$C3;#$F6;#$1000;#$01
|
||||
@OPEN #OLDNAME;#BUFFER;REFNUM
|
||||
@WRITE REFNUM;#GAMEDATA;#$D3C
|
||||
@FLUSH REFNUM
|
||||
@CLOSE REFNUM
|
||||
:NOPE JSR CLINE
|
||||
RTS
|
||||
|
||||
SAVESTR HEX 5783
|
||||
ASC "Do you wish to save the game?"00
|
||||
SAVESTR2 HEX 825783
|
||||
ASC "... Saving: Please Wait ..."00
|
||||
|
74
general.mac.s
Executable file
74
general.mac.s
Executable file
@ -0,0 +1,74 @@
|
||||
********************************
|
||||
* General Macros used by *
|
||||
* Jewel of Kaldun source *
|
||||
********************************
|
||||
|
||||
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
|
||||
|
||||
NILB MAC
|
||||
LDA #0
|
||||
STA ]1
|
||||
EOM
|
||||
|
||||
NILW MAC
|
||||
LDA #0
|
||||
STA ]1
|
||||
STA ]1+1
|
||||
EOM
|
||||
|
||||
ADDB MAC
|
||||
CLC
|
||||
LDA ]1
|
||||
ADC ]2
|
||||
STA ]3
|
||||
EOM
|
||||
|
||||
ADDW MAC
|
||||
ADDB ]1;]2;]3
|
||||
IF #=]1
|
||||
LDA ]1/$100
|
||||
ELSE
|
||||
LDA ]1+1
|
||||
FIN
|
||||
IF #=]2
|
||||
ADC ]2/$100
|
||||
ELSE
|
||||
ADC ]2+1
|
||||
FIN
|
||||
STA ]3+1
|
||||
EOM
|
||||
|
||||
SUBB MAC
|
||||
SEC
|
||||
LDA ]1
|
||||
SBC ]2
|
||||
STA ]3
|
||||
EOM
|
||||
|
||||
SUBW MAC
|
||||
SUBB ]1;]2;]3
|
||||
IF #=]1
|
||||
LDA ]1/$100
|
||||
ELSE
|
||||
LDA ]1+1
|
||||
FIN
|
||||
IF #=]2
|
||||
SBC ]2/$100
|
||||
ELSE
|
||||
SBC ]2+1
|
||||
FIN
|
||||
STA ]3+1
|
||||
EOM
|
||||
|
473
graphics.s
Executable file
473
graphics.s
Executable file
@ -0,0 +1,473 @@
|
||||
********************************
|
||||
* High-Resolution Graphics *
|
||||
* routines for Jewel of Kaldun *
|
||||
* Uses: MATH *
|
||||
********************************
|
||||
|
||||
SETHGR ENT
|
||||
STA $C057
|
||||
STA $C053
|
||||
STA $C050
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Turn on the hi-res screen *
|
||||
* and clear it. *
|
||||
********************************
|
||||
|
||||
HGR JSR SETHGR
|
||||
HGRCLEAR ENT
|
||||
LDA #191
|
||||
STA HLINE
|
||||
:0 JSR HADDR
|
||||
BCC :CONT
|
||||
RTS
|
||||
:CONT LDA #0
|
||||
LDY #39
|
||||
:1 STA (HPTR),Y
|
||||
DEY
|
||||
BPL :1
|
||||
DEC HLINE
|
||||
JMP :0
|
||||
|
||||
********************************
|
||||
* Store Hi-Res Screen @ $4000. *
|
||||
********************************
|
||||
HSTORE MOVW #$2000;HPTR
|
||||
MOVW #$4000;HPTR2
|
||||
:YLOOP LDY #0
|
||||
:LOOP LDA (HPTR),Y
|
||||
STA (HPTR2),Y
|
||||
INY
|
||||
BNE :LOOP
|
||||
INC HPTR2+1
|
||||
INC HPTR+1
|
||||
LDA HPTR+1
|
||||
CMP #$40
|
||||
BLT :YLOOP
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Restore hires screen to 4000 *
|
||||
********************************
|
||||
HRESTORE MOVW #$4000;HPTR
|
||||
MOVW #$2000;HPTR2
|
||||
:YLOOP LDY #0
|
||||
:LOOP LDA (HPTR),Y
|
||||
STA (HPTR2),Y
|
||||
INY
|
||||
BNE :LOOP
|
||||
INC HPTR+1
|
||||
INC HPTR2+1
|
||||
LDA HPTR2+1
|
||||
CMP #$40
|
||||
BLT :YLOOP
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Clear the scrolling portion *
|
||||
* of the hi-res screen. *
|
||||
********************************
|
||||
|
||||
HCLEAR LDA #159
|
||||
STA HLINE
|
||||
:1 JSR HADDR
|
||||
BCS :END
|
||||
LDY #28
|
||||
LDA #0
|
||||
:0 STA (HPTR),Y
|
||||
DEY
|
||||
BPL :0
|
||||
DEC HLINE
|
||||
JMP :1
|
||||
:END RTS
|
||||
|
||||
********************************
|
||||
* Scroll the hi-res screen to *
|
||||
* the left two pixels. *
|
||||
********************************
|
||||
|
||||
HLEFT LDA #159
|
||||
STA HLINE
|
||||
:1 JSR HADDR
|
||||
BCS :END
|
||||
LDY #1
|
||||
:0 LDA (HPTR),Y
|
||||
AND #%01111110
|
||||
LSR
|
||||
STA TEMP
|
||||
INY
|
||||
LDA (HPTR),Y
|
||||
AND #%00000001
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ORA TEMP
|
||||
DEY
|
||||
DEY
|
||||
STA (HPTR),Y
|
||||
INY
|
||||
INY
|
||||
CPY #28
|
||||
BLT :0
|
||||
LDY #28
|
||||
LDA (HPTR),Y
|
||||
AND #%01111110
|
||||
LSR
|
||||
DEY
|
||||
STA (HPTR),Y
|
||||
INY
|
||||
LDA #0
|
||||
STA (HPTR),Y
|
||||
DEC HLINE
|
||||
JMP :1
|
||||
:END RTS
|
||||
|
||||
********************************
|
||||
* Scroll the hi-res screen to *
|
||||
* the right two pixels. *
|
||||
********************************
|
||||
|
||||
HRIGHT LDA #159
|
||||
STA HLINE
|
||||
:1 JSR HADDR
|
||||
BCS :END
|
||||
LDY #26
|
||||
:0 LDA (HPTR),Y
|
||||
AND #%01000000
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA TEMP
|
||||
INY
|
||||
LDA (HPTR),Y
|
||||
AND #%00111111
|
||||
ASL
|
||||
ORA TEMP
|
||||
INY
|
||||
STA (HPTR),Y
|
||||
DEY
|
||||
DEY
|
||||
DEY
|
||||
CPY #-1
|
||||
BNE :0
|
||||
LDY #0
|
||||
LDA (HPTR),Y
|
||||
AND #%00111111
|
||||
ASL
|
||||
INY
|
||||
STA (HPTR),Y
|
||||
DEY
|
||||
TYA
|
||||
STA (HPTR),Y
|
||||
DEC HLINE
|
||||
LDY #28
|
||||
LDA (HPTR),Y
|
||||
AND #%00001111 ; chop off rightmost bits
|
||||
STA (HPTR),Y
|
||||
JMP :1
|
||||
:END RTS
|
||||
|
||||
********************************
|
||||
* Scroll the hi-res screen up *
|
||||
* two pixels. *
|
||||
********************************
|
||||
|
||||
HUP LDA #0
|
||||
STA HLINE2
|
||||
LDA #8
|
||||
STA HLINE
|
||||
:0 JSR HADDR2
|
||||
JSR HADDR
|
||||
BCS :END
|
||||
LDY #28
|
||||
:1 LDA (HPTR),Y
|
||||
STA (HPTR2),Y
|
||||
DEY
|
||||
BPL :1
|
||||
INC HLINE2
|
||||
INC HLINE
|
||||
JMP :0
|
||||
:END LDY #28
|
||||
LDA #0
|
||||
:2 STA (HPTR2),Y
|
||||
DEY
|
||||
BPL :2
|
||||
INC HLINE2
|
||||
JSR HADDR2
|
||||
BCC :END
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Scroll the hi-res screen *
|
||||
* down two pixels. *
|
||||
********************************
|
||||
|
||||
HDOWN LDA #159
|
||||
STA HLINE2
|
||||
LDA #151
|
||||
STA HLINE
|
||||
:0 JSR HADDR2
|
||||
JSR HADDR
|
||||
BCS :END
|
||||
LDY #28
|
||||
:1 LDA (HPTR),Y
|
||||
STA (HPTR2),Y
|
||||
DEY
|
||||
BPL :1
|
||||
DEC HLINE2
|
||||
DEC HLINE
|
||||
JMP :0
|
||||
:END LDY #28
|
||||
LDA #0
|
||||
:2 STA (HPTR2),Y
|
||||
DEY
|
||||
BPL :2
|
||||
DEC HLINE2
|
||||
JSR HADDR2
|
||||
BCC :END
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* This routine calculates the *
|
||||
* hi-res address of line that *
|
||||
* is stored in LINE via the *
|
||||
* look-up tables. *
|
||||
********************************
|
||||
|
||||
HADDR ENT
|
||||
LDA HLINE
|
||||
CMP #192
|
||||
BCS :END
|
||||
TAY
|
||||
LDA HLOW,Y
|
||||
STA HPTR
|
||||
LDA HHIGH,Y
|
||||
STA HPTR+1
|
||||
CLC
|
||||
:END RTS
|
||||
|
||||
********************************
|
||||
* This routine calculates the *
|
||||
* hi-res address of line that *
|
||||
* is stored in LINE2 via the *
|
||||
* look-up tables. *
|
||||
********************************
|
||||
|
||||
HADDR2 ENT
|
||||
LDA HLINE2
|
||||
CMP #192
|
||||
BCS :END
|
||||
TAY
|
||||
LDA HLOW,Y
|
||||
STA HPTR2
|
||||
LDA HHIGH,Y
|
||||
STA HPTR2+1
|
||||
CLC
|
||||
:END RTS
|
||||
|
||||
********************************
|
||||
* Low-order bytes of hi-res *
|
||||
* row address: *
|
||||
********************************
|
||||
|
||||
HLOW HEX 0000000000000000
|
||||
HEX 8080808080808080
|
||||
HEX 0000000000000000
|
||||
HEX 8080808080808080
|
||||
HEX 0000000000000000
|
||||
HEX 8080808080808080
|
||||
HEX 0000000000000000
|
||||
HEX 8080808080808080
|
||||
HEX 2828282828282828
|
||||
HEX A8A8A8A8A8A8A8A8
|
||||
HEX 2828282828282828
|
||||
HEX A8A8A8A8A8A8A8A8
|
||||
HEX 2828282828282828
|
||||
HEX A8A8A8A8A8A8A8A8
|
||||
HEX 2828282828282828
|
||||
HEX A8A8A8A8A8A8A8A8
|
||||
HEX 5050505050505050
|
||||
HEX D0D0D0D0D0D0D0D0
|
||||
HEX 5050505050505050
|
||||
HEX D0D0D0D0D0D0D0D0
|
||||
HEX 5050505050505050
|
||||
HEX D0D0D0D0D0D0D0D0
|
||||
HEX 5050505050505050
|
||||
HEX D0D0D0D0D0D0D0D0
|
||||
|
||||
********************************
|
||||
* High-order bytes of hi-res *
|
||||
* row address: *
|
||||
********************************
|
||||
|
||||
HHIGH HEX 2024282C3034383C
|
||||
HEX 2024282C3034383C
|
||||
HEX 2125292D3135393D
|
||||
HEX 2125292D3135393D
|
||||
HEX 22262A2E32363A3E
|
||||
HEX 22262A2E32363A3E
|
||||
HEX 23272B2F33373B3F
|
||||
HEX 23272B2F33373B3F
|
||||
HEX 2024282C3034383C
|
||||
HEX 2024282C3034383C
|
||||
HEX 2125292D3135393D
|
||||
HEX 2125292D3135393D
|
||||
HEX 22262A2E32363A3E
|
||||
HEX 22262A2E32363A3E
|
||||
HEX 23272B2F33373B3F
|
||||
HEX 23272B2F33373B3F
|
||||
HEX 2024282C3034383C
|
||||
HEX 2024282C3034383C
|
||||
HEX 2125292D3135393D
|
||||
HEX 2125292D3135393D
|
||||
HEX 22262A2E32363A3E
|
||||
HEX 22262A2E32363A3E
|
||||
HEX 23272B2F33373B3F
|
||||
HEX 23272B2F33373B3F
|
||||
|
||||
********************************
|
||||
* Graphically displays the *
|
||||
* amount of Gold Pieces *
|
||||
* character has. *
|
||||
********************************
|
||||
|
||||
STATUSGP LDY #38
|
||||
LDA GP+1
|
||||
BNE LOTAGOLD
|
||||
LDA #160
|
||||
SEC
|
||||
SBC GP
|
||||
BCS STATUS
|
||||
LOTAGOLD LDA #0
|
||||
STATUS STA TEMP
|
||||
STY YTEMP
|
||||
LDA #160
|
||||
STA HLINE
|
||||
:1 JSR HADDR
|
||||
BCS :EXIT
|
||||
LDY YTEMP
|
||||
LDA COLORS-29,Y
|
||||
STA (HPTR),Y
|
||||
INY
|
||||
LDA COLORS-29,Y
|
||||
STA (HPTR),Y
|
||||
DEC HLINE
|
||||
LDA HLINE
|
||||
CMP TEMP
|
||||
BGE :1
|
||||
:3 JSR HADDR
|
||||
BCC :2
|
||||
:EXIT RTS
|
||||
:2 LDA #0
|
||||
LDY YTEMP
|
||||
STA (HPTR),Y
|
||||
INY
|
||||
STA (HPTR),Y
|
||||
DEC HLINE
|
||||
JMP :3
|
||||
|
||||
********************************
|
||||
* The colors associated with *
|
||||
* the various statuses. *
|
||||
********************************
|
||||
|
||||
COLORS HEX D5AA00552A00
|
||||
HEX AAD5002A55
|
||||
|
||||
********************************
|
||||
* Graphically displays the *
|
||||
* status of your keys. *
|
||||
********************************
|
||||
|
||||
STATUSKY LDY #29
|
||||
LDX KEY
|
||||
LDA SPKEY
|
||||
BEQ :0
|
||||
INX
|
||||
:0 LDA #160
|
||||
:1 CPX #0
|
||||
BEQ :DONE
|
||||
SEC
|
||||
SBC #10
|
||||
DEX
|
||||
CMP #0
|
||||
BNE :1
|
||||
:DONE JMP STATUS
|
||||
|
||||
********************************
|
||||
* Graphically display the *
|
||||
* percent of hitpoints *
|
||||
* remaining. *
|
||||
********************************
|
||||
|
||||
STATUSHP LDA #0
|
||||
STA NUM1+1
|
||||
STA NUM2+1
|
||||
LDA #160
|
||||
STA NUM1
|
||||
LDA HP
|
||||
STA NUM2
|
||||
JSR IMUL
|
||||
LDA RESULT
|
||||
STA NUM1
|
||||
LDA RESULT+1
|
||||
STA NUM1+1
|
||||
LDA #0
|
||||
STA NUM2+1
|
||||
LDA MAXHP
|
||||
STA NUM2
|
||||
JSR IDIV
|
||||
SEC
|
||||
LDA #160
|
||||
SBC RESULT
|
||||
BCS :0
|
||||
LDA #0
|
||||
:0 LDY #32
|
||||
JMP STATUS
|
||||
|
||||
********************************
|
||||
* Graphically display the *
|
||||
* percent of experience *
|
||||
* points required. *
|
||||
********************************
|
||||
* problems occur here because when the player needs more
|
||||
* than (or equal amount of) 800 XP, multiplied number
|
||||
* grows larger than the 16 bit number allows (65,536)!
|
||||
|
||||
* Old routine: [[ (XP * 160) / XPREQD = graphics X ]]
|
||||
* MOVW XP;NUM1
|
||||
* MOVW #160;NUM2
|
||||
* JSR IMUL
|
||||
* MOVW RESULT;NUM1
|
||||
* MOVW XPREQD;NUM2
|
||||
* JSR IDIV
|
||||
|
||||
* New routine: [[ ( (1600/XPREQD) * (XP/10) ) ]]
|
||||
* it's not quite as accurate, but at least the graphics bar
|
||||
* will work for the higher levels!
|
||||
|
||||
STATUSXP MOVW #1600;NUM1
|
||||
MOVW XPREQD;NUM2
|
||||
JSR IDIV ; RESULT = 1600 / XPREQD
|
||||
MOVW RESULT;NUM1
|
||||
MOVW XP;NUM2
|
||||
JSR IMUL ; RESULT = RESULT * XP
|
||||
MOVW RESULT;NUM1
|
||||
MOVW #10;NUM2
|
||||
JSR IDIV ; RESULT = RESULT / 10
|
||||
LDA RESULT+1
|
||||
BNE :1
|
||||
LDA RESULT
|
||||
CMP #160
|
||||
BLT :0
|
||||
:1 LDA #0
|
||||
:0 LDY #35
|
||||
JMP STATUS
|
||||
|
335
input.output.s
Executable file
335
input.output.s
Executable file
@ -0,0 +1,335 @@
|
||||
********************************
|
||||
* Input/Output Routines *
|
||||
* Uses: IO.MAC *
|
||||
********************************
|
||||
|
||||
* External references
|
||||
; jewel.of.kaldun.s
|
||||
DATA EXT
|
||||
|
||||
********************************
|
||||
* Turn on text screen. *
|
||||
********************************
|
||||
|
||||
TEXT ENT
|
||||
STA $C056
|
||||
STA $C054
|
||||
STA $C051
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Routine to pause for RETURN *
|
||||
* to be pressed. *
|
||||
********************************
|
||||
|
||||
GETRET ENT
|
||||
LDA #23
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
LDA ESCABORT
|
||||
BMI :ESCCR
|
||||
CENTER GRSTR
|
||||
JMP :XXX
|
||||
:ESCCR MOVB #0;TTAB
|
||||
PRINT ESCCRSTR
|
||||
:XXX JSR M:GETKEY
|
||||
BIT ESCABORT
|
||||
BPL :YYY
|
||||
CMP #$9B ; ESCAPE
|
||||
BEQ :EXIT
|
||||
:YYY CMP #$8D ; RETURN
|
||||
BNE :XXX
|
||||
:EXIT LDA #23
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
LDA KEYBOARD
|
||||
CMP #$9B
|
||||
BNE :LEAVE
|
||||
PLA ; CLEAR STACK OF ADDRESS
|
||||
PLA
|
||||
:LEAVE LDA #%00000000
|
||||
STA ESCABORT
|
||||
STA KEYSTROB ; clear keypress
|
||||
JMP CLINE
|
||||
ESCABORT HEX 00
|
||||
GRSTR ASC "Press <RETURN> to continue"00
|
||||
ESCCRSTR ASC "<RETURN> to continue or <ESCAPE> to stop"00
|
||||
|
||||
********************************
|
||||
* Routine to wait for a Y or *
|
||||
* a N. *
|
||||
********************************
|
||||
|
||||
GETYN JSR M:GETKEY
|
||||
CMP #"Y"
|
||||
BEQ :YES
|
||||
CMP #"y"
|
||||
BEQ :YES
|
||||
CMP #"n"
|
||||
BEQ :NO
|
||||
CMP #"N"
|
||||
BNE GETYN
|
||||
:NO SEC
|
||||
RTS
|
||||
:YES CLC
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Routine to center a string. *
|
||||
********************************
|
||||
|
||||
CSTRING ENT
|
||||
LDY #0
|
||||
:0 LDA (DATA),Y
|
||||
BEQ :FINISH
|
||||
CMP #$8D
|
||||
BEQ :FINISH
|
||||
INY
|
||||
BNE :0
|
||||
:FINISH TYA
|
||||
LSR
|
||||
STA TEMP
|
||||
SEC
|
||||
LDA #20
|
||||
SBC TEMP
|
||||
STA TTAB
|
||||
JSR PRSTR
|
||||
|
||||
********************************
|
||||
* Print a carriage return. *
|
||||
********************************
|
||||
|
||||
PRCR INC TLINE
|
||||
JSR TEXTADDR
|
||||
LDY #0
|
||||
STY TTAB
|
||||
LDA TLINE
|
||||
CMP #24
|
||||
BCC END1
|
||||
STY TLINE
|
||||
END1 RTS
|
||||
|
||||
********************************
|
||||
* The following routine(s) *
|
||||
* handle printing with special *
|
||||
* control characters: *
|
||||
* *
|
||||
* ^I ($89) Inverse mode *
|
||||
* ^N ($8E) Normal mode *
|
||||
* ^M ($8D) Carriage Return *
|
||||
* ^@ ($80) Print Hex number *
|
||||
* that is stored *
|
||||
* at the pointer *
|
||||
* location in Dec. *
|
||||
* ^A ($81) Print Hex WORD *
|
||||
* that is stored *
|
||||
* at the pointer *
|
||||
* location in Dec. *
|
||||
* ^B ($82) To clear bottom *
|
||||
* 3 lines. *
|
||||
* ^C ($83) To center the *
|
||||
* following line *
|
||||
* of text on scrn. *
|
||||
* %00xxxxxx Htab + 1 *
|
||||
* %01xxxxxx Vtab *
|
||||
* *
|
||||
* All other characters lower *
|
||||
* than a SPACE ($A0) are *
|
||||
* ignored. *
|
||||
********************************
|
||||
|
||||
* MASK byte and PTR increment routine:
|
||||
|
||||
MASK HEX FF
|
||||
DATAINC INC DATA
|
||||
BNE END2
|
||||
INC DATA+1
|
||||
END2 RTS
|
||||
|
||||
* This is the Print routine:
|
||||
|
||||
PRSTR ENT
|
||||
LDY #0
|
||||
LDA (DATA),Y
|
||||
BEQ END2
|
||||
BMI :0
|
||||
CMP #%00111111
|
||||
BGE :VTAB
|
||||
STA TTAB
|
||||
DEC TTAB
|
||||
:NEXT JSR DATAINC
|
||||
JMP PRSTR
|
||||
:VTAB AND #%00111111
|
||||
:V0 STA TLINE
|
||||
JSR TEXTADDR
|
||||
BCC :NEXT
|
||||
LDA #0
|
||||
BEQ :V0
|
||||
:0 CMP #$89
|
||||
BNE :1
|
||||
LDA #%00111111
|
||||
:MASK STA MASK
|
||||
BNE :NEXT
|
||||
:1 CMP #$8E
|
||||
BNE :2
|
||||
LDA #%11111111
|
||||
BNE :MASK
|
||||
:2 CMP #$8D
|
||||
BNE :3
|
||||
:NEWLINE JSR PRCR
|
||||
JMP :NEXT
|
||||
:3 CMP #$80
|
||||
BNE :4
|
||||
JSR DATAINC
|
||||
LDA (DATA),Y
|
||||
STA PTR
|
||||
JSR DATAINC
|
||||
LDA (DATA),Y
|
||||
STA PTR+1
|
||||
JSR CONVERT
|
||||
JMP :NEXT
|
||||
:4 CMP #$83
|
||||
BNE :5
|
||||
LDY #1 ; pass #$83
|
||||
:40 LDA (DATA),Y
|
||||
CMP #$A0
|
||||
BLT :41
|
||||
INY
|
||||
BNE :40
|
||||
:41 TYA
|
||||
LSR
|
||||
STA TEMP
|
||||
SEC
|
||||
LDA #20
|
||||
SBC TEMP
|
||||
STA TTAB
|
||||
JMP :NEXT
|
||||
:5 CMP #$82
|
||||
BNE :6
|
||||
JSR CBOT3
|
||||
JMP :NEXT
|
||||
:6 CMP #$81
|
||||
BNE :7
|
||||
JSR DATAINC
|
||||
LDA (DATA),Y
|
||||
STA PTR
|
||||
JSR DATAINC
|
||||
LDA (DATA),Y
|
||||
STA PTR+1
|
||||
JSR CONVWORD
|
||||
JMP :NEXT
|
||||
:7 CMP #$A0
|
||||
BLT :NEXTPTR
|
||||
BIT AUTOCAPS
|
||||
BPL :GO
|
||||
JSR CHARCAPS ; capitalize letter
|
||||
:GO LDY TTAB
|
||||
AND MASK
|
||||
STA (TPTR),Y
|
||||
STA SPEAKER
|
||||
INY
|
||||
STY TTAB
|
||||
CPY #40
|
||||
BLT :NEXTPTR
|
||||
LDY #0
|
||||
STY TTAB
|
||||
:NEXTPTR JMP :NEXT
|
||||
AUTOCAPS HEX 00 ; default: Mixed mode
|
||||
|
||||
********************************
|
||||
* CLINE clears the current *
|
||||
* line pointed to by TPTR. *
|
||||
********************************
|
||||
|
||||
CLINE LDY #40
|
||||
LDA #$A0
|
||||
:0 STA (TPTR),Y
|
||||
DEY
|
||||
BPL :0
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* CLRMID clears middle portion *
|
||||
* of text screen. Lines 1-22. *
|
||||
* (line 0 = vtab 1) *
|
||||
********************************
|
||||
|
||||
CLRMID ENT
|
||||
LDA #22
|
||||
STA TLINE
|
||||
:0 JSR TEXTADDR
|
||||
JSR CLINE
|
||||
DEC TLINE
|
||||
BNE :0
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* CBOT3 clears the bottom *
|
||||
* three (3) lines of the text *
|
||||
* screen. *
|
||||
********************************
|
||||
|
||||
CBOT3 ENT
|
||||
LDA #21
|
||||
BNE CLRSCRN0
|
||||
|
||||
********************************
|
||||
* Clears the text screen. *
|
||||
********************************
|
||||
|
||||
CLRSCRN ENT
|
||||
LDA #0
|
||||
CLRSCRN0 STA TLINE
|
||||
:0 JSR TEXTADDR
|
||||
BCS END0
|
||||
JSR CLINE
|
||||
INC TLINE
|
||||
JMP :0
|
||||
|
||||
********************************
|
||||
* TEXTADDR uses the lookup *
|
||||
* tables to find the address *
|
||||
* of the line number stored in *
|
||||
* TLINE. *
|
||||
********************************
|
||||
|
||||
TEXTADDR ENT
|
||||
LDA TLINE
|
||||
CMP #24
|
||||
BGE END0
|
||||
TAY
|
||||
LDA TEXTLOW,Y
|
||||
STA TPTR
|
||||
LDA TEXTHIGH,Y
|
||||
STA TPTR+1
|
||||
CLC
|
||||
END0 RTS
|
||||
|
||||
********************************
|
||||
* The lookup tables for the *
|
||||
* text screen: *
|
||||
********************************
|
||||
|
||||
TEXTLOW HEX 0080008000800080
|
||||
HEX 28A828A828A828A8
|
||||
HEX 50D050D050D050D0
|
||||
TEXTHIGH HEX 0404050506060707
|
||||
HEX 0404050506060707
|
||||
HEX 0404050506060707
|
||||
|
||||
********************************
|
||||
* Sets inverse status line and *
|
||||
* clears last three lines of *
|
||||
* text screen. *
|
||||
********************************
|
||||
|
||||
STATLINE PRINT STATTEXT
|
||||
JSR CBOT3
|
||||
LDA #21
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
RTS
|
||||
STATTEXT HEX 015489 ; htab 1:vtab 21:inverse
|
||||
ASC " KY HP XP GP"
|
||||
HEX 8E00 ; normal
|
||||
|
26
io.mac.s
Executable file
26
io.mac.s
Executable file
@ -0,0 +1,26 @@
|
||||
* External references
|
||||
; jewel.of.kaldun.s
|
||||
DATA EXT
|
||||
; input.output.s
|
||||
PRSTR EXT
|
||||
|
||||
********************************
|
||||
* Input/Output Macros *
|
||||
********************************
|
||||
|
||||
PRINT MAC
|
||||
LDA #<]1
|
||||
STA DATA
|
||||
LDA #>]1
|
||||
STA DATA+1
|
||||
JSR PRSTR
|
||||
EOM
|
||||
|
||||
CENTER MAC
|
||||
LDA #<]1
|
||||
STA DATA
|
||||
LDA #>]1
|
||||
STA DATA+1
|
||||
JSR CSTRING
|
||||
EOM
|
||||
|
68
jewel.end.game.s
Executable file
68
jewel.end.game.s
Executable file
@ -0,0 +1,68 @@
|
||||
********************************
|
||||
* *
|
||||
* Jewel of Kaldun *
|
||||
* *
|
||||
* written by *
|
||||
* https://github.com/a2geek *
|
||||
* *
|
||||
* story by *
|
||||
* https://github.com/bshagle *
|
||||
* *
|
||||
* Copyright (c) 1990,2016 *
|
||||
* *
|
||||
********************************
|
||||
|
||||
* Code location:
|
||||
|
||||
ORG $0800
|
||||
|
||||
* Add in macro files:
|
||||
|
||||
USE jok-includes.inc
|
||||
PAG
|
||||
USE io.mac
|
||||
PAG
|
||||
USE general.mac
|
||||
PAG
|
||||
USE prolib.mac
|
||||
PAG
|
||||
|
||||
* Memory map:
|
||||
* __________
|
||||
* | | $FFFF
|
||||
* | ProDOS | to ProDOS/ROM
|
||||
* |__________| $BF00
|
||||
* | | $BEFF
|
||||
* | J.O.K. | to Main program
|
||||
* |__________| $6000
|
||||
* | | $5FFF
|
||||
* | HGR P2 | to Copy of title page
|
||||
* |__________| $4000
|
||||
* | | $3FFF
|
||||
* | HGR P1 | to Graphics display
|
||||
* |__________| $2000
|
||||
* | | $1FFF
|
||||
* | Map/Stat | to Map & Stats (to $1Cxx)
|
||||
* |__________| $1000
|
||||
* | | $0FFF
|
||||
* --> | J.O.K. | to JOK End Game routines
|
||||
* |__________| $0800 Reset routines
|
||||
* | | $07FF
|
||||
* | TextPage | to Text page
|
||||
* |__________| $0400
|
||||
* | | $03FF Free ($0200-$03CF)
|
||||
* | Zp & St | to System Stack ($0100-$01FF)
|
||||
* |__________| $0000 Zero Page ($0000-$00FF)
|
||||
|
||||
|
||||
* Save file name:
|
||||
|
||||
DSK JEWEL.END.GAME.bin
|
||||
|
||||
PAG
|
||||
* End Game Routines
|
||||
|
||||
PUT endgame
|
||||
PAG
|
||||
PUT reset
|
||||
|
428
jewel.of.kaldun.s
Executable file
428
jewel.of.kaldun.s
Executable file
@ -0,0 +1,428 @@
|
||||
********************************
|
||||
* *
|
||||
* Jewel of Kaldun *
|
||||
* (primary application segment)*
|
||||
* *
|
||||
* written by *
|
||||
* https://github.com/a2geek *
|
||||
* *
|
||||
* story by *
|
||||
* https://github.com/bshagle *
|
||||
* *
|
||||
* Copyright (c) 1990,2016 *
|
||||
* *
|
||||
********************************
|
||||
|
||||
* Code location:
|
||||
|
||||
ORG $6000
|
||||
|
||||
* External references:
|
||||
; reset.s
|
||||
RESETUP EXT
|
||||
RESTORE EXT
|
||||
; endgame.s
|
||||
THEDEATH EXT
|
||||
; graphics.s
|
||||
HGRCLEAR EXT
|
||||
|
||||
* Memory map:
|
||||
* __________
|
||||
* | | $FFFF
|
||||
* | ProDOS | to ProDOS/ROM
|
||||
* |__________| $BF00
|
||||
* | | $BEFF
|
||||
* --> | J.O.K. | to Main program
|
||||
* |__________| $6000
|
||||
* | | $5FFF
|
||||
* | HGR P2 | to Copy of title page
|
||||
* |__________| $4000
|
||||
* | | $3FFF
|
||||
* | HGR P1 | to Graphics display
|
||||
* |__________| $2000
|
||||
* | | $1FFF
|
||||
* | Map/Stat | to Map & Stats (to $1Cxx)
|
||||
* |__________| $1000
|
||||
* | | $0FFF
|
||||
* | J.O.K. | to JOK End Game routines
|
||||
* |__________| $0800 Reset routines
|
||||
* | | $07FF
|
||||
* | TextPage | to Text page
|
||||
* |__________| $0400
|
||||
* | | $03FF Free ($0200-$03CF)
|
||||
* | Zp & St | to System Stack ($0100-$01FF)
|
||||
* |__________| $0000 Zero Page ($0000-$00FF)
|
||||
*
|
||||
|
||||
* Save file name:
|
||||
|
||||
DSK JEWEL.OF.KALDUN.bin
|
||||
|
||||
* Add in macro files:
|
||||
|
||||
USE jok-includes.inc
|
||||
PAG
|
||||
USE io.mac
|
||||
PAG
|
||||
USE general.mac
|
||||
PAG
|
||||
USE math.mac
|
||||
PAG
|
||||
USE prolib.mac
|
||||
PAG
|
||||
|
||||
RETURN = $8D ; ASCII for <return> (high bit on)
|
||||
ESCAPE = $9B ; ASCII for <escape> ( " " " )
|
||||
|
||||
LEVEL1 = $1000
|
||||
LEVEL2 = $1600
|
||||
|
||||
********************************
|
||||
* Jewel Of Kaldun, main file: *
|
||||
********************************
|
||||
|
||||
JSR RESETUP
|
||||
LDA #$20 ; page 1 of Hires...
|
||||
STA 230
|
||||
JSR INIT ; initialize screens, etc.
|
||||
JSR CLRSCRN
|
||||
JSR CHEKCASE
|
||||
JSR HGRCLEAR
|
||||
JSR TITLEPG ; draw title page
|
||||
JSR WALLFADE ; fade in wall
|
||||
JSR HSTORE ; store hi-res page @ $4000
|
||||
MAIN ENT
|
||||
JSR HRESTORE ; restore hi-res page
|
||||
JSR SCPREP
|
||||
JSR SETHGR ; ensure that hi-res is on
|
||||
JSR SCROLL
|
||||
CMP #RETURN
|
||||
BEQ :PLAYGAM
|
||||
CMP #"Q"
|
||||
BEQ :BYEQUIT
|
||||
CMP #"q"
|
||||
BEQ :BYEQUIT
|
||||
CMP #"I"
|
||||
BEQ :INSTR
|
||||
CMP #"i"
|
||||
BNE MAIN
|
||||
:INSTR JSR TEXT
|
||||
JSR STORY
|
||||
JMP MAIN
|
||||
:BYEQUIT JSR DOQUIT
|
||||
JMP MAIN
|
||||
:PLAYGAM JSR LOADER
|
||||
JSR HGRCLEAR
|
||||
JSR CLRSCRN
|
||||
LDA LOADSTAT
|
||||
CMP #1
|
||||
BEQ :RESTART
|
||||
JSR MONSINIT ; clear out monsters
|
||||
MOVW #0;GP
|
||||
MOVW #0;XP
|
||||
MOVW #100;XPREQD
|
||||
MOVB #0;KEY
|
||||
MOVB #0;SPKEY
|
||||
MOVB #10;HP
|
||||
MOVB #10;MAXHP
|
||||
MOVB #1;CLEVEL
|
||||
MOVB #25;CX
|
||||
MOVB #32;CY
|
||||
MOVB #-1;OX
|
||||
MOVB #-1;OY
|
||||
MOVB #-1;X0
|
||||
MOVB #-1;Y0
|
||||
MOVW #LEVEL1;MAPADDR
|
||||
:RESTART JSR STATLINE
|
||||
JSR STATUSGP
|
||||
JSR STATUSKY
|
||||
JSR STATUSHP
|
||||
JSR STATUSXP
|
||||
:UPDATE JSR UPSCREEN
|
||||
:GOING JSR CHKLEVEL
|
||||
JSR CTRLLOOP
|
||||
PHA ; save exit code
|
||||
JSR MOVMONST
|
||||
PLA ; and restore it
|
||||
JSR CHKLIFE
|
||||
BEQ :GOING
|
||||
CMP #-1
|
||||
BNE :UPDATE
|
||||
JSR CBOT3
|
||||
JSR GETRET
|
||||
JMP MAIN
|
||||
|
||||
********************************
|
||||
* Check if user can handle *
|
||||
* lower case letters. *
|
||||
********************************
|
||||
CHEKCASE LDX #%00000000 ; default: Mixed mode
|
||||
LDA MACHID
|
||||
AND #%11001000 ; Keep ID bits
|
||||
BEQ :CHECK ; Have an Apple II
|
||||
CMP #%01000000 ; Check for an Apple II+
|
||||
BNE :OKAY ; Nope.
|
||||
:CHECK PRINT CASEMSG ; ask if user can view in
|
||||
JSR GETYN ; lower case
|
||||
BCC :OKAY
|
||||
LDX #%10000000
|
||||
:OKAY STX AUTOCAPS ; adjust for user.
|
||||
RTS
|
||||
CASEMSG HEX 4A83
|
||||
ASC "DO YOU HAVE LOWERCASE?"8D83
|
||||
ASC "(Y/N)"00
|
||||
|
||||
********************************
|
||||
* Check if player wishes to *
|
||||
* quit. *
|
||||
********************************
|
||||
DOQUIT ENT
|
||||
PRINT QUITMSG
|
||||
JSR GETYN
|
||||
BCC :QUITJOK
|
||||
JSR CBOT3
|
||||
RTS
|
||||
|
||||
:QUITJOK LDY #0 ; copy quit-code
|
||||
:QLOOP LDA BEGQUIT,Y ; to $200
|
||||
STA $200,Y
|
||||
INY
|
||||
CPY #ENDQUIT-BEGQUIT+1
|
||||
BLT :QLOOP
|
||||
LDY #0 ; restore
|
||||
:MLOOP LDA RESTORE,Y ; old reset vector
|
||||
STA $3F2,Y
|
||||
INY
|
||||
CPY #3
|
||||
BLT :MLOOP
|
||||
JMP $200+$7 ; skip quit code
|
||||
BEGQUIT DFB 4 ; quit code
|
||||
DFB 0
|
||||
DW 0000
|
||||
DFB 0
|
||||
DW 0000
|
||||
|
||||
MOVW #$400;PTR ; clear memory
|
||||
LDA #0 ; from $400 to
|
||||
LDY #0 ; $BEFF
|
||||
:LOOP STA (PTR),Y
|
||||
INY
|
||||
BNE :LOOP
|
||||
STA SPEAKER
|
||||
INC PTR+1
|
||||
LDA PTR+1
|
||||
CMP #$BF
|
||||
BLT :LOOP
|
||||
JSR $FB2F ; text..
|
||||
JSR $FC58 ; clear screen
|
||||
LDA #"S" ; print "SMILE!"
|
||||
STA $400 ; the hard way...
|
||||
LDA #"M"
|
||||
STA $401
|
||||
LDA #"I"
|
||||
STA $402
|
||||
LDA #"L"
|
||||
STA $403
|
||||
LDA #"E"
|
||||
STA $404
|
||||
LDA #"!"
|
||||
STA $405
|
||||
LDY #20 ; pause
|
||||
:PAUSE LDA #255
|
||||
JSR $FCA8
|
||||
DEY
|
||||
BNE :PAUSE
|
||||
JSR $BF00 ; quit.
|
||||
DFB $65
|
||||
DW $200
|
||||
HEX 00
|
||||
ENDQUIT
|
||||
QUITMSG HEX 5783
|
||||
ASC "Do you wish to exit?"00
|
||||
|
||||
********************************
|
||||
* Check to see if Meltok is *
|
||||
* still alive! *
|
||||
********************************
|
||||
CHKLIFE PHA
|
||||
LDA HP ; check hp
|
||||
BEQ :DEATH ; if hp=0, dead
|
||||
CMP MAXHP ; check against max
|
||||
BLT :ALIVE ; if hp<max, alive
|
||||
BEQ :ALIVE ; if hp=max, alive
|
||||
:DEATH PLA ; throw away old status
|
||||
JSR CLRSCRN ; clear text screen
|
||||
PRINT DEATHMSG
|
||||
JSR THEDEATH ; do death routine
|
||||
LDA #-1 ; done with game
|
||||
RTS
|
||||
:ALIVE PLA ; use old status
|
||||
RTS
|
||||
DEATHMSG HEX 825583
|
||||
ASC "... Suddenly ..."00
|
||||
|
||||
********************************
|
||||
* Check to see if Meltok has *
|
||||
* advanced a level. *
|
||||
********************************
|
||||
CHKLEVEL LDA XP+1 ; check hi byte of xp
|
||||
CMP XPREQD+1 ; against xpreq'd
|
||||
BLT :NOINCR ; if xp<xpreq'd, no up lvl
|
||||
BEQ :CHECKLO ; if xp=xpreq'd, check lo byte
|
||||
BGE :UPLEVEL ; if xp>xpreq'd, go up level!
|
||||
:NOINCR RTS
|
||||
:CHECKLO LDA XP ; check lo byte of xp
|
||||
CMP XPREQD ; against xpreq'd
|
||||
BLT :NOINCR ; if xp<xpreq'd, no up lvl
|
||||
:UPLEVEL SUBW XP;XPREQD;XP ; xp= xp - xpreq'd
|
||||
IMULW XPREQD;#2;XPREQD ; xpreq'd= xpreq'd * 2
|
||||
INC CLEVEL ; add 1 to character level
|
||||
LDA RANDOM1 ; generate random number
|
||||
EOR RANDOM3
|
||||
AND #%00001111 ; go up 1-16 hit points
|
||||
CLC
|
||||
ADC MAXHP
|
||||
STA MAXHP ; add 0-15 to maxhp
|
||||
INC MAXHP ; add +1 to maxhp.
|
||||
MOVB MAXHP;HP ; and restore char to full H.
|
||||
JSR STATUSXP ; update XP
|
||||
JSR STATUSHP ; and HP...
|
||||
PRINT ADVANCED ; print advancement msg
|
||||
STA KEYSTROB
|
||||
:WAITESC LDA KEYBOARD ; wait for user to press
|
||||
CMP #$8D ; RET to continue with
|
||||
BNE :WAITESC ; game.
|
||||
STA KEYSTROB
|
||||
JSR CBOT3
|
||||
RTS ; serves as exit.
|
||||
ADVANCED HEX 825501 ; vtab 22:htab 1
|
||||
ASC "You have advanced a level! Meltok is"8D
|
||||
ASC "now level "80
|
||||
DA CLEVEL
|
||||
ASC " and needs "81
|
||||
DA XPREQD
|
||||
ASC " experience"8D
|
||||
ASC "points to advance to next level. [RET]"00
|
||||
|
||||
********************************
|
||||
* Initialize Text Screen and *
|
||||
* any variables that are *
|
||||
* required to be pre-set. *
|
||||
********************************
|
||||
|
||||
INIT LDA #149
|
||||
JSR $FDED ; disable 80 colums
|
||||
JSR TEXT ; set text mode
|
||||
LDA #0
|
||||
STA KEY
|
||||
STA SPKEY
|
||||
STA GP
|
||||
STA XP
|
||||
STA XP+1
|
||||
LDA #<100
|
||||
STA XPREQD
|
||||
LDA #>100
|
||||
STA XPREQD+1
|
||||
LDA #10
|
||||
STA HP
|
||||
STA MAXHP
|
||||
LDA #1
|
||||
STA CLEVEL
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Variables for Jewel of *
|
||||
* Kaldun, all are external: *
|
||||
* GP: Gold Pieces *
|
||||
* XP: Experience *
|
||||
* XPREQD: Experience required*
|
||||
* KEY: Number of keys *
|
||||
* SPKEY: Special key flag *
|
||||
* HP: Hit Points *
|
||||
* MAXHP: Maximum HP *
|
||||
* CLEVEL: Character level *
|
||||
********************************
|
||||
|
||||
GP = $1C00
|
||||
XP = $1C02
|
||||
XPREQD = $1C04
|
||||
KEY = $1C06
|
||||
SPKEY = $1C07
|
||||
HP = $1C08
|
||||
MAXHP = $1C09
|
||||
CLEVEL = $1C0A
|
||||
CX = $1C0B
|
||||
CY = $1C0C
|
||||
XOFF = $1C0D
|
||||
YOFF = $1C0F
|
||||
MAPADDR = $1C11
|
||||
OX = $1C13
|
||||
OY = $1C14
|
||||
DX = $1C15
|
||||
DY = $1C16
|
||||
AX = $1C17
|
||||
AY = $1C18
|
||||
X0 = $1C19
|
||||
Y0 = $1C1A
|
||||
X1 = $1C1B
|
||||
Y1 = $1C1C
|
||||
TEMP0 = $1C1D
|
||||
WX = $1C1E
|
||||
WY = $1C1F
|
||||
ZX = $1C20
|
||||
ZY = $1C21
|
||||
TEMPX = $1C22
|
||||
TEMPY = $1C23
|
||||
XPLACE = $1C24
|
||||
YPLACE = $1C26
|
||||
NX = $1C28
|
||||
NY = $1C29
|
||||
CH:X = $1C2A
|
||||
CH:Y = $1C2C
|
||||
|
||||
* Monster variables:
|
||||
|
||||
MONSMAX = 30
|
||||
M_HP = $1C2E
|
||||
M_TYPE = $1C4C
|
||||
M_X = $1C6A
|
||||
M_Y = $1C88
|
||||
M_MOVE = $1CA6
|
||||
M_X0 = $1CC4
|
||||
M_X1 = $1CE2
|
||||
M_Y0 = $1D00
|
||||
M_LEVEL = $1D1E
|
||||
|
||||
* Add in all routines:
|
||||
|
||||
PAG
|
||||
PUT input.output
|
||||
PAG
|
||||
PUT convert
|
||||
PAG
|
||||
PUT graphics
|
||||
PAG
|
||||
PUT math
|
||||
PAG
|
||||
PUT castles
|
||||
PAG
|
||||
PUT shapes
|
||||
PAG
|
||||
PUT title
|
||||
PAG
|
||||
PUT prolib
|
||||
PAG
|
||||
PUT filing
|
||||
PAG
|
||||
PUT places
|
||||
PAG
|
||||
PUT noise
|
||||
PAG
|
||||
PUT display
|
||||
PAG
|
||||
PUT monsters
|
||||
PAG
|
||||
PUT main.control
|
||||
PAG
|
||||
PUT story
|
||||
|
35
jok-includes.inc
Executable file
35
jok-includes.inc
Executable file
@ -0,0 +1,35 @@
|
||||
* ZP Equates:
|
||||
|
||||
TLINE EQU $00 ; address of text screen line
|
||||
TPTR EQU $01 ; line number of current text
|
||||
TTAB EQU $03 ; index for text screen (HTAB)
|
||||
TEMP EQU $04 ; temporary storage
|
||||
DATA EQU $05 ; data address
|
||||
PTR EQU $07 ; an extra pointer...
|
||||
HPTR EQU $09 ; address of hi-res line
|
||||
HPTR2 EQU $0B ; address of 2ndary hi-res line
|
||||
HLINE EQU $0D ; current hi-res line number
|
||||
HLINE2 EQU $0F ; secondary hi-res line number
|
||||
YTEMP EQU $10 ; temporary storage for Y reg.
|
||||
XTEMP EQU $11 ; temporary storage for X reg.
|
||||
|
||||
* ProDOS locations:
|
||||
|
||||
MACHID EQU $BF98 ; machine ID in ProDOS global pg
|
||||
|
||||
* I/O locations:
|
||||
|
||||
KEYBOARD EQU $C000 ; address for keyboard input
|
||||
KEYSTROB EQU $C010 ; clears current keypress
|
||||
SPEAKER EQU $C030 ; to click the speaker: noise
|
||||
|
||||
* AppleSoft locations:
|
||||
|
||||
HCOLOR = $F6F0
|
||||
HPLOTTO = $F53A
|
||||
HPOSN = $F411
|
||||
|
||||
* ROM locations:
|
||||
|
||||
MONWAIT EQU $FCA8 ; monitor wait routine (Acc.)
|
||||
|
20
jok.segments.s
Executable file
20
jok.segments.s
Executable file
@ -0,0 +1,20 @@
|
||||
*--------------------------*
|
||||
* SEGMENTS *
|
||||
*--------------------------*
|
||||
|
||||
TYP $06 ; Binary File / Fixed Address
|
||||
|
||||
*--------------------------
|
||||
* Segment #1
|
||||
*--------------------------
|
||||
|
||||
ASM jewel.of.kaldun.s ; Master Source File for Segment #1
|
||||
|
||||
*--------------------------
|
||||
* Segment #2
|
||||
*--------------------------
|
||||
|
||||
ASM jewel.end.game.s ; Master Source File for Segment #2
|
||||
|
||||
*--------------------------
|
||||
|
55
jok.system.s
55
jok.system.s
@ -5,8 +5,6 @@
|
||||
|
||||
TYP $FF ; system program
|
||||
ORG $2000 ; they originate @ $2000
|
||||
EXP OFF ; macro expansion
|
||||
TR ON ; truncate
|
||||
|
||||
* General Macros --
|
||||
|
||||
@ -108,8 +106,9 @@ TIT_LEN EQU $2000 ; Length of Title (full screen)
|
||||
STA $BF6F
|
||||
* Load in Title:
|
||||
@OPEN #TIT_NAME;#TIT_BUFF;REFNUM
|
||||
BCS :HELPERR ; can't quite make it.
|
||||
@READ REFNUM;#TIT_ADDR;#TIT_LEN
|
||||
BCC :OK_TITLE
|
||||
JMP LOADERRT
|
||||
:OK_TITLE @READ REFNUM;#TIT_ADDR;#TIT_LEN
|
||||
@CLOSE REFNUM
|
||||
* Print version of Loader:
|
||||
LDY #19
|
||||
@ -121,37 +120,56 @@ TIT_LEN EQU $2000 ; Length of Title (full screen)
|
||||
JSR CHECKSUM
|
||||
* Load in JOK:
|
||||
@OPEN #JOK_NAME;#JOK_BUFF;REFNUM
|
||||
:HELPERR BCS :HELPER2
|
||||
@READ REFNUM;#JOK_ADDR;#JOK_LEN
|
||||
BCC :OK_JOK
|
||||
JMP LOADERRJ
|
||||
:OK_JOK @READ REFNUM;#JOK_ADDR;#JOK_LEN
|
||||
@CLOSE REFNUM
|
||||
* Load in JOK end game:
|
||||
@OPEN #JOK2NAME;#JOK2BUFF;REFNUM
|
||||
:HELPER2 BCS LOADERR2
|
||||
BCS LOADERRE
|
||||
@READ REFNUM;#JOK2ADDR;#JOK2LEN
|
||||
@CLOSE REFNUM
|
||||
* Check Checksum: (A0E647)
|
||||
LDA SUM+2
|
||||
CMP #$A0
|
||||
BNE DATACORR
|
||||
BNE :DATACORR
|
||||
LDA SUM+1
|
||||
CMP #$E6
|
||||
BNE DATACORR
|
||||
LDA SUM
|
||||
CMP #$47
|
||||
BNE DATACORR
|
||||
:DATACORR 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
|
||||
LOADERRT LDA #>TIT_NAME
|
||||
LDY #<TIT_NAME
|
||||
JMP :MSG
|
||||
LOADERRJ LDA #>JOK_NAME
|
||||
LDY #<JOK_NAME
|
||||
JMP :MSG
|
||||
LOADERRE LDA #>JOK2NAME
|
||||
LDY #<JOK2NAME
|
||||
:MSG PHA
|
||||
TYA
|
||||
PHA
|
||||
LDY #40
|
||||
:LOOP1 LDA ERRORMSG-1,Y
|
||||
STA LINE24-1,Y
|
||||
DEY
|
||||
BNE :LOOP1
|
||||
* Print filename on LINE24 overlaying <FILENAME> in the text...
|
||||
PLA
|
||||
STA PTR
|
||||
PLA
|
||||
STA PTR+1
|
||||
LDY #0
|
||||
LDA (PTR),Y ; length byte
|
||||
TAX
|
||||
:LOOP2 INY
|
||||
LDA (PTR),Y
|
||||
STA LINE24+7,Y
|
||||
DEX
|
||||
BNE :LOOP2
|
||||
ERRORXX JSR $FF3A ; bell
|
||||
FOREVER LDA #<$0200 ; sets $03F0 (BRK address) to
|
||||
@ -190,8 +208,7 @@ DATACORR LDY #28
|
||||
JSR $FF3A ; bell
|
||||
JMP FOREVER
|
||||
|
||||
ERRORMSG ASC "ERROR: JEWEL.OF.KALDUN IS UNACCESSABLE!"
|
||||
ERRORMS2 ASC "ERROR: JEWEL.END.GAME IS UNACCESSABLE!"
|
||||
ERRORMSG ASC "ERROR: <FILENAME> IS UNACCESSABLE!"
|
||||
JOK2NAME STR "JEWEL.END.GAME"
|
||||
JOK_NAME STR "JEWEL.OF.KALDUN"
|
||||
TIT_NAME STR "JEWEL.TITLE.PIC"
|
||||
|
1067
main.control.s
Executable file
1067
main.control.s
Executable file
File diff suppressed because it is too large
Load Diff
34
math.mac.s
Executable file
34
math.mac.s
Executable file
@ -0,0 +1,34 @@
|
||||
********************************
|
||||
* Math macros used by Jewel of *
|
||||
* Kaldun source: *
|
||||
* Uses: *
|
||||
* GENERAL.MAC *
|
||||
* MATH *
|
||||
********************************
|
||||
|
||||
IMULW MAC
|
||||
MOVW ]1;NUM1
|
||||
MOVW ]2;NUM2
|
||||
JSR IMUL
|
||||
MOVW RESULT;]3
|
||||
EOM
|
||||
|
||||
IDIVW MAC
|
||||
MOVW ]1;NUM1
|
||||
MOVW ]2;NUM2
|
||||
JSR IDIV
|
||||
MOVW RESULT;]3
|
||||
EOM
|
||||
|
||||
IMODW MAC
|
||||
MOVW ]1;NUM1
|
||||
MOVW ]2;NUM2
|
||||
JSR IDIV
|
||||
MOVW NUM1;]3
|
||||
EOM
|
||||
|
||||
IDIVMODW MAC
|
||||
IDIVW ]1;]2;]3
|
||||
MOVW NUM1;]4
|
||||
EOM
|
||||
|
126
math.s
Executable file
126
math.s
Executable file
@ -0,0 +1,126 @@
|
||||
********************************
|
||||
* Mathematical routines used *
|
||||
* by Jewel of Kaldun *
|
||||
********************************
|
||||
|
||||
|
||||
********************************
|
||||
* Integer division routine. *
|
||||
* NUM0 = routine scratch *
|
||||
* space *
|
||||
* NUM1 = numerator *
|
||||
* NUM2 = denominator *
|
||||
* RESULT = quotient *
|
||||
* remainder is in NUM1 after *
|
||||
* completion of division. *
|
||||
********************************
|
||||
|
||||
IDIV LDA #0
|
||||
STA RESULT
|
||||
STA RESULT+1
|
||||
LDA NUM2
|
||||
ORA NUM2+1
|
||||
BNE :PREP
|
||||
SEC
|
||||
RTS
|
||||
:PREP LDX #0
|
||||
LDA NUM2
|
||||
STA NUM0
|
||||
LDA NUM2+1
|
||||
STA NUM0+1
|
||||
:99 ASL NUM0
|
||||
ROL NUM0+1
|
||||
BCS :GO
|
||||
INX
|
||||
JMP :99
|
||||
:GO LDA NUM2
|
||||
STA NUM0
|
||||
LDA NUM2+1
|
||||
STA NUM0+1
|
||||
TXA
|
||||
TAY
|
||||
BEQ :SKIP
|
||||
:0 ASL NUM0
|
||||
ROL NUM0+1
|
||||
DEY
|
||||
BNE :0
|
||||
:SKIP LDA NUM0+1
|
||||
CMP NUM1+1
|
||||
BEQ :1
|
||||
BGE :CONT
|
||||
BLT :2
|
||||
:1 LDA NUM0
|
||||
CMP NUM1
|
||||
BEQ :2
|
||||
BGE :CONT
|
||||
:2 SEC
|
||||
LDA NUM1
|
||||
SBC NUM0
|
||||
STA NUM1
|
||||
LDA NUM1+1
|
||||
SBC NUM0+1
|
||||
STA NUM1+1
|
||||
LDA #0
|
||||
STA NUM0+1
|
||||
LDA #1
|
||||
STA NUM0
|
||||
TXA
|
||||
TAY
|
||||
BEQ :11
|
||||
:10 ASL NUM0
|
||||
ROL NUM0+1
|
||||
DEY
|
||||
BNE :10
|
||||
:11 CLC
|
||||
LDA RESULT
|
||||
ADC NUM0
|
||||
STA RESULT
|
||||
LDA RESULT+1
|
||||
ADC NUM0+1
|
||||
STA RESULT+1
|
||||
:CONT DEX
|
||||
BPL :GO
|
||||
CLC
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Integer multiplication *
|
||||
* routine: *
|
||||
* NUM1 = one number *
|
||||
* NUM2 = second number *
|
||||
* RESULT = answer to NUM1xNUM2 *
|
||||
********************************
|
||||
|
||||
IMUL LDA #0
|
||||
STA RESULT
|
||||
STA RESULT+1
|
||||
:MORE LDA NUM2
|
||||
BNE :GO
|
||||
LDA NUM2+1
|
||||
BNE :GO
|
||||
RTS
|
||||
:GO LSR NUM2+1
|
||||
ROR NUM2
|
||||
BCC :SHIFT
|
||||
CLC
|
||||
LDA NUM1
|
||||
ADC RESULT
|
||||
STA RESULT
|
||||
LDA NUM1+1
|
||||
ADC RESULT+1
|
||||
STA RESULT+1
|
||||
:SHIFT ASL NUM1
|
||||
ROL NUM1+1
|
||||
JMP :MORE
|
||||
|
||||
********************************
|
||||
* Variables used by the *
|
||||
* integer multiplication and *
|
||||
* division routines: *
|
||||
********************************
|
||||
|
||||
NUM0 HEX 0000
|
||||
NUM1 HEX 0000
|
||||
NUM2 HEX 0000
|
||||
RESULT HEX 0000
|
||||
|
390
monsters.s
Executable file
390
monsters.s
Executable file
@ -0,0 +1,390 @@
|
||||
********************************
|
||||
* Monster Routines: *
|
||||
********************************
|
||||
|
||||
* Init Monster variables:
|
||||
MONSINIT LDY #0 ; zero out all monster
|
||||
LDA #0 ; data.
|
||||
:FINISH STA M_HP,Y
|
||||
STA M_TYPE,Y
|
||||
STA M_X,Y
|
||||
STA M_Y,Y
|
||||
STA M_MOVE,Y
|
||||
STA M_X0,Y
|
||||
STA M_X1,Y
|
||||
STA M_Y0,Y
|
||||
INY
|
||||
CPY #MONSMAX
|
||||
BLT :FINISH
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Check to see if another *
|
||||
* monster has appeared. *
|
||||
********************************
|
||||
MONCHECK LDA RANDOM2
|
||||
EOR RANDOM3 ; 1 in 16 chance of appearing:
|
||||
AND #%00001111 ; check if monster is
|
||||
BNE :NOMONS0 ; appearing this time
|
||||
LDY #0
|
||||
:CONT LDA M_HP,Y ; find space in monster
|
||||
STY CURMONST ; list.
|
||||
BEQ :FOUND
|
||||
INY
|
||||
CPY #MONSMAX
|
||||
BLT :CONT
|
||||
:NOMONS0 JMP _NOMONST ; no space in list.
|
||||
:FOUND LDA RANDOM1
|
||||
EOR RANDOM3
|
||||
AND #%00011111 ; y location (max = 32)
|
||||
STA CURMON_Y
|
||||
INC CURMON_Y
|
||||
LDA RANDOM2
|
||||
AND #%00011111 ; 1st part of x (gives 0-32)
|
||||
STA CURMON_X ; map is 32 + 16 = 48.
|
||||
INC CURMON_X
|
||||
LDA RANDOM3
|
||||
AND #%00001111 ; 2nd part of x (gives 0-15)
|
||||
CLC
|
||||
ADC CURMON_X
|
||||
STA CURMON_X
|
||||
CMP #WMAP ; ensure that map does not
|
||||
BGE :NOMONS0 ; exceed X coordinate max
|
||||
LDA CURMON_Y
|
||||
CMP #HMAP ; ensure that map does not
|
||||
BGE :NOMONS0 ; exceed Y coordinate max
|
||||
LDX #>LEVEL1
|
||||
LDA RANDOM1
|
||||
EOR RANDOM2
|
||||
EOR RANDOM3
|
||||
AND #%00000001
|
||||
BEQ :ATLVL1
|
||||
:ATLVL2 LDX #>LEVEL2
|
||||
:ATLVL1 STX CURMON_L
|
||||
*-------------------------------
|
||||
JSR MONMOVCK ; check if good locale
|
||||
BCC :GOODLOC
|
||||
JMP _NOMONST ; bad location
|
||||
*-------------------------------
|
||||
:GOODLOC LDY CURMONST
|
||||
LDA RANDOM1 ; randomize
|
||||
EOR RANDOM2
|
||||
EOR RANDOM3
|
||||
AND #%00000111
|
||||
CMP #2
|
||||
BLT :GHOST
|
||||
CMP #4
|
||||
BLT :ZOMBIE
|
||||
:BLOB LDA #2
|
||||
STA M_HP,Y
|
||||
LDA #4
|
||||
STA M_MOVE,Y
|
||||
LDA #13
|
||||
BNE :FINISH ; always
|
||||
:GHOST LDA #8
|
||||
STA M_HP,Y
|
||||
LDA #2
|
||||
STA M_MOVE,Y
|
||||
LDA #12
|
||||
BNE :FINISH ; always
|
||||
:ZOMBIE LDA #16
|
||||
STA M_HP,Y
|
||||
LDA #1
|
||||
STA M_MOVE,Y
|
||||
LDA #14
|
||||
:FINISH STA M_TYPE,Y
|
||||
LDA CURMON_X
|
||||
STA M_X,Y
|
||||
LDA CURMON_Y
|
||||
STA M_Y,Y
|
||||
LDA CURMON_L
|
||||
STA M_LEVEL,Y
|
||||
CMP MAPADDR+1 ; no at same level
|
||||
BNE _NOMONST
|
||||
LDA M_X,Y
|
||||
TAX
|
||||
LDA M_Y,Y
|
||||
TAY
|
||||
CPX X0
|
||||
BLT _NOMONST ; exit, keep monster
|
||||
CPX X1
|
||||
BGE _NOMONST ; exit, keep monster
|
||||
CPY Y0
|
||||
BLT _NOMONST ; exit, keep monster
|
||||
CPY Y1
|
||||
BGE _NOMONST ; exit, keep monster
|
||||
LDA #0 ; no good -- same screen as
|
||||
STA M_HP,Y ; Meltok!
|
||||
_NOMONST RTS
|
||||
CURMONST HEX 00
|
||||
CURMON_X HEX 00
|
||||
CURMON_Y HEX 00
|
||||
CURMON_L HEX 00
|
||||
|
||||
********************************
|
||||
* Make monsters move about! *
|
||||
********************************
|
||||
MOVMONST LDY #0
|
||||
:DOMORE STY CURMONST
|
||||
LDA M_HP,Y
|
||||
BEQ :NEXTMON
|
||||
LDA M_MOVE,Y
|
||||
BEQ :MOVEIT
|
||||
SEC
|
||||
SBC #1
|
||||
STA M_MOVE,Y
|
||||
JSR CH4CHAR ; attack anyway!
|
||||
JMP :NEXTMON
|
||||
:MOVEIT LDA M_TYPE,Y
|
||||
TAX
|
||||
LDA TYPCONST-12,X ; update move counter
|
||||
STA M_MOVE,Y ; again...
|
||||
LDA M_Y,Y
|
||||
STA CURMON_Y
|
||||
LDA M_X,Y
|
||||
STA CURMON_X
|
||||
LDA M_LEVEL,Y
|
||||
STA CURMON_L
|
||||
JSR CH4CHAR ; if M near, attack him
|
||||
BCC :NEXTMON ; carry clear = attacked
|
||||
LDA RANDOM1
|
||||
AND #%00000011
|
||||
BNE :MOVETOW
|
||||
:MOVERAN JSR M_RANDOM ; move randomly
|
||||
JMP :NEXTMON
|
||||
:MOVETOW JSR M_TOWARD ; move toward Meltok
|
||||
:NEXTMON INC CURMONST
|
||||
LDY CURMONST
|
||||
CPY #MONSMAX
|
||||
BLT :DOMORE
|
||||
LDY #0
|
||||
:CHECKIT LDA M_HP,Y ; see if monster is in table
|
||||
BEQ :DOTHAT ; if HP = 0, not there
|
||||
LDA M_TYPE,Y ; check if the monster moved
|
||||
TAX ; this turn. That is, check
|
||||
LDA TYPCONST-12,X ;if at the maximum number of
|
||||
CMP M_MOVE,Y ; turns allowed for type.
|
||||
BNE :DOTHAT ; if not eq, did not move
|
||||
LDA M_X,Y ; see if monster is actually
|
||||
TAX ; in the same room as
|
||||
INX ; Meltok is.
|
||||
CPX X0 ; checking the X range
|
||||
BLT :DOTHAT
|
||||
CPX X1
|
||||
BEQ :SKIP00 ; only if > than
|
||||
BGE :DOTHAT
|
||||
:SKIP00 LDA M_Y,Y ; checking the Y range
|
||||
TAX
|
||||
INX
|
||||
CPX Y0
|
||||
BLT :DOTHAT
|
||||
CPX Y1
|
||||
BEQ :SKIP11 ; if <=, in the same room
|
||||
BGE :DOTHAT
|
||||
:SKIP11 LDA M_LEVEL,Y
|
||||
CMP MAPADDR+1
|
||||
BEQ :DOTHIS ; if ==, save level too!
|
||||
:DOTHAT INY
|
||||
CPY #MONSMAX
|
||||
BGE :EXITNOW
|
||||
BLT :CHECKIT
|
||||
:DOTHIS JSR UPSCREEN
|
||||
:EXITNOW RTS
|
||||
TYPCONST DFB 2,4,1
|
||||
|
||||
CH4CHAR LDA M_LEVEL,Y ; check if on same leve
|
||||
CMP MAPADDR+1 ; as Meltok
|
||||
BEQ :CHECKX
|
||||
SEC
|
||||
RTS
|
||||
:CHECKX LDA M_X,Y
|
||||
SEC
|
||||
SBC CX
|
||||
CLC ; why, i do not know
|
||||
ADC #1
|
||||
CMP #1
|
||||
BEQ :CHECKY0 ; Y should = 0; horizontal
|
||||
CMP #-1
|
||||
BEQ :CHECKY0 ; Y should = 0; horizontal
|
||||
CMP #0
|
||||
BEQ :CHECKY ; check for vertical
|
||||
SEC
|
||||
RTS
|
||||
:CHECKY LDA M_Y,Y
|
||||
SEC
|
||||
SBC CY
|
||||
CLC ; why, i do not know
|
||||
ADC #1
|
||||
CMP #1
|
||||
BEQ :ATTACK
|
||||
CMP #-1
|
||||
BEQ :ATTACK
|
||||
SEC
|
||||
RTS
|
||||
:CHECKY0 LDA M_Y,Y
|
||||
SEC
|
||||
SBC CY
|
||||
CLC ; why, i do not know
|
||||
ADC #1
|
||||
CMP #0 ; we have a horizontal attack!
|
||||
BEQ :ATTACK
|
||||
SEC
|
||||
RTS
|
||||
:ATTACK LDA M_TYPE,Y
|
||||
JSR M:OWIE
|
||||
CLC
|
||||
RTS
|
||||
|
||||
M_TOWARD LDA CURMON_X
|
||||
CMP CX
|
||||
BEQ :CHECKY
|
||||
BLT :XISLESS
|
||||
DEC CURMON_X
|
||||
JMP :FINISHX
|
||||
:XISLESS INC CURMON_X
|
||||
:FINISHX JSR MONMOVCK
|
||||
BCC M_REGMOV ; ok move!
|
||||
LDY CURMONST
|
||||
LDA M_X,Y
|
||||
STA CURMON_X
|
||||
:CHECKY LDA CURMON_Y
|
||||
CMP CY
|
||||
BEQ :_RANDOM ; do random move
|
||||
BLT :YISLESS
|
||||
DEC CURMON_Y
|
||||
JMP :FINISHY
|
||||
:YISLESS INC CURMON_Y
|
||||
:FINISHY JSR MONMOVCK
|
||||
BCC M_REGMOV ; ok, move!
|
||||
LDY CURMONST
|
||||
LDA M_Y,Y
|
||||
STA CURMON_Y
|
||||
:_RANDOM JMP M_RANDOM
|
||||
|
||||
M_REGMOV LDY CURMONST
|
||||
LDA CURMON_X
|
||||
STA M_X,Y
|
||||
LDA CURMON_Y
|
||||
STA M_Y,Y
|
||||
RTS
|
||||
|
||||
M_RANDOM LDA RANDOM1
|
||||
BMI :XDOWN
|
||||
:XUP INC CURMON_X
|
||||
JMP :CHECKX
|
||||
:XDOWN DEC CURMON_X
|
||||
:CHECKX JSR MONMOVCK
|
||||
BCS :DO_Y ; was bad location
|
||||
JMP M_REGMOV
|
||||
:DO_Y LDY CURMONST ; restore old X value
|
||||
LDA M_X,Y ; (this way monster does not
|
||||
STA CURMON_X ; move diagonally)
|
||||
LDA RANDOM2
|
||||
BMI :YDOWN
|
||||
:YUP INC CURMON_Y
|
||||
JMP :CHECKY
|
||||
:YDOWN DEC CURMON_Y
|
||||
:CHECKY JSR MONMOVCK
|
||||
BCS :NO_GO ; was bad location
|
||||
JMP M_REGMOV
|
||||
:NO_GO LDA #0 ; make a move possible
|
||||
LDY CURMONST ; next time through.
|
||||
STA M_MOVE,Y ; (no move done this time)
|
||||
LDA M_Y,Y ; restore current Y value to
|
||||
STA CURMON_Y ; general locations..
|
||||
RTS
|
||||
|
||||
MONMOVCK LDX CURMON_X ; monster move check routine
|
||||
LDY CURMON_Y
|
||||
LDA CURMON_L
|
||||
CMP MAPADDR+1 ; check level
|
||||
BNE :GO_ON
|
||||
INX ; to overcome MAPINDEX's add
|
||||
INY
|
||||
CPX CX
|
||||
BNE :GO_ON
|
||||
CPY CY
|
||||
BEQ :BAD ; that is the character!
|
||||
:GO_ON LDA MAPADDR+1
|
||||
PHA
|
||||
LDA CURMON_L
|
||||
STA MAPADDR+1
|
||||
JSR MAPINDEX
|
||||
CMP #100 ; text = blank space
|
||||
BGE :GOOD
|
||||
CMP #3 ; unlocked door
|
||||
BEQ :GOOD
|
||||
CMP #5 ; found secret door
|
||||
BEQ :GOOD
|
||||
CMP #6 ; chest
|
||||
BEQ :GOOD
|
||||
CMP #7 ; opened chest
|
||||
BEQ :GOOD
|
||||
CMP #8 ; ladder
|
||||
BEQ :GOOD
|
||||
CMP #9 ; throne
|
||||
BEQ :GOOD
|
||||
CMP #10 ; Jewel of Kaldun
|
||||
BEQ :GOOD
|
||||
CMP #11 ; empty holder
|
||||
BEQ :GOOD
|
||||
:BAD PLA ; restore real address
|
||||
STA MAPADDR+1 ; of map.
|
||||
SEC
|
||||
RTS
|
||||
:GOOD PLA ; restore real address
|
||||
STA MAPADDR+1 ; of map.
|
||||
CLC
|
||||
RTS
|
||||
|
||||
|
||||
********************************
|
||||
* Monsters Hit *
|
||||
********************************
|
||||
MONSHIT LDY #0
|
||||
:NEXTMON LDA M_HP,Y
|
||||
BEQ :NOTHERE
|
||||
LDA M_X,Y
|
||||
TAX
|
||||
INX
|
||||
CPX DIR:X
|
||||
BNE :NOTHERE
|
||||
LDA M_Y,Y
|
||||
TAX
|
||||
INX
|
||||
CPX DIR:Y
|
||||
BNE :NOTHERE
|
||||
LDA M_HP,Y
|
||||
SEC
|
||||
SBC CLEVEL ; lose CLEVEL hit points
|
||||
STA M_HP,Y
|
||||
BEQ :DEAD
|
||||
BCS :ALIVE
|
||||
:DEAD LDA M_TYPE,Y
|
||||
TAX
|
||||
LDA M_XPER-12,X
|
||||
STA XPGAIN
|
||||
ADDW XPGAIN;XP;XP
|
||||
TYA
|
||||
PHA
|
||||
JSR STATUSXP
|
||||
PRINT MONDEAD
|
||||
PLA
|
||||
TAY
|
||||
LDA #0
|
||||
STA M_HP,Y
|
||||
JSR UPSCREEN ; monster died, redraw screen
|
||||
:ALIVE LDA #0
|
||||
RTS
|
||||
:NOTHERE INY
|
||||
CPY #MONSMAX
|
||||
BNE :NEXTMON
|
||||
LDA #0
|
||||
RTS
|
||||
M_XPER DFB 30,10,75 ; experience points/monsters
|
||||
MONDEAD HEX 825501 ; vtab 22:htab 1
|
||||
ASC "You killed the monster! You receive"8D80
|
||||
DA XPGAIN
|
||||
ASC " experience points."00
|
||||
XPGAIN HEX 0000
|
||||
|
28
noise.s
Executable file
28
noise.s
Executable file
@ -0,0 +1,28 @@
|
||||
********************************
|
||||
* Do noise routines: *
|
||||
********************************
|
||||
|
||||
* Take from April issue of Nibble:
|
||||
DONOISE ENT
|
||||
LDA SPEAKER
|
||||
LDY VOLUME ; get volume
|
||||
:YLOOP DEY ; pause for volume control
|
||||
BNE :YLOOP
|
||||
STA SPEAKER ; click again
|
||||
LDY DURATION ; load duration
|
||||
LDA $F000,Y ; and use as index to ran #s
|
||||
CLC
|
||||
ADC FREQUENC ; add pitch
|
||||
TAX ; get pause length
|
||||
:XLOOP DEX ; pause
|
||||
BNE :XLOOP
|
||||
DEC DURATION ; decrement duration
|
||||
BNE DONOISE
|
||||
RTS
|
||||
DURATION ENT
|
||||
HEX 00
|
||||
FREQUENC ENT
|
||||
HEX 00
|
||||
VOLUME ENT
|
||||
HEX 00
|
||||
|
240
places.s
Executable file
240
places.s
Executable file
@ -0,0 +1,240 @@
|
||||
* External references
|
||||
; jewel.of.kaldun.s
|
||||
DATA EXT
|
||||
; input.output.s
|
||||
PRSTR EXT
|
||||
|
||||
********************************
|
||||
* Print a room description for *
|
||||
* the location at (cx,cy). *
|
||||
* If on/in some item, describe *
|
||||
* that. *
|
||||
********************************
|
||||
|
||||
ROOMDESC JSR CBOT3
|
||||
LDA #22 ; set vtab at 23.
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
LDX CX
|
||||
LDY CY
|
||||
JSR MAPINDEX
|
||||
CMP #100
|
||||
BGE :DOROOMS
|
||||
CMP #12 ; won't handle a # > 11.
|
||||
BLT :THINGS
|
||||
CMP #99 ; handle special chest
|
||||
BNE :BLANK
|
||||
LDA #12 ; special case
|
||||
JMP :THINGS
|
||||
:BLANK LDA #0
|
||||
:THINGS ASL
|
||||
TAY
|
||||
LDA D:THINGS,Y
|
||||
STA DATA
|
||||
LDA D:THINGS+1,Y
|
||||
STA DATA+1
|
||||
JSR PRSTR
|
||||
RTS
|
||||
:DOROOMS CMP #254
|
||||
BLT :DOROOM0
|
||||
BEQ :DORM254
|
||||
PRINT ROOM255
|
||||
RTS
|
||||
:DORM254 PRINT ROOM254
|
||||
RTS
|
||||
:DOROOM0 SEC
|
||||
SBC #100
|
||||
CMP #63 ; deal with only rooms
|
||||
BLT :ROOMS ; 100 - 162.
|
||||
LDA #63 ; print warning msg.
|
||||
:ROOMS ASL
|
||||
TAY
|
||||
LDA D:ROOMS,Y
|
||||
STA DATA
|
||||
LDA D:ROOMS+1,Y
|
||||
STA DATA+1
|
||||
JSR PRSTR
|
||||
RTS
|
||||
|
||||
D:THINGS DA SHAPE00,SHAPE01,SHAPE02,SHAPE03
|
||||
DA SHAPE04,SHAPE05,SHAPE06,SHAPE07
|
||||
DA SHAPE08,SHAPE09,SHAPE10,SHAPE11
|
||||
DA SHAPE99
|
||||
SHAPE00 HEX 00
|
||||
SHAPE01 HEX 00
|
||||
SHAPE02 HEX 00
|
||||
SHAPE03 HEX 83
|
||||
ASC "You are in a doorway."00
|
||||
SHAPE04 HEX 00
|
||||
SHAPE05 HEX 83
|
||||
ASC "You are in a secret passage."00
|
||||
SHAPE06 HEX 83
|
||||
ASC "You stand before a chest."00
|
||||
SHAPE07 HEX 83
|
||||
ASC "You stand before an opened chest."00
|
||||
SHAPE08 HEX 83
|
||||
ASC "You stand before a ladder."00
|
||||
SHAPE09 HEX 83
|
||||
ASC "You stand before an ornate throne."00
|
||||
SHAPE10 HEX 83
|
||||
ASC "You are before the fabled"8D83
|
||||
ASC "Jewel of Kaldun!"00
|
||||
SHAPE11 HEX 83
|
||||
ASC "You are before an empty stand..."00
|
||||
SHAPE99 HEX 83
|
||||
ASC "... A very ornate chest ..."00
|
||||
|
||||
D:ROOMS DA ROOM100,ROOM101,ROOM102,ROOM103
|
||||
DA ROOM104,ROOM105,ROOM106,ROOM107
|
||||
DA ROOM108,ROOM109,ROOM110,ROOM111
|
||||
DA ROOM112,ROOM113,ROOM114,ROOM115
|
||||
DA ROOM116,ROOM117,ROOM118,ROOM119
|
||||
DA ROOM120,ROOM121,ROOM122,ROOM123
|
||||
DA ROOM124,ROOM125,ROOM126,ROOM127
|
||||
DA ROOM128,ROOM129,ROOM130,ROOM131 ; boo-boo in map:
|
||||
DA ROOM132,ROOM133,ROOM134,ROOM135 ; no 131-139 rooms!
|
||||
DA ROOM136,ROOM137,ROOM138,ROOM139
|
||||
DA ROOM140,ROOM141,ROOM142,ROOM143
|
||||
DA ROOM144,ROOM145,ROOM146,ROOM147
|
||||
DA ROOM148,ROOM149,ROOM150,ROOM151
|
||||
DA ROOM152,ROOM153,ROOM154,ROOM155
|
||||
DA ROOM156,ROOM157,ROOM158,ROOM159
|
||||
DA ROOM160,ROOM161,ROOM162,ROOM163
|
||||
ROOM100 HEX 83
|
||||
ASC "You are in front of the castle."00
|
||||
ROOM101 HEX 83
|
||||
ASC "You stand in the courtyard."00
|
||||
ROOM104 ; same message as #102
|
||||
ROOM102 HEX 83
|
||||
ASC "You are in a secret hallway."00
|
||||
ROOM103 HEX 83
|
||||
ASC "The south-west tower."00
|
||||
ROOM105 HEX 83
|
||||
ASC "The south-east tower."00
|
||||
ROOM106 HEX 83
|
||||
ASC "The guards room."00
|
||||
ROOM107 HEX 83
|
||||
ASC "The captain of the guards room."00
|
||||
ROOM108 HEX 83
|
||||
ASC "Someones' horde of ???"00
|
||||
ROOM109 HEX 83
|
||||
ASC "A hidden closet."00
|
||||
ROOM110 HEX 83
|
||||
ASC "The ladder room."00
|
||||
ROOM111 HEX 83
|
||||
ASC "A hall."00
|
||||
ROOM112 HEX 83
|
||||
ASC "The processional hall."00
|
||||
ROOM113 HEX 83
|
||||
ASC "The guest room."00
|
||||
ROOM114 HEX 83
|
||||
ASC "You are in the kitchen."00
|
||||
ROOM115 HEX 83
|
||||
ASC "The storage room."8D83
|
||||
ASC "It smells a bit in here!"00
|
||||
ROOM116 HEX 83
|
||||
ASC "The Kings' guards room."00
|
||||
ROOM117 HEX 83
|
||||
ASC "The Kings' closet."00
|
||||
ROOM118 HEX 83
|
||||
ASC "The Kings' bathroom."00
|
||||
ROOM119 HEX 83
|
||||
ASC "A private hall."00
|
||||
ROOM120 HEX 83
|
||||
ASC "The Kings' bedroom."00
|
||||
ROOM121 HEX 83
|
||||
ASC "The throne room and"8D83
|
||||
ASC "audience chamber."00
|
||||
ROOM122 HEX 83
|
||||
ASC "The dining room."00
|
||||
ROOM123 HEX 83
|
||||
ASC "The wine cellar."00
|
||||
ROOM124 HEX 83
|
||||
ASC "The north-west tower."00
|
||||
ROOM125 HEX 83
|
||||
ASC "The wizards' magic chamber!"00
|
||||
ROOM126 HEX 83
|
||||
ASC "The wizards' room."00
|
||||
ROOM127 HEX 83
|
||||
ASC "A secret back passage..."00
|
||||
ROOM128 HEX 83
|
||||
ASC "The north-east tower."00
|
||||
ROOM129 HEX 83
|
||||
ASC "You stand behind the castle"8D83
|
||||
ASC "Freedom is but a step away!"00
|
||||
ROOM130 HEX 83
|
||||
ASC "You stand somewhere on the"8D83
|
||||
ASC "second level!"00
|
||||
ROOM131 ; these rooms do not exist
|
||||
ROOM132 ; on either level!!
|
||||
ROOM133
|
||||
ROOM134
|
||||
ROOM135
|
||||
ROOM136
|
||||
ROOM137
|
||||
ROOM138
|
||||
ROOM139 HEX 00 ; cover for boo-boo
|
||||
ROOM140 HEX 83
|
||||
ASC "You stand in a long, winding"8D83
|
||||
ASC "hallway."00
|
||||
ROOM141 HEX 83
|
||||
ASC "... some odd little room ..."00
|
||||
ROOM142 HEX 83
|
||||
ASC "This appears to be a reception"8D83
|
||||
ASC "room."00
|
||||
ROOM143 HEX 83
|
||||
ASC "Boy, this guy must've been rich!"00
|
||||
ROOM144 HEX 83
|
||||
ASC "You have no idea what this empty room"8D83
|
||||
ASC "was used for!"00
|
||||
ROOM145 HEX 83
|
||||
ASC "... another hallway ..."00
|
||||
ROOM146 HEX 83
|
||||
ASC "... and yet one more hallway ..."00
|
||||
ROOM147 HEX 83
|
||||
ASC "This looks like a great hall."00
|
||||
ROOM148 HEX 83
|
||||
ASC "A guests' room?"00
|
||||
ROOM149 HEX 83
|
||||
ASC "Maybe this is a guest room."00
|
||||
ROOM150 HEX 83
|
||||
ASC "And yet, another guest room!"00
|
||||
ROOM151 HEX 83
|
||||
ASC "Boy, one more ..."00
|
||||
ROOM152 HEX 83
|
||||
ASC "Wait, maybe these are servants"8D83
|
||||
ASC "quarters!"00
|
||||
ROOM153 HEX 83
|
||||
ASC "Someone must've done a lot of"8D83
|
||||
ASC "work here. The walls are black!"00
|
||||
ROOM154 HEX 83
|
||||
ASC "There is a beautiful jewel in"8D83
|
||||
ASC "this room."00
|
||||
ROOM155 HEX 83
|
||||
ASC "The south-west tower has a beautiful"8D83
|
||||
ASC "view of the landscape."00
|
||||
ROOM156 HEX 83
|
||||
ASC "Boy, ain't this fun?"00
|
||||
ROOM157 HEX 83
|
||||
ASC "The south-east tower doesn't have as"8D83
|
||||
ASC "beautiful a view as the south-west."00
|
||||
ROOM158 HEX 83
|
||||
ASC "Time to leave this place, eh?"00
|
||||
ROOM159 HEX 83
|
||||
ASC "Where do you think you are going?"00
|
||||
ROOM160 HEX 83
|
||||
ASC "The north-west tower... Ah, there"8D83
|
||||
ASC "is a ladder!"00
|
||||
ROOM161 HEX 83
|
||||
ASC "Boy, you feel tired."00
|
||||
ROOM162 HEX 83
|
||||
ASC "The south-west tower... There is a"8D83
|
||||
ASC "ladder here!"00
|
||||
ROOM163 HEX 83
|
||||
ASC "Oh dear, I have no idea what room"8D83
|
||||
ASC "this is!!"00
|
||||
ROOM254 HEX 83
|
||||
ASC "A rather broken up ladder."00
|
||||
ROOM255 HEX 83
|
||||
ASC "A smashed chest."00
|
||||
|
77
prolib.mac.s
Executable file
77
prolib.mac.s
Executable file
@ -0,0 +1,77 @@
|
||||
********************************
|
||||
* ProDOS Library Macro command *
|
||||
* list: *
|
||||
********************************
|
||||
|
||||
~QUIT = $65 ; quit
|
||||
~GETTIME = $82 ; get time
|
||||
~CREATE = $C0 ; create
|
||||
~DESTROY = $C1 ; destroy
|
||||
~OPEN = $C8 ; open file
|
||||
~READ = $CA ; read file
|
||||
~WRITE = $CB ; write file
|
||||
~CLOSE = $CC ; close file
|
||||
~FLUSH = $CD ; flush file
|
||||
|
||||
* ProDOS addresses --
|
||||
|
||||
MLI = $BF00
|
||||
_DATE = $BF90
|
||||
_TIME = $BF92
|
||||
|
||||
* ProDOS Macro commands --
|
||||
* call: @name parameter #1;parameter #2; ... ;parameter #n
|
||||
|
||||
@QUIT MAC ; @quit
|
||||
JSR _QUIT
|
||||
EOM
|
||||
|
||||
@GETTIME MAC ; @gettime
|
||||
JSR _GETTIME
|
||||
EOM
|
||||
|
||||
@CREATE MAC ; @create path;access;file_type;
|
||||
MOVW ]1;D:C0PATH ; auxiliary_type;
|
||||
MOVB ]2;D:C0ACC ; storage_type
|
||||
MOVB ]3;D:C0FTYP
|
||||
MOVW ]4;D:C0ATYP
|
||||
MOVB ]5;D:C0STYP
|
||||
JSR _CREATE
|
||||
EOM
|
||||
|
||||
@DESTROY MAC ; @destroy path
|
||||
MOVW ]1;D:C1PATH
|
||||
JSR _DESTROY
|
||||
EOM
|
||||
|
||||
@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
|
||||
|
||||
@WRITE MAC ; @write ref_num;output_buff;
|
||||
MOVB ]1;D:CBREF ; requested_length
|
||||
MOVW ]2;D:CBBUFF ; (actual_length returned)
|
||||
MOVW ]3;D:CBRLEN
|
||||
JSR _WRITE
|
||||
EOM
|
||||
|
||||
@CLOSE MAC ; @close reference_number
|
||||
MOVB ]1;D:CCREF
|
||||
JSR _CLOSE
|
||||
EOM
|
||||
|
||||
@FLUSH MAC ; @flush reference_number
|
||||
MOVB ]1;D:CDREF
|
||||
JSR _FLUSH
|
||||
EOM
|
||||
|
121
prolib.s
Executable file
121
prolib.s
Executable file
@ -0,0 +1,121 @@
|
||||
********************************
|
||||
* ProDOS MLI calls. *
|
||||
* Uses: IO *
|
||||
* IO.MAC *
|
||||
********************************
|
||||
|
||||
_QUIT JSR MLI ; Perform QUIT function
|
||||
DFB ~QUIT
|
||||
DW D:QUIT
|
||||
_MLICHK BNE MLIERROR ; Error occured ...
|
||||
RTS
|
||||
|
||||
MLIERROR LDA #23
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
JSR CLINE
|
||||
LDA #$40
|
||||
JSR WAIT
|
||||
LDY #$C0
|
||||
:BELL LDA #$10
|
||||
JSR WAIT
|
||||
STA SPEAKER
|
||||
DEY
|
||||
BNE :BELL
|
||||
CENTER MLIERR_S
|
||||
STA KEYSTROB
|
||||
:KEYLOOP LDA KEYBOARD
|
||||
CMP #RETURN
|
||||
BNE :KEYLOOP
|
||||
STA KEYSTROB
|
||||
JMP MAIN
|
||||
MLIERR_S ASC "AN ERROR HAS OCCURED! PRESS <RETURN>"00
|
||||
|
||||
_GETTIME JSR MLI ; perform get_time function
|
||||
DFB ~GETTIME
|
||||
DW 0
|
||||
JMP _MLICHK
|
||||
|
||||
_CREATE @GETTIME ; perform create function
|
||||
MOVW _DATE;D:C0DATE
|
||||
MOVW _TIME;D:C0TIME
|
||||
JSR MLI
|
||||
DFB ~CREATE
|
||||
DW D:CREATE
|
||||
JMP _MLICHK
|
||||
|
||||
_DESTROY JSR MLI ; perform destroy function
|
||||
DFB ~DESTROY
|
||||
DW D:DESTR
|
||||
RTS ; error checking nulled
|
||||
|
||||
_OPEN JSR MLI ; perform open function
|
||||
DFB ~OPEN
|
||||
DW D:OPEN
|
||||
JMP _MLICHK
|
||||
|
||||
_READ JSR MLI ; perform read function
|
||||
DFB ~READ
|
||||
DW D:READ
|
||||
JMP _MLICHK
|
||||
|
||||
_WRITE JSR MLI ; perform write function
|
||||
DFB ~WRITE
|
||||
DW D:WRITE
|
||||
JMP _MLICHK
|
||||
|
||||
_CLOSE ENT
|
||||
JSR MLI ; perform close function
|
||||
DFB ~CLOSE
|
||||
DW D:CLOSE
|
||||
JMP _MLICHK
|
||||
|
||||
_FLUSH JSR MLI ; perform flush function
|
||||
DFB ~FLUSH
|
||||
DW D:FLUSH
|
||||
JMP _MLICHK
|
||||
|
||||
* ProDOS data/parameters --
|
||||
|
||||
D:QUIT DFB 4 ; 4 parameters
|
||||
DFB 0 ; all are reserved.
|
||||
DW 0
|
||||
DFB 0
|
||||
DW 0
|
||||
|
||||
D:CREATE DFB $7 ; 7 parameters
|
||||
D:C0PATH DW 0 ; address of pathname
|
||||
D:C0ACC DFB 0 ; access bits
|
||||
D:C0FTYP DFB 0 ; file type
|
||||
D:C0ATYP DW 0 ; auxiliary file type
|
||||
D:C0STYP DFB 0 ; storage type
|
||||
D:C0DATE DW 0 ; creation date
|
||||
D:C0TIME DW 0 ; creation time
|
||||
|
||||
D:DESTR DFB $1 ; 1 parameter
|
||||
D:C1PATH DW 0 ; address of pathname
|
||||
|
||||
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:WRITE DFB $4 ; 4 parameters
|
||||
D:CBREF DFB 0 ; reference number
|
||||
D:CBBUFF DW 0 ; address of data buffer
|
||||
D:CBRLEN DW 0 ; requested length
|
||||
D:CBALEN DW 0 ; actual length
|
||||
|
||||
D:CLOSE DFB $1 ; 1 parameter
|
||||
D:CCREF ENT
|
||||
DFB 0 ; reference number
|
||||
|
||||
D:FLUSH DFB $1 ; 1 parameter
|
||||
D:CDREF DFB 0 ; reference number
|
||||
|
48
reset.s
Executable file
48
reset.s
Executable file
@ -0,0 +1,48 @@
|
||||
* External references
|
||||
|
||||
_CLOSE EXT
|
||||
D:CCREF EXT
|
||||
DOQUIT EXT
|
||||
MAIN EXT
|
||||
|
||||
********************************
|
||||
* Reset routine handler. *
|
||||
********************************
|
||||
RESETUP ENT
|
||||
LDY #0 ; save old reset
|
||||
:0 LDA $3F2,Y ; handler
|
||||
STA RESTORE,Y
|
||||
INY
|
||||
CPY #3
|
||||
BLT :0
|
||||
LDA #<DORESET ; install my own reset
|
||||
STA $3F2 ; handler
|
||||
LDA #>DORESET
|
||||
STA $3F3
|
||||
EOR #$A5
|
||||
STA $3F4
|
||||
RTS
|
||||
RESTORE ENT
|
||||
HEX 000000 ; store old reset bytes
|
||||
|
||||
********************************
|
||||
* Actual reset routine: *
|
||||
* close all files, *
|
||||
* print message, *
|
||||
* and call DOQUIT *
|
||||
********************************
|
||||
DORESET @CLOSE #0 ; close all files
|
||||
JSR TEXT
|
||||
JSR CLRSCRN
|
||||
PRINT RESETMSG
|
||||
LDY #5 ; pause a bit
|
||||
:LOOP LDA #255
|
||||
JSR WAIT
|
||||
DEY
|
||||
BNE :LOOP
|
||||
JSR DOQUIT
|
||||
JMP MAIN
|
||||
RESETMSG HEX 4A83
|
||||
ASC "You didn't really want to do"8D83
|
||||
ASC "that now, did you?"00
|
||||
|
396
shapes.s
Executable file
396
shapes.s
Executable file
@ -0,0 +1,396 @@
|
||||
* External references
|
||||
; jewel.of.kaldun.s
|
||||
;DATA EXT
|
||||
|
||||
********************************
|
||||
* Jewel of Kaldun shape *
|
||||
* drawing routines. *
|
||||
* Uses: GRAPHICS *
|
||||
* MATH *
|
||||
* MATH.MAC *
|
||||
* GENERAL.MAC *
|
||||
********************************
|
||||
|
||||
SHTABLE DFB %00000000 ; Shape #0: Blank space
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
|
||||
DFB %11111111 ; Shape #1: Wall
|
||||
DFB %11111111
|
||||
DFB %11111111
|
||||
DFB %11111111
|
||||
DFB %11111111
|
||||
DFB %11111111
|
||||
DFB %11111111
|
||||
DFB %11111111
|
||||
|
||||
DFB %00111100 ; Shape #2: Meltok
|
||||
DFB %00111100
|
||||
DFB %00011000
|
||||
DFB %11111111
|
||||
DFB %00011000
|
||||
DFB %00111100
|
||||
DFB %00100100
|
||||
DFB %01100110
|
||||
|
||||
DFB %11111111 ; Shape #3: Door (unlocked)
|
||||
DFB %11111111
|
||||
DFB %11100111
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
|
||||
DFB %11111111 ; Shape #4: Locked Door
|
||||
DFB %11111111
|
||||
DFB %11100111
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
DFB %11010011
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
|
||||
DFB %11111111 ; Shape #5: Secret Door (found)
|
||||
DFB %11100111
|
||||
DFB %11011011
|
||||
DFB %11011011
|
||||
DFB %11011011
|
||||
DFB %11011011
|
||||
DFB %11011011
|
||||
DFB %11011011
|
||||
|
||||
DFB %00000000 ; Shape #6: Chest
|
||||
DFB %00000000
|
||||
DFB %00111100
|
||||
DFB %01100110
|
||||
DFB %01111110
|
||||
DFB %01100110
|
||||
DFB %01100110
|
||||
DFB %01111110
|
||||
|
||||
DFB %00000000 ; Shape #7: Opened Chest
|
||||
DFB %00001100
|
||||
DFB %00000110
|
||||
DFB %00000110
|
||||
DFB %01111110
|
||||
DFB %01100110
|
||||
DFB %01100110
|
||||
DFB %01111110
|
||||
|
||||
DFB %00000000 ; Shape #8: Ladder
|
||||
DFB %01100110
|
||||
DFB %01111110
|
||||
DFB %01100110
|
||||
DFB %01111110
|
||||
DFB %01100110
|
||||
DFB %01111110
|
||||
DFB %01100110
|
||||
|
||||
DFB %00000000 ; Shape #9: Throne
|
||||
DFB %00000110
|
||||
DFB %00000110
|
||||
DFB %00000110
|
||||
DFB %01111110
|
||||
DFB %01100110
|
||||
DFB %01100110
|
||||
DFB %01100110
|
||||
|
||||
DFB %00011000 ; Shape #10: Jewel of Kaldun
|
||||
DFB %00111100
|
||||
DFB %00111100
|
||||
DFB %00011000
|
||||
DFB %11000011
|
||||
DFB %01111110
|
||||
DFB %00011000
|
||||
DFB %00111100
|
||||
|
||||
DFB %00000000 ; Shape #11: Empty Holder
|
||||
DFB %00000000 ; (Jewel of Kaldun gone)
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
DFB %11000011
|
||||
DFB %01111110
|
||||
DFB %00011000
|
||||
DFB %00111100
|
||||
|
||||
DFB %00000000 ; Shape #12: Ghost
|
||||
DFB %00111100
|
||||
DFB %01111110
|
||||
DFB %01101010
|
||||
DFB %01111110
|
||||
DFB %01111110
|
||||
DFB %01011010
|
||||
DFB %00000000
|
||||
|
||||
DFB %00000000 ; Shape #13: Blob
|
||||
DFB %01100110
|
||||
DFB %00101100
|
||||
DFB %00111100
|
||||
DFB %01111110
|
||||
DFB %01010110
|
||||
DFB %01000100
|
||||
DFB %00000000
|
||||
|
||||
DFB %00000000 ; Shape #14: Zombie
|
||||
DFB %00011000
|
||||
DFB %01111110
|
||||
DFB %00011000
|
||||
DFB %00111100
|
||||
DFB %01100110
|
||||
DFB %01100110
|
||||
DFB %00000000
|
||||
|
||||
DFB %00000000 ; Shape #15: Circle
|
||||
DFB %00111100
|
||||
DFB %01111110
|
||||
DFB %01111110
|
||||
DFB %01111110
|
||||
DFB %01111110
|
||||
DFB %00111100
|
||||
DFB %00000000
|
||||
|
||||
DFB %00000000 ; Shape #16: Dot
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
DFB %00011000
|
||||
DFB %00011000
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
DFB %00000000
|
||||
|
||||
DFB %10101010 ; Shape #17: Half wall (fade-in)
|
||||
DFB %01010101
|
||||
DFB %10101010
|
||||
DFB %01010101
|
||||
DFB %10101010
|
||||
DFB %01010101
|
||||
DFB %10101010
|
||||
DFB %01010101
|
||||
|
||||
DFB %01010101 ; Shape #18: Half wall (fade-in)
|
||||
DFB %10101010
|
||||
DFB %01010101
|
||||
DFB %10101010
|
||||
DFB %01010101
|
||||
DFB %10101010
|
||||
DFB %01010101
|
||||
DFB %10101010
|
||||
|
||||
DFB %01111111 ; Shape #19: Letter "R"
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
DFB %01111111
|
||||
DFB %00110011
|
||||
DFB %01100011
|
||||
DFB %11000011
|
||||
|
||||
DFB %11111111 ; Shape #20: Letter "I"
|
||||
DFB %00011000
|
||||
DFB %00011000
|
||||
DFB %00011000
|
||||
DFB %00011000
|
||||
DFB %00011000
|
||||
DFB %00011000
|
||||
DFB %11111111
|
||||
|
||||
DFB %01111111 ; Shape #21: Letter "P"
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
DFB %11000011
|
||||
DFB %01111111
|
||||
DFB %00000011
|
||||
DFB %00000011
|
||||
DFB %00000011
|
||||
|
||||
DFB %11111111 ; Shape #22: Barred Door
|
||||
DFB %11111111
|
||||
DFB %11100111
|
||||
DFB %11000011
|
||||
DFB %11111111
|
||||
DFB %11000011
|
||||
DFB %11111111
|
||||
DFB %11000011
|
||||
|
||||
********************************
|
||||
* Shape draw variables *
|
||||
********************************
|
||||
|
||||
XOFFSET HEX 0000
|
||||
XLOC HEX 0000
|
||||
YLOC HEX 00
|
||||
SNUM ENT
|
||||
HEX 0000
|
||||
DRAWREP HEX 00
|
||||
CLRFLAG ENT
|
||||
DFB %10000000 ; flag for clearing background
|
||||
XORFLAG ENT
|
||||
DFB %00000000 ; flag to XOR with background
|
||||
BITMASK DFB %01111111,%00111111 ; bits to keep for
|
||||
DFB %00011111,%00001111 ; offset values
|
||||
DFB %00000111,%00000011
|
||||
DFB %00000001
|
||||
BITABLE1 DFB %00000000,%00000001 ; bits to keep in 1st
|
||||
DFB %00000011,%00000111 ; graphic byte
|
||||
DFB %00001111,%00011111
|
||||
DFB %00111111
|
||||
BITABLE2 DFB %01111110,%01111100 ; bits to keep in 2nd
|
||||
DFB %01111000,%01110000 ; graphicbyte
|
||||
DFB %01100000,%01000000
|
||||
DFB %00000000
|
||||
|
||||
********************************
|
||||
* Draw a shape routine. Upon *
|
||||
* entry: *
|
||||
* X-axis: AAXX *
|
||||
* Y-axis: YY *
|
||||
* Shape Num: preset *
|
||||
********************************
|
||||
|
||||
DRAWSHAP ENT
|
||||
STA XLOC+1 ; save entry values:
|
||||
STX XLOC ; xval = XXAA
|
||||
STY YLOC ; yval = YY
|
||||
STY HLINE
|
||||
IMULW #8;SNUM;DATA
|
||||
ADDW DATA;#SHTABLE;DATA
|
||||
IDIVMODW XLOC;#7;XLOC;XOFFSET ; calc offset(s)
|
||||
MOVB #8;DRAWREP
|
||||
:REPEAT JSR HADDR
|
||||
LDX XOFFSET
|
||||
LDY XLOC
|
||||
CPY #40
|
||||
BGE :SECOND
|
||||
BIT CLRFLAG
|
||||
BPL :20
|
||||
LDA BITABLE1,X
|
||||
AND (HPTR),Y
|
||||
STA (HPTR),Y
|
||||
:20 LDY #0
|
||||
LDA BITMASK,X
|
||||
STA BITSTORE
|
||||
AND (DATA),Y
|
||||
LDX XOFFSET
|
||||
:10 CPX #0
|
||||
BEQ :11
|
||||
ASL
|
||||
DEX
|
||||
JMP :10
|
||||
:11 LDY XLOC
|
||||
BIT XORFLAG
|
||||
BMI :2X1
|
||||
ORA (HPTR),Y
|
||||
JMP :2X2
|
||||
:2X1 EOR (HPTR),Y
|
||||
:2X2 STA (HPTR),Y
|
||||
:SECOND LDX XOFFSET
|
||||
LDY XLOC
|
||||
INY
|
||||
CPY #40
|
||||
BGE :NOTGOOD
|
||||
BIT CLRFLAG
|
||||
BPL :30
|
||||
LDA BITABLE2,X
|
||||
AND (HPTR),Y
|
||||
STA (HPTR),Y
|
||||
:30 LDY #0
|
||||
LDA BITSTORE
|
||||
EOR #%11111111
|
||||
AND (DATA),Y
|
||||
LDX XOFFSET
|
||||
:0 CPX #7
|
||||
BGE :1
|
||||
LSR
|
||||
INX
|
||||
JMP :0
|
||||
:1 LDY XLOC
|
||||
INY
|
||||
BIT XORFLAG
|
||||
BMI :3X1
|
||||
ORA (HPTR),Y
|
||||
JMP :3X2
|
||||
:3X1 EOR (HPTR),Y
|
||||
:3X2 STA (HPTR),Y
|
||||
:NOTGOOD INC DATA
|
||||
BNE :2
|
||||
INC DATA+1
|
||||
:2 INC HLINE
|
||||
DEC DRAWREP
|
||||
BNE :REPEATX
|
||||
RTS
|
||||
:REPEATX JMP :REPEAT
|
||||
BITSTORE HEX 00
|
||||
|
||||
* NOTE: This is a hack. -8 is treated as 8 bites by Merlin32;
|
||||
* thus the MOVW is in error. Using the value of $FFF8
|
||||
* because my trusty PC calculator tells me that is correct. :-)
|
||||
ARRIVEC2 MOVW #$FFF8;XMELTOK
|
||||
MOVB #2;SNUM
|
||||
LDA #%00000000
|
||||
STA CLRFLAG
|
||||
LDA #%10000000
|
||||
STA XORFLAG
|
||||
:REPEAT LDY #151
|
||||
LDA XMELTOK+1
|
||||
LDX XMELTOK
|
||||
JSR DRAWSHAP
|
||||
LDA #70
|
||||
JSR WAIT
|
||||
LDY #151
|
||||
LDA XMELTOK+1
|
||||
LDX XMELTOK
|
||||
JSR DRAWSHAP
|
||||
INC XMELTOK
|
||||
BNE :1
|
||||
INC XMELTOK+1
|
||||
:1 LDA XMELTOK+1
|
||||
CMP #>71
|
||||
BNE :REPEAT
|
||||
LDA XMELTOK
|
||||
CMP #<71
|
||||
BNE :REPEAT
|
||||
BEQ COMMONCX
|
||||
|
||||
XMELTOK HEX 0000
|
||||
|
||||
LEAVEC1 MOVW #131;XMELTOK
|
||||
MOVB #2;SNUM
|
||||
LDA #%00000000
|
||||
STA CLRFLAG
|
||||
LDA #%10000000
|
||||
STA XORFLAG
|
||||
:REPEAT LDY #151
|
||||
LDA XMELTOK+1
|
||||
LDX XMELTOK
|
||||
JSR DRAWSHAP
|
||||
LDA #70
|
||||
JSR WAIT
|
||||
LDY #151
|
||||
LDA XMELTOK+1
|
||||
LDX XMELTOK
|
||||
JSR DRAWSHAP
|
||||
INC XMELTOK
|
||||
BNE :1
|
||||
INC XMELTOK+1
|
||||
:1 LDA XMELTOK+1
|
||||
CMP #>280
|
||||
BNE :REPEAT
|
||||
LDA XMELTOK
|
||||
CMP #<280
|
||||
BNE :REPEAT
|
||||
COMMONCX LDY #151
|
||||
LDX XMELTOK
|
||||
LDA XMELTOK+1
|
||||
JSR DRAWSHAP
|
||||
LDA #%10000000
|
||||
STA CLRFLAG
|
||||
LDA #%00000000
|
||||
STA XORFLAG
|
||||
RTS
|
||||
|
274
story.s
Executable file
274
story.s
Executable file
@ -0,0 +1,274 @@
|
||||
* External references
|
||||
; graphics.s
|
||||
HGRCLEAR EXT
|
||||
|
||||
********************************
|
||||
* The story behind the Jewel *
|
||||
* of Kaldun along with the *
|
||||
* instructions for play. *
|
||||
* Uses: IO *
|
||||
* IO.MAC *
|
||||
* CASTLES *
|
||||
********************************
|
||||
|
||||
STORY JSR CLRSCRN
|
||||
LDA #0
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
CENTER TITLE00
|
||||
PRINT STORYP1
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT STORYP2
|
||||
JSR HGRCLEAR
|
||||
JSR CASTLE1
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
JSR SETHGR
|
||||
PRINT STORYP3
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT STORYP4
|
||||
JSR DRAWBRID
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT STORYP5
|
||||
JSR LEAVEC1
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
JSR TEXT
|
||||
PRINT STORYP6
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT STORYP7
|
||||
JSR HGRCLEAR
|
||||
JSR CASTLE2
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
JSR SETHGR
|
||||
PRINT STORYP8
|
||||
JSR ARRIVEC2
|
||||
JSR GETRET
|
||||
JSR CLRSCRN
|
||||
PRINT STORYP9
|
||||
LDA #%10000000
|
||||
STA ESCABORT
|
||||
JSR GETRET
|
||||
JSR CLRSCRN
|
||||
JSR TEXT
|
||||
LDA #0
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
CENTER INSTR00
|
||||
PRINT INSTRP1
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT INSTRP2
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT INSTRP3
|
||||
JSR GETRET
|
||||
JSR CLRMID
|
||||
PRINT INSTRP4
|
||||
LDA #%10000000
|
||||
STA ESCABORT
|
||||
JSR GETRET
|
||||
JSR CLRSCRN
|
||||
LDA #0
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
CENTER PLAY00
|
||||
PRINT PLAYP1
|
||||
LDA #%10000000
|
||||
STA ESCABORT
|
||||
JSR GETRET
|
||||
JSR CLRSCRN
|
||||
LDA #0
|
||||
STA TLINE
|
||||
JSR TEXTADDR
|
||||
CENTER GPL00
|
||||
PRINT GPLP1
|
||||
LDA #%10000000
|
||||
STA ESCABORT
|
||||
JSR GETRET
|
||||
JSR CLRSCRN
|
||||
RTS
|
||||
|
||||
GPL00 ASC "CONTACT & LICENSE"00
|
||||
PLAY00 ASC "PLAYING NOTES"00
|
||||
INSTR00 ASC "INSTRUCTIONS"00
|
||||
TITLE00 ASC "THE STORY"00
|
||||
STORYP1 HEX 43
|
||||
ASC "For many years, there had been a legend"8D
|
||||
ASC "of a magical emerald, entitled the"8D
|
||||
ASC "'Jewel of Kaldun.' This gem had been"8D
|
||||
ASC "lost in a deserted castle that was once"8D
|
||||
ASC "occupied by the great magician Kaldun."8D
|
||||
HEX 8D
|
||||
ASC "This castle is rumored to be haunted"8D
|
||||
ASC "with ghosts, zombies and magical bats,"8D
|
||||
ASC "and has been acclaimed as being 'fates"8D
|
||||
ASC "friend or foe.' It has been said that"8D
|
||||
ASC "whatever kingdom possesses this 'Jewel"8D
|
||||
ASC "of Kaldun' shall have only peace and"8D
|
||||
ASC "health for the rest of its days."8D
|
||||
HEX 8D
|
||||
ASC "King Aradea was ruling during troubled"8D
|
||||
ASC "times. Famine and disease plagued his"8D
|
||||
ASC "kingdom. When he heard of this jewel,"8D
|
||||
ASC "he announced the following proclamation:"8D00
|
||||
STORYP2 HEX 4305
|
||||
ASC "Whosoever finds the Jewel of"8D05
|
||||
ASC "Kaldun shall be given the hand"8D05
|
||||
ASC "of my beautiful daughter Lydia"8D05
|
||||
ASC "in marriage and will follow as"8D05
|
||||
ASC "my successor. However, there"8D05
|
||||
ASC "is one stipulation to this"8D05
|
||||
ASC "quest: he whoever tries must"8D05
|
||||
ASC "begin his search in the deserted"8D05
|
||||
ASC "castle at sunset and return to"8D05
|
||||
ASC "me by noon the following day."8D05
|
||||
ASC "For whosoever accomplishes this"8D05
|
||||
ASC "task must be quick of mind and"8D05
|
||||
ASC "stout of heart. The one who is"8D05
|
||||
ASC "capable of this task will be"8D05
|
||||
ASC "worthy of my daughter, and of my"8D05
|
||||
ASC "kingdom."8D14
|
||||
ASC "- King Aradea"00
|
||||
STORYP3 HEX 54
|
||||
ASC "The kingdom stirred with hope and"8D
|
||||
ASC "intrigue. Many men attempted the quest"8D
|
||||
ASC "and were never seen again."00
|
||||
STORYP4 HEX 54
|
||||
ASC "One day a local peasant named Meltok"8D
|
||||
ASC "decided to undertake the proclaimed"8D
|
||||
ASC "search."00
|
||||
STORYP5 HEX 54
|
||||
ASC "After telling King Aradea of his plans,"8D
|
||||
ASC "he leaves the castle in hopes of the"8D
|
||||
ASC "Jewel of Kaldun ..."00
|
||||
STORYP6 HEX 43
|
||||
ASC "As Meltok left the castle, he realized"8D
|
||||
ASC "that he needed to know more about this"8D
|
||||
ASC "castle and the wizard, Kaldun..."8D
|
||||
HEX 8D
|
||||
ASC "As you talk to your fellow peasants,"8D
|
||||
ASC "you notice that noone really knows of"8D
|
||||
ASC "the wizard Kaldun -- it's all made up!"8D
|
||||
HEX 8D
|
||||
ASC "However, about the Castle of Kaldun and"8D
|
||||
ASC "the Jewel of Kaldun, there is plenty to"8D
|
||||
ASC "tell. For one, it is said that the"8D
|
||||
ASC "castle lies deserted. However, it is"8D
|
||||
ASC "also told that the moment a live creature"8D
|
||||
ASC "sets foot upon the castles' ground,"8D
|
||||
ASC "monsters begin to appear. From where,"8D
|
||||
ASC "noone can tell..."00
|
||||
STORYP7 HEX 43
|
||||
ASC "There is a rumor that makes you stop"8D
|
||||
ASC "in your tracks. 'It is said,' an old"8D
|
||||
ASC "man says, 'that if the Jewel of Kaldun"8D
|
||||
ASC "is removed from the castle, the land"8D
|
||||
ASC "will prosper but a few years before all"8D
|
||||
ASC "of mankind is lost! Be careful, my"8D
|
||||
ASC "son.' And with that, he leaves you."8D
|
||||
ASC "When you look around for the man, he is"8D
|
||||
ASC "no where to be seen..."00
|
||||
STORYP8 HEX 55
|
||||
ASC "Finally, Meltok arrived at the Castle of"8D
|
||||
ASC "Kaldun."00
|
||||
STORYP9 HEX 54
|
||||
ASC "It is time for you to help Meltok find"8D
|
||||
ASC "the Jewel of Kaldun. Are you capable"8D
|
||||
ASC "of this formidable task?"00
|
||||
|
||||
INSTRP1 HEX 43
|
||||
ASC "To move Meltok, use the I, J, K, and M"8D
|
||||
ASC "keys:"8D83
|
||||
ASC "(north)"8D83
|
||||
ASC "I"8D83
|
||||
ASC "(west) J K (east)"8D83
|
||||
ASC "M"8D83
|
||||
ASC "(south)"8D
|
||||
HEX 8D
|
||||
ASC "When Meltok is on a ladder, press:"8D05
|
||||
ASC "[A] to ascend (go up) and"8D05
|
||||
ASC "[D] to descend (go down)"8D
|
||||
HEX 8D
|
||||
ASC "When you are unsure of what an item on"8D
|
||||
ASC "the screen is, press [L] for look."8D
|
||||
HEX 8D
|
||||
ASC "To open a chest, press [O], but beware:"8D
|
||||
ASC "Some treasure chests have traps in them"8D
|
||||
ASC "that can hurt Meltok!"00
|
||||
INSTRP2 HEX 43
|
||||
ASC "To search for secret doors, press [S]"8D
|
||||
ASC "and the direction you wish to search in."8D
|
||||
HEX 8D
|
||||
ASC "When Meltok has found keys, he may"8D
|
||||
ASC "unlock some of the locked doors in the"8D
|
||||
ASC "castle by pressing [U] and the direction"8D
|
||||
ASC "of the door. (There are some special"8D
|
||||
ASC "doors that will not be opened by the"8D
|
||||
ASC "general keys ... you must find those.)"8D
|
||||
HEX 8D
|
||||
ASC "To heal Meltok, press [R] to rest him."8D
|
||||
ASC "Hit Points will slowly heal."8D
|
||||
HEX 8D
|
||||
ASC "When the JEWEL OF KALDUN is found, press"8D
|
||||
ASC "[T] and the direction of the gem to take"8D
|
||||
ASC "it."00
|
||||
INSTRP3 HEX 43
|
||||
ASC "To get a numerical status, press:"8D05
|
||||
ASC "[H] for health, or"8D05
|
||||
ASC "[W] for wealth"8D
|
||||
ASC "Health consists of Hit Points, Exper-"8D
|
||||
ASC "ience and level. Wealth consists of"8D
|
||||
ASC "Gold Pieces, Keys, and any special"8D
|
||||
ASC "items."8D
|
||||
HEX 8D
|
||||
ASC "When Meltok encounters those vile"8D
|
||||
ASC "creatures that inhabit the Castle of"8D
|
||||
ASC "Kaldun, press [F] and a direction key"8D
|
||||
ASC "to fight them. You will do more damage"8D
|
||||
ASC "as you go up levels, and will even gain"8D
|
||||
ASC "automatic hits -- if you live that long."00
|
||||
INSTRP4 HEX 43
|
||||
ASC "Whenever you are asked for the direc-"8D
|
||||
ASC "tion you wish to perform an action in,"8D
|
||||
ASC "use the movement keys to indicate the"8D
|
||||
ASC "direction (I, J, K, and M)."8D
|
||||
HEX 8D
|
||||
ASC "To get a summary of the commands"8D
|
||||
ASC "available to Meltok, press [?]."8D
|
||||
HEX 8D83
|
||||
ASC "We hope you enjoy the Jewel of Kaldun!"8D83
|
||||
ASC "A2 Geek / BShagle"00
|
||||
|
||||
PLAYP1 HEX 43
|
||||
ASC "For those of you interested, here are"8D
|
||||
ASC "all of the monster statistics:"8D
|
||||
HEX 8D05
|
||||
ASC "Name HP XP Movement"8D05
|
||||
ASC "------- -- -- --------"8D05
|
||||
ASC "Blob 2 10 4"8D05
|
||||
ASC "Zombie 16 75 1"8D05
|
||||
ASC "Ghost 8 30 2"8D
|
||||
HEX 8D
|
||||
ASC "Movement is how many turns Meltok can"8D
|
||||
ASC "make before the monster will move. It"8D
|
||||
ASC "should be said, however, that the mon-"8D
|
||||
ASC "sters can attack on every move!!"00
|
||||
|
||||
GPLP1 HEX 43
|
||||
ASC "This program is licensed under the GPL."8D
|
||||
ASC "Please see the LICENSE file available"8D
|
||||
ASC "in the source code."8D
|
||||
HEX 8D
|
||||
ASC "Visit us to report bugs, make"8D
|
||||
ASC "suggestions, or to just grab the code"8D
|
||||
ASC "to hack on!"8D
|
||||
HEX 8D83
|
||||
ASC "github.com/a2geek/jewel-of-kaldun"8D
|
||||
HEX 00
|
||||
|
472
title.s
Executable file
472
title.s
Executable file
@ -0,0 +1,472 @@
|
||||
********************************
|
||||
* Jewel of Kaldun title page. *
|
||||
* Uses: MATH.MAC *
|
||||
* MATH *
|
||||
* SHAPES *
|
||||
* GENERAL.MAC *
|
||||
* GRAPHICS *
|
||||
********************************
|
||||
|
||||
TITLEPG JSR SETHGR
|
||||
STA $C052 ; full page graphics
|
||||
JSR DRAWBKGD
|
||||
LDY #15
|
||||
:PAUSE LDX ROL_CTR
|
||||
INC ROL_CTR
|
||||
LDA ROL_CTR,X
|
||||
TAX
|
||||
:XXX DEX
|
||||
BNE :XXX
|
||||
STA SPEAKER
|
||||
DEY
|
||||
BNE :PAUSE
|
||||
JSR ROLJEWEL
|
||||
LDA #%00000000
|
||||
STA CLRFLAG
|
||||
STA XORFLAG
|
||||
|
||||
DRAWLETS MOVW #TTABLE;PTR
|
||||
:PREPARE LDY #0
|
||||
LDA (PTR),Y
|
||||
BNE :GO
|
||||
JMP :FINISHD
|
||||
:GO STA TITINCR
|
||||
JSR PTRINC
|
||||
LDA (PTR),Y
|
||||
STA SNUM
|
||||
JSR PTRINC
|
||||
LDA (PTR),Y
|
||||
STA TITLECTR
|
||||
JSR PTRINC
|
||||
LDA (PTR),Y
|
||||
STA TITDELAY
|
||||
JSR PTRINC
|
||||
LDA (PTR),Y
|
||||
STA TITX
|
||||
LDA #0
|
||||
STA TITX+1
|
||||
JSR PTRINC
|
||||
LDA (PTR),Y
|
||||
STA TITY
|
||||
JSR PTRINC
|
||||
IMULW TITINCR;TITX;TITX
|
||||
IMULW TITINCR;TITY;TITY
|
||||
JMP :START
|
||||
:LOOP MOVB TITINCR;LINECTR
|
||||
LDY #0
|
||||
LDA (PTR),Y
|
||||
STA DIRX
|
||||
JSR PTRINC
|
||||
LDA (PTR),Y
|
||||
STA DIRY
|
||||
JSR PTRINC
|
||||
:DRAW LDA TITX+1
|
||||
LDX TITX
|
||||
LDY TITY
|
||||
JSR DRAWSHAP
|
||||
LDA DIRX
|
||||
CMP #-1
|
||||
BEQ :XDEC
|
||||
CLC
|
||||
ADC TITX
|
||||
STA TITX
|
||||
BNE :YTEST
|
||||
INC TITX+1
|
||||
JMP :YTEST
|
||||
:XDEC DEC TITX
|
||||
LDA TITX
|
||||
CMP #-1
|
||||
BNE :YTEST
|
||||
DEC TITX+1
|
||||
:YTEST LDA DIRY ; y is only 1 byte
|
||||
CLC
|
||||
ADC TITY
|
||||
STA TITY
|
||||
DEC LINECTR
|
||||
BNE :DRAW
|
||||
:START DEC TITLECTR
|
||||
BNE :LOOP
|
||||
JMP :PREPARE
|
||||
:FINISHD LDA #%10000000
|
||||
STA CLRFLAG
|
||||
RTS
|
||||
|
||||
WAIT ENT
|
||||
SEC
|
||||
:1 PHA
|
||||
:0 SBC #1
|
||||
BNE :0
|
||||
PLA
|
||||
SBC #1
|
||||
BNE :1
|
||||
RTS
|
||||
|
||||
PTRINC INC PTR
|
||||
BNE :0
|
||||
INC PTR+1
|
||||
:0 RTS
|
||||
|
||||
TITLECTR HEX 00
|
||||
LINECTR HEX 00
|
||||
TITX HEX 0000
|
||||
TITY HEX 0000
|
||||
DIRX HEX 00
|
||||
DIRY HEX 00
|
||||
TITINCR HEX 0000
|
||||
TITDELAY HEX 00
|
||||
|
||||
********************************
|
||||
* Table of (x,y) on a 35x20 *
|
||||
* grid for title page. *
|
||||
********************************
|
||||
|
||||
TTABLE DFB 2,16,41 ; "the", 39 points, 2x2
|
||||
DFB 100,17,4 ; beginning
|
||||
DFB 0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,-1,1,-1,0,-1,0,-1
|
||||
DFB 0,-1,0,-1,0,1,0,1,0,1,0,1,0,1,0,1,0,-1,0,-1
|
||||
DFB 0,-1,1,-1,1,0,1,1,0,1,0,1,1,1,1,0,1,-1,1,-1
|
||||
DFB 1,-1,-1,-1,-1,0,-1,1,0,1,0,1,1,1,1,0,1,0
|
||||
DFB 2,16,4 ; cross the "t", 2x2, 4 pts
|
||||
DFB 100,16,6
|
||||
DFB 1,0,1,0,1,0
|
||||
DFB 8,15,11 ; "J", 11 points, 8x8
|
||||
DFB 50,6,6 ; beginning (x,y)
|
||||
DFB 1,1,1,0,1,0,1,-1,0,-1,0,-1,0,-1,0,-1,0,-1,-1,0
|
||||
DFB 8,15,15 ; "e", 15 points, 8x8
|
||||
DFB 50,12,5
|
||||
DFB 1,0,1,0,1,0,0,-1,-1,-1,-1,0,-1,0,-1,1,0,1,0,1
|
||||
DFB 1,1,1,0,1,0,1,0
|
||||
DFB 8,15,13 ; "w", 13 points, 8x8
|
||||
DFB 50,16,3
|
||||
DFB 0,1,0,1,0,1,1,1,1,-1,0,-1,0,1,1,1,1,-1,0,-1
|
||||
DFB 0,-1,0,-1
|
||||
DFB 8,15,15 ; "e", 15 points, 8x8
|
||||
DFB 50,22,5
|
||||
DFB 1,0,1,0,1,0,0,-1,-1,-1,-1,0,-1,0,-1,1,0,1,0,1
|
||||
DFB 1,1,1,0,1,0,1,0
|
||||
DFB 8,15,11 ; "l", 11 points, 8x8
|
||||
DFB 50,26,1
|
||||
DFB 1,0,0,1,0,1,0,1,0,1,0,1,-1,1,1,0,1,0,-1,-1
|
||||
DFB 2,16,41 ; "of", 44 pts, 2x2
|
||||
DFB 100,111,4
|
||||
DFB 1,1,1,0,1,-1,1,0,-1,0,-1,1,0,1,0,1,1,1
|
||||
DFB 1,0,1,0,1,-1,0,-1,0,-1,-1,-1,1,1,1,1,1,1,1,0
|
||||
DFB 1,-1,0,-1,0,-1,0,-1,-1,-1,-1,1,0,1,0,1
|
||||
DFB 0,1,0,1,0,1,0,1,0,1,1,1,1,-1,0,-1,0,-1,-1,-1
|
||||
DFB 1,0,1,0,1,-1
|
||||
DFB 8,15,7 ; "K", left line, 8x8
|
||||
DFB 50,4,9
|
||||
DFB 0,1,0,1,0,1,0,1,0,1,0,1
|
||||
DFB 8,15,7 ; "K", finish it off, 8x8
|
||||
DFB 50,7,9
|
||||
DFB -1,1,-1,1,-1,1,1,1,1,1,1,1
|
||||
DFB 8,15,14 ; "a", 14 points, 8x8
|
||||
DFB 50,9,11
|
||||
DFB 1,0,1,0,1,1,0,1,0,1,0,1,-1,0,-1,0,-1,0,-1,-1
|
||||
DFB 1,-1,1,0,1,0
|
||||
DFB 8,15,11 ; "l", 11 points, 8x8
|
||||
DFB 50,13,9
|
||||
DFB 1,0,0,1,0,1,0,1,0,1,0,1,-1,1,1,0,1,0,-1,-1
|
||||
DFB 8,15,16 ; "d", 16 points, 8x8
|
||||
DFB 50,20,9
|
||||
DFB 0,1,0,1,0,1,0,1,0,1,0,1,-1,0,-1,0,-1,0,-1,-1
|
||||
DFB 0,-1,0,-1,1,-1,1,0,1,0
|
||||
DFB 8,15,14 ; "u", 14 points, 8x8
|
||||
DFB 50,21,11
|
||||
DFB 0,1,0,1,0,1,1,1,1,0,1,-1,1,-1,0,-1,0,-1,0,1
|
||||
DFB 0,1,0,1,0,1
|
||||
DFB 8,15,14 ; "n", 14 points, 8x8
|
||||
DFB 50,26,11
|
||||
DFB 0,1,0,1,0,1,0,1,0,-1,0,-1,1,-1,1,-1,1,0,1,1
|
||||
DFB 0,1,0,1,0,1
|
||||
DFB 0 ; end
|
||||
|
||||
********************************
|
||||
* Draw Background routine. *
|
||||
* Leave bit set for blue, or *
|
||||
* strip it off for purple. *
|
||||
********************************
|
||||
DRAWBKGD LDA #0
|
||||
STA HLINE
|
||||
LDA #2
|
||||
STA HLINE2
|
||||
:LOOP JSR HADDR
|
||||
JSR HADDR2
|
||||
BCS :ALLDONE
|
||||
JSR BKLINE12
|
||||
ADDB #4;HLINE;HLINE
|
||||
ADDB #4;HLINE2;HLINE2
|
||||
LDA HLINE
|
||||
CMP #180
|
||||
BLT :LOOP
|
||||
:ALLDONE RTS
|
||||
|
||||
BKLINE12 LDY #0
|
||||
:1 LDX #0
|
||||
:0 LDA BACKGND1,X
|
||||
STA (HPTR),Y
|
||||
LDA BACKGND2,X
|
||||
STA (HPTR2),Y
|
||||
INX
|
||||
INY
|
||||
CPX #8
|
||||
BLT :0
|
||||
CPY #40
|
||||
BLT :1
|
||||
RTS
|
||||
BACKGND1 HEX 858A94A8D0A0C182 ; high bit is set..
|
||||
BACKGND2 HEX D0A0C182858A94A8 ; blue background.
|
||||
|
||||
********************************
|
||||
* Roll Jewel of Kaldun onto *
|
||||
* the graphics screen. *
|
||||
* Jewel picture is stored *
|
||||
* in hi-res page 2, or *
|
||||
* locations $4000-$5FFF *
|
||||
********************************
|
||||
ROLJEWEL LDA #0
|
||||
STA ROL_CTR
|
||||
LDA #174
|
||||
STA ROLSTART
|
||||
:LOOP STA HLINE2 ; on page one
|
||||
LDA #14
|
||||
STA HLINE ; on page two
|
||||
:SCROLL JSR HADDR
|
||||
JSR HADDR2
|
||||
ADDB #$20;HPTR+1;HPTR+1 ; make page 2 hires
|
||||
LDY #8
|
||||
:COPY LDA (HPTR),Y ; copy a line of the jewel
|
||||
STA (HPTR2),Y ; onto the graphics page.
|
||||
INY
|
||||
CPY #32
|
||||
BLT :COPY
|
||||
INC HLINE ; increas copying until
|
||||
INC HLINE2 ; at bottom of window
|
||||
*-------------------------------
|
||||
LDX ROL_CTR
|
||||
INC ROL_CTR
|
||||
LDY $FF00,X
|
||||
:0TEST0 DEY
|
||||
BNE :0TEST0
|
||||
*-------------------------------
|
||||
STA SPEAKER
|
||||
LDA HLINE2 ; on page 1.
|
||||
CMP #177
|
||||
BLT :SCROLL
|
||||
STA SPEAKER
|
||||
LDY ROLSTART ; do a pause that decreases
|
||||
:PAUSE LDA #20 ; as jewel moves farther
|
||||
JSR WAIT ; onto the page
|
||||
DEY
|
||||
BNE :PAUSE
|
||||
LDA ROLSTART ; check if we are already
|
||||
CMP #14 ; finished
|
||||
BEQ :EXIT
|
||||
DEC ROLSTART ; move jewel up a bit
|
||||
DEC ROLSTART
|
||||
DEC ROLSTART
|
||||
DEC ROLSTART
|
||||
LDA ROLSTART
|
||||
CMP #14 ; if.lt.14, we have final
|
||||
BGE :LOOP ; if.ge.14, keep on going
|
||||
LDA #14 ; show at top.
|
||||
BNE :LOOP ; always
|
||||
:EXIT RTS
|
||||
ROLSTART HEX 00 ; where we are on scroll
|
||||
ROL_CTR HEX 00 ; -----
|
||||
|
||||
********************************
|
||||
* Fade the Castle wall in for *
|
||||
* the title page. *
|
||||
********************************
|
||||
|
||||
WALLFADE STA $C052
|
||||
MOVW #WFTABLE;PTR
|
||||
MOVB #246;TITLECTR
|
||||
LDA #%00000000
|
||||
STA CLRFLAG
|
||||
LDA #%00000000
|
||||
STA XORFLAG
|
||||
:REPEAT JSR TITBUZZ
|
||||
NILW TITX
|
||||
NILW TITY
|
||||
MOVB #18;SNUM
|
||||
LDY #0
|
||||
LDA (PTR),Y
|
||||
STA TITX
|
||||
JSR PTRINC
|
||||
LDA (PTR),Y
|
||||
BPL :0
|
||||
PHA
|
||||
MOVB #17;SNUM
|
||||
PLA
|
||||
AND #%01111111
|
||||
:0 STA TITY
|
||||
JSR PTRINC
|
||||
DEC TITY
|
||||
DEC TITX
|
||||
IMULW #8;TITX;TITX
|
||||
IMULW #8;TITY;TITY
|
||||
LDY TITY
|
||||
LDX TITX
|
||||
LDA TITX+1
|
||||
STA SPEAKER
|
||||
JSR DRAWSHAP
|
||||
DEC TITLECTR
|
||||
BEQ :DONE
|
||||
JMP :REPEAT
|
||||
:DONE LDA #%10000000
|
||||
STA CLRFLAG
|
||||
LDA #%00000000
|
||||
STA XORFLAG
|
||||
RTS
|
||||
|
||||
TITBUZZ STA SPEAKER
|
||||
LDX ROL_CTR
|
||||
INC ROL_CTR
|
||||
:REPEAT DEX
|
||||
BNE :REPEAT
|
||||
STA SPEAKER
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Data for fade in of castle *
|
||||
* wall. These are randomly *
|
||||
* generated locations. High *
|
||||
* bit on the Y coordinate *
|
||||
* determines the shape number. *
|
||||
* ON = shape #17 *
|
||||
* OFF= shape #18 *
|
||||
********************************
|
||||
|
||||
WFTABLE DFB 33,149,24,149,28,22,25,148,2,22,23,151
|
||||
DFB 13,151,3,149,22,21,29,21,2,150,4,21
|
||||
DFB 29,20,33,23,27,149,12,151,24,150,7,148
|
||||
DFB 11,21,17,21,30,150,34,21,33,148,11,149
|
||||
DFB 33,151,2,151,9,20,16,23,16,150,16,22
|
||||
DFB 7,151,14,150,23,23,26,151,8,21,34,22
|
||||
DFB 1,22,21,20,8,149,3,21,6,150,22,149,21,151
|
||||
DFB 32,22,31,23,8,22,10,149,21,150,26,23
|
||||
DFB 27,20,6,151,8,23,35,148,10,23,34,151
|
||||
DFB 23,148,21,23,25,21,24,22,26,22,5,150
|
||||
DFB 8,150,14,151,13,148,16,149,11,148,28,151
|
||||
DFB 17,151,14,21,18,149,34,23,19,20,19,151
|
||||
DFB 19,149,28,23,20,150,5,20,7,23,4,151
|
||||
DFB 14,23,9,22,29,150,33,150,32,149,9,151
|
||||
DFB 1,21,5,22,1,23,35,151,9,21,2,21
|
||||
DFB 1,20,18,23,13,22,34,149,17,20,20,151
|
||||
DFB 9,148,22,22,3,150,25,22,15,150,15,21
|
||||
DFB 3,22,23,20,30,23,27,21,31,22,12,22
|
||||
DFB 20,22,22,23,3,23,13,149,5,148,16,151
|
||||
DFB 1,148,3,148,17,148,29,151,31,148,27,151
|
||||
DFB 27,22,9,149,13,23,5,23,5,149,19,148
|
||||
DFB 15,148,3,151,11,23,30,151,6,149,35,21
|
||||
DFB 10,150,6,22,9,23,30,21,5,151,19,150
|
||||
DFB 25,23,32,151,17,23,32,23,26,150,26,149
|
||||
DFB 28,150,25,20,23,150,16,21,6,21,7,22
|
||||
DFB 7,150,17,149,23,22,14,22,25,150,27,150
|
||||
DFB 17,150,13,21,31,21,19,23,20,149,33,22
|
||||
DFB 19,21,22,151,35,149,30,22,28,21,12,149
|
||||
DFB 29,22,1,151,35,150,20,21,26,21,7,149
|
||||
DFB 15,151,35,22,30,149,12,23,4,150,19,22
|
||||
DFB 18,150,10,151,7,21,29,148,11,22,27,148
|
||||
DFB 15,20,3,20,9,150,11,151,2,23,21,149
|
||||
DFB 22,150,12,21,28,149,25,151,21,148,5,21
|
||||
DFB 33,20,7,20,13,20,15,23,27,23,4,149
|
||||
DFB 1,150,1,149,29,149,12,150,35,20,13,150
|
||||
DFB 21,22,2,149,31,151,15,149,29,23,17,22
|
||||
DFB 34,150,10,21,20,23,32,21,15,22,18,151
|
||||
DFB 24,21,24,151,14,149,11,150,32,150,25,149
|
||||
DFB 4,22,4,23,24,23,33,21,23,21,6,23
|
||||
DFB 31,20,31,149,18,21,23,149,10,22,8,151
|
||||
DFB 21,21,11,20,18,22,31,150,35,23
|
||||
|
||||
********************************
|
||||
* Prepare for scrolling: *
|
||||
********************************
|
||||
|
||||
LINE21 = $650
|
||||
LINE22 = $6D0
|
||||
LINE23 = $750
|
||||
|
||||
SCPREP JSR CLRSCRN
|
||||
LDY #40
|
||||
LDA #$20 ; inverse space
|
||||
:0 STA LINE21-1,Y
|
||||
STA LINE22-1,Y
|
||||
STA LINE23-1,Y
|
||||
DEY
|
||||
BPL :0
|
||||
STA $C053
|
||||
RTS
|
||||
|
||||
********************************
|
||||
* Scrolling line: *
|
||||
********************************
|
||||
|
||||
SCLINE INV " "
|
||||
INV "... THE JEWEL OF KALDUN "
|
||||
INV "... PROGRAMMED BY A2GEEK "
|
||||
INV "... STORY BY BSHAGE "
|
||||
INV "... PRESS <RETURN> TO PLAY "
|
||||
INV "... PRESS <I> FOR INSTRUCTIONS AND INFORMATION "
|
||||
INV "..."
|
||||
HEX 00
|
||||
|
||||
********************************
|
||||
* Scroll that line, and check *
|
||||
* to see if a RETURN or I has *
|
||||
* been pressed. (or Q) *
|
||||
********************************
|
||||
|
||||
SCROLL LDA #0
|
||||
STA KEYSTROB
|
||||
:REPEAT TAY
|
||||
PHA
|
||||
LDX #0
|
||||
:1 LDA SCLINE,Y
|
||||
BNE :0
|
||||
LDY #0
|
||||
BEQ :1
|
||||
:0 STA LINE22,X
|
||||
INY
|
||||
INX
|
||||
CPX #40
|
||||
BLT :1
|
||||
LDA #220
|
||||
JSR WAIT
|
||||
LDA KEYBOARD
|
||||
BMI :KEY
|
||||
:RESUME PLA
|
||||
TAY
|
||||
INY
|
||||
LDA SCLINE,Y
|
||||
BEQ SCROLL
|
||||
TYA
|
||||
JMP :REPEAT
|
||||
:KEY STA KEYSTROB
|
||||
CMP #$8D
|
||||
BEQ :EXIT
|
||||
CMP #"Q"
|
||||
BEQ :EXIT
|
||||
CMP #"q"
|
||||
BEQ :EXIT
|
||||
CMP #"I"
|
||||
BEQ :EXIT
|
||||
CMP #"i"
|
||||
BEQ :EXIT
|
||||
DEC RANDOM1 ; delay until all three
|
||||
BNE :RESUME ; bytes of RANDOM (aka
|
||||
DEC RANDOM2 ; counter) become
|
||||
BNE :RESUME ; zero once again.
|
||||
**** DEC RANDOM3 ; Then, trick the program
|
||||
**** BNE :RESUME ; into thinking that "I"
|
||||
LDA #"I" ; has been pressed.
|
||||
:EXIT PHA
|
||||
JSR SCPREP ; clear out scrolling region.
|
||||
PLA
|
||||
TAY ; do this to preserve
|
||||
PLA ; keypress...
|
||||
TYA
|
||||
RTS
|
||||
|
Loading…
x
Reference in New Issue
Block a user