1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-10-18 22:24:28 +00:00

Extend Console I/O so Rogue I/O disappears

This commit is contained in:
David Schmenk 2018-02-03 09:26:27 -08:00
parent 39385d79a4
commit d59a54d8fd
9 changed files with 136 additions and 159 deletions

View File

@ -4,6 +4,7 @@ import conio
const FLASH = $7F const FLASH = $7F
struc t_conio struc t_conio
word keypressed word keypressed
word getkey
word home word home
word gotoxy word gotoxy
word viewport word viewport
@ -12,5 +13,7 @@ import conio
word grmode word grmode
word grcolor word grcolor
word grplot word grplot
word tone
word rnd
end end
end end

View File

@ -1,4 +1,5 @@
import sndseq import sndseq
word musicSequence // musicSequence(yield, backgroundProc)#0
predef spkrTone(pitch, duration)#0, spkrPWM(sample, speed, len)#0 predef spkrTone(pitch, duration)#0, spkrPWM(sample, speed, len)#0
predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(yield, backgroundProc)#1 predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(yield, backgroundProc)#1
end end

View File

@ -5,6 +5,12 @@ include "inc/cmdsys.plh"
const FULLMODE = 0 const FULLMODE = 0
const MIXMODE = 1 const MIXMODE = 1
// //
// Apple II ZP locations.
//
const a2rndnum = $4E // ZP location of RND
const a2rndl = $4E
const a2rndh = $4F
//
// Apple II hardware constants. // Apple II hardware constants.
// //
const speaker = $C030 const speaker = $C030
@ -23,10 +29,15 @@ const hgr2 = $4000
const page1 = 0 const page1 = 0
const page2 = 1 const page2 = 1
// //
// External interface // Apple III hardware constants.
//
const ENV_REG = $FFDF
//
// External interface.
// //
struc t_conio struc t_conio
word keypressed word keypressed
word getkey
word home word home
word gotoxy word gotoxy
word viewport word viewport
@ -35,12 +46,14 @@ struc t_conio
word grmode word grmode
word grcolor word grcolor
word grplot word grplot
word tone
word rnd
end end
// //
// Predefined functions. // Predefined functions.
// //
predef a2keypressed,a2home,a2gotoxy(x,y),a2viewport(left, top, width, height),a2texttype(type) predef a2keypressed,a2home,a2gotoxy(x,y),a2viewport(left, top, width, height),a2texttype(type)
predef a2textmode(cols),a2grmode(mix),a2grcolor(color),a2grplot(x,y) predef a2textmode(cols),a2grmode(mix),a2grcolor(color),a2grplot(x,y),a2tone(duration, delay),a2rnd
// //
// Exported function table. // Exported function table.
// //
@ -49,6 +62,7 @@ word conio[]
// Function pointers. // Function pointers.
// //
word = @a2keypressed word = @a2keypressed
word = @getc
word = @a2home word = @a2home
word = @a2gotoxy word = @a2gotoxy
word = @a2viewport word = @a2viewport
@ -57,6 +71,8 @@ word = @a2textmode
word = @a2grmode word = @a2grmode
word = @a2grcolor word = @a2grcolor
word = @a2grplot word = @a2grplot
word = @a2tone
word = @a2rnd
// //
// Screen row address arrays. // Screen row address arrays.
// //
@ -79,6 +95,10 @@ byte textbwmode[] = 2, 16, 0
byte textclrmode[] = 2, 16, 1 byte textclrmode[] = 2, 16, 1
byte grcharset[] = 1, 0, $7F, $7F, $7F, $7F, $00, $00, $00, $00 byte grcharset[] = 1, 0, $7F, $7F, $7F, $7F, $00, $00, $00, $00
// //
// Random number for Apple 1 and III.
//
word randnum = 12345
//
// Native routines. // Native routines.
// //
asm equates asm equates
@ -176,6 +196,15 @@ end
def a1grmode(mix) def a1grmode(mix)
return 0 // not supported return 0 // not supported
end end
def a1tone(duration, delay)
byte i
while duration
for i = delay downto 0; next
duration--
loop
return 0
end
// //
// Apple II routines. // Apple II routines.
// //
@ -223,6 +252,20 @@ def a2grmode(mix)
a2home a2home
return a2grscrn(@txt1scrn) // point to lo-res screen return a2grscrn(@txt1scrn) // point to lo-res screen
end end
def a2tone(duration, delay)
byte i
while duration
^speaker // toggle speaker
for i = delay downto 0; next
duration--
loop
return 0
end
def a2rnd
*a2rndnum = (*a2rndnum << 1) + *a2rndnum + 123
return *a2rndnum & $7FFF
end
// //
// Apple III routines. // Apple III routines.
// //
@ -314,27 +357,56 @@ def a3grmode(mix)
next next
return a2grscrn(@txt2scrn) // point to color screen return a2grscrn(@txt2scrn) // point to color screen
end end
def a3tone(duration, pitch)
byte env
env = ^ENV_REG
^ENV_REG = env | $C0
a2tone(duration, pitch)
^ENV_REG = env
return 0
end
//
// Apple 1 and III combined routines.
//
def a13getkey
while not conio:keypressed()
randnum = randnum + 123
loop
return getc()
end
def a13rnd
randnum = (randnum << 1) + randnum + 123
return randnum & $7FFF
end
// //
// Machine specific initialization. // Machine specific initialization.
// //
when MACHID & MACHID_MODEL when MACHID & MACHID_MODEL
is MACHID_I is MACHID_I
conio:keypressed = @a1keypressed conio:keypressed = @a1keypressed
conio:getkey = @a13getkey
conio:home = @a1home conio:home = @a1home
conio:gotoxy = @a1gotoxy conio:gotoxy = @a1gotoxy
conio:viewport = @a1viewport conio:viewport = @a1viewport
conio:texttype = @a1texttype conio:texttype = @a1texttype
conio:textmode = @a1textmode conio:textmode = @a1textmode
conio:grmode = @a1grmode conio:grmode = @a1grmode
conio:tone = @a1tone
conio:rnd = @a13rnd
break break
is MACHID_III is MACHID_III
conio:keypressed = @a3keypressed conio:keypressed = @a3keypressed
conio:getkey = @a13getkey
conio:home = @a3home conio:home = @a3home
conio:gotoxy = @a3gotoxy conio:gotoxy = @a3gotoxy
conio:viewport = @a3viewport conio:viewport = @a3viewport
conio:texttype = @a3texttype conio:texttype = @a3texttype
conio:textmode = @a3textmode conio:textmode = @a3textmode
conio:grmode = @a3grmode conio:grmode = @a3grmode
conio:tone = @a3tone
conio:rnd = @a13rnd
break break
//otherwise // MACHID_II //otherwise // MACHID_II
wend wend

View File

@ -38,7 +38,6 @@ DGR = DGR\#FE1000
TONE = TONE\#FE1000 TONE = TONE\#FE1000
PORTIO = PORTIO\#FE1000 PORTIO = PORTIO\#FE1000
ROGUE = ROGUE\#FE1000 ROGUE = ROGUE\#FE1000
ROGUEIO = ROGUEIO\#FE1000
ROGUEMAP= ROGUEMAP\#FE1000 ROGUEMAP= ROGUEMAP\#FE1000
ROGUECOMBAT= ROGUECOMBAT\#FE1000 ROGUECOMBAT= ROGUECOMBAT\#FE1000
HELLO = HELLO\#FE1000 HELLO = HELLO\#FE1000
@ -73,7 +72,7 @@ TXTTYPE = .TXT
#SYSTYPE = \#FF2000 #SYSTYPE = \#FF2000
#TXTTYPE = \#040000 #TXTTYPE = \#040000
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(ROGUEIO) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
clean: clean:
-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03) -rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03)
@ -285,10 +284,6 @@ $(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a ./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a
acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a
$(ROGUEIO): samplesrc/rogue.io.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < samplesrc/rogue.io.pla > samplesrc/rogue.io.a
acme --setpc 4094 -o $(ROGUEIO) samplesrc/rogue.io.a
$(ROGUECOMBAT): samplesrc/rogue.combat.pla $(PLVM02) $(PLASM) $(ROGUECOMBAT): samplesrc/rogue.combat.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < samplesrc/rogue.combat.pla > samplesrc/rogue.combat.a ./$(PLASM) -AMOW < samplesrc/rogue.combat.pla > samplesrc/rogue.combat.a
acme --setpc 4094 -o $(ROGUECOMBAT) samplesrc/rogue.combat.a acme --setpc 4094 -o $(ROGUECOMBAT) samplesrc/rogue.combat.a

View File

@ -38,7 +38,6 @@ cp ROD#FE1000 prodos/demos/ROD.REL
mkdir prodos/demos/rogue mkdir prodos/demos/rogue
cp ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL cp ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL
cp ROGUECOMBAT#FE1000 prodos/demos/rogue/ROGUECOMBAT.REL cp ROGUECOMBAT#FE1000 prodos/demos/rogue/ROGUECOMBAT.REL
cp ROGUEIO#FE1000 prodos/demos/rogue/ROGUEIO.REL
cp ROGUEMAP#FE1000 prodos/demos/rogue/ROGUEMAP.REL cp ROGUEMAP#FE1000 prodos/demos/rogue/ROGUEMAP.REL
cp samplesrc/LEVEL0#040000 prodos/demos/rogue/LEVEL0.TXT cp samplesrc/LEVEL0#040000 prodos/demos/rogue/LEVEL0.TXT
cp samplesrc/LEVEL1#040000 prodos/demos/rogue/LEVEL1.TXT cp samplesrc/LEVEL1#040000 prodos/demos/rogue/LEVEL1.TXT
@ -77,6 +76,9 @@ cp samplesrc/playseq.pla prodos/bld/PLAYSEQ.PLA.TXT
cp samplesrc/rpncalc.pla prodos/bld/RPNCALC.PLA.TXT cp samplesrc/rpncalc.pla prodos/bld/RPNCALC.PLA.TXT
cp samplesrc/httpd.pla prodos/bld/HTTPD.PLA.TXT cp samplesrc/httpd.pla prodos/bld/HTTPD.PLA.TXT
cp samplesrc/fatcat.pla prodos/bld/FATCAT.PLA.TXT cp samplesrc/fatcat.pla prodos/bld/FATCAT.PLA.TXT
cp samplesrc/rogue.pla prodos/bld/ROGUE.PLA.TXT
cp samplesrc/rogue.map.pla prodos/bld/ROGUE.MAP.PLA.TXT
cp samplesrc/rogue.combat.pla prodos/bld/ROGUE.COMBAT.PLA.TXT
mkdir prodos/bld/inc mkdir prodos/bld/inc
cp inc/args.plh prodos/bld/inc/ARGS.PLH.TXT cp inc/args.plh prodos/bld/inc/ARGS.PLH.TXT

View File

@ -1,9 +1,6 @@
include "inc/cmdsys.plh" include "inc/cmdsys.plh"
include "inc/conio.plh" include "inc/conio.plh"
import rogueio
word rnd, getkb, tone
end
import roguemap import roguemap
predef moveplayer predef moveplayer
end end
@ -129,10 +126,10 @@ export word entities = 0
// //
def win#0 def win#0
tone(30, 15) conio:tone(30, 15)
tone(5, 15) conio:tone(5, 15)
tone(5, 15) conio:tone(5, 15)
tone(30, 5) conio:tone(30, 5)
end end
export def fight(player, enemy) export def fight(player, enemy)
@ -161,18 +158,18 @@ export def fight(player, enemy)
puts(ascii_entity[enemy->kind] + e_atck * 11) puts(ascii_entity[enemy->kind] + e_atck * 11)
next next
conio:gotoxy(12, 8); puts("F)ight or R)un?") conio:gotoxy(12, 8); puts("F)ight or R)un?")
if toupper(getkb()) == 'R' if toupper(conio:getkey()) == 'R'
return 1 return 1
else else
// //
// Turn player in random direction // Turn player in random direction
// //
player->angle = rnd() & 7 player->angle = conio:rnd() & 7
// //
// Calculate attack (with a little random variation) // Calculate attack (with a little random variation)
// //
p_atck = player->skill + player->energy / 10 - enemy->power / 25 + (rnd() & 7) p_atck = player->skill + player->energy / 10 - enemy->power / 25 + (conio:rnd() & 7)
e_atck = enemy->power - player->skill / 5 - player->energy / 20 + (rnd() & 7) e_atck = enemy->power - player->skill / 5 - player->energy / 20 + (conio:rnd() & 7)
if enemy->life > p_atck if enemy->life > p_atck
enemy->life = enemy->life - p_atck enemy->life = enemy->life - p_atck
else else

View File

@ -1,111 +0,0 @@
include "inc/cmdsys.plh"
include "inc/conio.plh"
byte[] initstr
byte = " ( )\n"
byte = " )\\ ) ( /( (\n"
byte = "(()/( )\\()) )\\ ) ( (\n"
byte = " /(_))((_)\\ (()/( )\\ )\\\n"
byte = "(_)) ((_) /(_))_ _ ((_)((_)\n"
byte = "| _ \\ / _ \\(_)) __|| | | || __|\n"
byte = "| / | (_) | | (_ || |_| || _|\n"
byte = "|_|_\\ \\___/ \\___| \\___/ |___|\n"
byte = "\n"
byte = " By Resman\n"
byte = " Artwork by Seth Sternberger\n"
byte = ""
word titlestr = @initstr
//
// Machine specific routines
//
export word rnd, getkb, tone
const ENV_REG = $FFDF
const SPEAKER = $C030
const a2rndnum = $4E // ZP location of RND
const a2rndl = $4E
const a2rndh = $4F
word a3rndnum = 12345
def a3rnd
a3rndnum = (a3rndnum << 1) + a3rndnum + 123
return *a3rndnum & $7FFF
end
def a2rnd
*a2rndnum = (*a2rndnum << 1) + *a2rndnum + 123
return *a2rndnum & $7FFF
end
def a2getkb
return getc()
end
def a2tone(duration, delay)
byte i
while duration
^SPEAKER
for i = 0 to delay
next
duration--
loop
return 0
end
def a3tone(duration, pitch)
byte env
env = ^ENV_REG
^ENV_REG = env | $C0
a2tone(duration, pitch)
^ENV_REG = env
return 0
end
//
// Apple /// console routines
//
def a3getkb
while not conio:keypressed()
a3rndnum = a3rndnum + 123
loop
return getc()
end
//
// Set machine specific routines
//
when MACHID & $C8
is $08 // Apple 1
puts("APPLE 1 NOT SUPPORTED.")
return -1
is $C0 // Apple ///
rnd = @a3rnd
getkb = @a3getkb
tone = @a3tone
break
otherwise // Apple ][
rnd = @a2rnd
getkb = @a2getkb
tone = @a2tone
wend
//
// Print title page
//
conio:home()
while ^titlestr
puts(titlestr)
titlestr = titlestr + ^titlestr + 1
loop
done

View File

@ -5,13 +5,24 @@ include "inc/cmdsys.plh"
include "inc/conio.plh" include "inc/conio.plh"
include "inc/fileio.plh" include "inc/fileio.plh"
import rogueio //
const O_READ = 1 // Title page
const O_WRITE = 2 //
const O_READ_WRITE = 3
word rnd, getkb, tone byte[] initstr
end byte = " ( )\n"
byte = " )\\ ) ( /( (\n"
byte = "(()/( )\\()) )\\ ) ( (\n"
byte = " /(_))((_)\\ (()/( )\\ )\\\n"
byte = "(_)) ((_) /(_))_ _ ((_)((_)\n"
byte = "| _ \\ / _ \\(_)) __|| | | || __|\n"
byte = "| / | (_) | | (_ || |_| || _|\n"
byte = "|_|_\\ \\___/ \\___| \\___/ |___|\n"
byte = "\n"
byte = " By Resman\n"
byte = " Artwork by Seth Sternberger\n"
byte = ""
word titlestr = @initstr
// //
// Octant beam parameters // Octant beam parameters
@ -760,4 +771,14 @@ export def drawvisentity(xofst, yofst, tile)#0
fin fin
end end
//
// Print title page
//
conio:home()
while ^titlestr
puts(titlestr)
titlestr = titlestr + ^titlestr + 1
loop
done done

View File

@ -41,10 +41,6 @@ import roguecombat
word entity, entities word entity, entities
end end
import rogueio
word rnd, getkb, tone
end
const maxlight = 10 const maxlight = 10
const maxview = 19 const maxview = 19
@ -54,6 +50,7 @@ byte vplayer = '^', '\\', '>', '/', 'v', '\\', '<', '/'
byte totaldarkness = 0 byte totaldarkness = 0
byte level = 0 byte level = 0
word free_entities word free_entities
// //
// Power-ups // Power-ups
// //
@ -157,42 +154,42 @@ end
// //
def ouch#0 def ouch#0
tone(128,5) conio:tone(128,5)
end end
def gotit#0 def gotit#0
tone(10,8) conio:tone(10,8)
tone(80,2) conio:tone(80,2)
end end
def fall#0 def fall#0
byte i byte i
for i = 0 to 10 for i = 0 to 10
tone(50, i) conio:tone(50, i)
next next
end end
def drown#0 def drown#0
word i word i
tone(10,20) conio:tone(10,20)
tone(10,1) conio:tone(10,1)
for i = 0 to 1000 for i = 0 to 1000
next next
tone(10,25) conio:tone(10,25)
tone(10,2) conio:tone(10,2)
for i = 0 to 1000 for i = 0 to 1000
next next
tone(10,30) conio:tone(10,30)
tone(10,3) conio:tone(10,3)
end end
def groan#0 def groan#0
byte i byte i
for i = 0 to 5 for i = 0 to 5
tone(5, 40 + i) conio:tone(5, 40 + i)
next next
end end
@ -463,10 +460,10 @@ def play
return FALSE return FALSE
fin fin
conio:gotoxy(xcentr, ycentr) conio:gotoxy(xcentr, ycentr)
when toupper(getkb()) when toupper(conio:getkey())
is 'I' is 'I'
if totaldarkness if totaldarkness
player.angle = rnd() & 7 player.angle = conio:rnd() & 7
else else
player.angle = 0 player.angle = 0
fin fin
@ -474,7 +471,7 @@ def play
break break
is 'J' is 'J'
if totaldarkness if totaldarkness
player.angle = rnd() & 7 player.angle = conio:rnd() & 7
else else
player.angle = 6 player.angle = 6
fin fin
@ -482,7 +479,7 @@ def play
break break
is 'K' is 'K'
if totaldarkness if totaldarkness
player.angle = rnd() & 7 player.angle = conio:rnd() & 7
else else
player.angle = 2 player.angle = 2
fin fin
@ -490,7 +487,7 @@ def play
break break
is 'M' is 'M'
if totaldarkness if totaldarkness
player.angle = rnd() & 7 player.angle = conio:rnd() & 7
else else
player.angle = 4 player.angle = 4
fin fin
@ -601,7 +598,7 @@ def play
clearstatus clearstatus
conio:gotoxy(0, statusline) conio:gotoxy(0, statusline)
puts(@quitstr) puts(@quitstr)
if toupper(getkb()) == 'Y' if toupper(conio:getkey()) == 'Y'
player.health = 0 player.health = 0
return FALSE return FALSE
fin fin