mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-08-08 09:25:19 +00:00
Compare commits
65 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8bdc1d6c56 | ||
|
46000e7af1 | ||
|
447cde1692 | ||
|
c74af19505 | ||
|
5581bfb052 | ||
|
1a208ef30a | ||
|
e0d688a45a | ||
|
642b4cbbb4 | ||
|
233e0299dc | ||
|
ff023f65d2 | ||
|
6045b260db | ||
|
b5f02ea7c5 | ||
|
c9477238fa | ||
|
59a35068bf | ||
|
348bc4eaf5 | ||
|
05f5729adc | ||
|
06f12e5607 | ||
|
1aee6c4523 | ||
|
c8015091a5 | ||
|
c83ed2c494 | ||
|
5c8fbfdcf4 | ||
|
ea3c73ac15 | ||
|
1f42523014 | ||
|
6b1123a95b | ||
|
fb3a4964c8 | ||
|
12f8cf8053 | ||
|
5e0053569e | ||
|
d92d5dd6cd | ||
|
206e7ae3f4 | ||
|
8d9a0889a6 | ||
|
31f4fbfbec | ||
|
6f620e194d | ||
|
4ee7c8c049 | ||
|
9e31fbd1da | ||
|
1da0bdf610 | ||
|
360be4c709 | ||
|
b13fb204a2 | ||
|
0c57570d4a | ||
|
09d861e5a5 | ||
|
f5416c2d82 | ||
|
10cc631b0a | ||
|
e9a1311764 | ||
|
42888ed95a | ||
|
1fe6191343 | ||
|
b006e18d26 | ||
|
69733fd37f | ||
|
c1b6741cfd | ||
|
41071de12f | ||
|
b6a7b72fe1 | ||
|
426b662481 | ||
|
18543c8363 | ||
|
b2eaa867eb | ||
|
d74ccc22fb | ||
|
c4c3f4d9b3 | ||
|
ecb61ccddd | ||
|
7c3dfe2b2e | ||
|
438ab01254 | ||
|
397dbdbb99 | ||
|
8b0a35e453 | ||
|
81ad97e0bd | ||
|
484aefb08c | ||
|
c743ace42b | ||
|
de29742841 | ||
|
835b90e636 | ||
|
c86d3349df |
@@ -1,7 +1,7 @@
|
||||
# 12/28/2019 PLASMA 2.0 Developer Preview 2 Available!
|
||||
[Download and read the Release Notes](https://github.com/dschmenk/PLASMA/blob/master/doc/Version%202.0.md)
|
||||
# 1/31/2020 PLASMA 2.0 Developer Preview 4 Available!
|
||||
[Download and read the Release Notes](https://github.com/dschmenk/PLASMA/releases)
|
||||
|
||||
[Change List](https://github.com/dschmenk/PLASMA/blob/master/doc/Version%202.0.md#changes-in-plasma-for-20-dp-2)
|
||||
[Change List](https://github.com/dschmenk/PLASMA/blob/master/doc/Version%202.0.md#changes-in-plasma-for-20-dp-3)
|
||||
|
||||
# 4/29/2018 PLASMA 1.2 Available!
|
||||
[Download and read the Release Notes](https://github.com/dschmenk/PLASMA/blob/master/doc/Version%201.2.md)
|
||||
|
@@ -1,18 +1,20 @@
|
||||
# PLASMA Version 2.0 Developer Preview 2
|
||||
# PLASMA Version 2.0 Developer Preview 4
|
||||
|
||||
Welcome to PLASMA: the Grand Unifying Platform for the Apple 1, ][, and ///.
|
||||
|
||||
Download the four disk images (three if you don't plan to boot an Apple ///):
|
||||
Download the five disk images:
|
||||
|
||||
[PLASMA 2.0 DP 800K Full System](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2.2mg?raw=true)
|
||||
[PLASMA 2.0 DP4 800K Full System](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2.2mg?raw=true)
|
||||
|
||||
[PLASMA 2.0 DP System and ProDOS Boot](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-SYS.PO?raw=true)
|
||||
[PLASMA 2.0 DP4 System and ProDOS Boot](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-SYS.PO?raw=true)
|
||||
|
||||
[PLASMA 2.0 DP Build Tools](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-BLD.PO?raw=true)
|
||||
[PLASMA 2.0 DP4 Build Tools](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-BLD.PO?raw=true)
|
||||
|
||||
[PLASMA 2.0 DP Demos](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-DEM.PO?raw=true)
|
||||
[PLASMA 2.0 DP4 Demos](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-DEM.PO?raw=true)
|
||||
|
||||
[PLASMA 2.0 DP Apple /// SOS Boot and SANE floating point modules](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-FPSOS.PO?raw=true)
|
||||
[PLASMA 2.0 DP4 TCP/IP network modules](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-INET.PO?raw=true)
|
||||
|
||||
[PLASMA 2.0 DP4 Apple /// SOS Boot and SANE floating point modules](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-FPSOS.PO?raw=true)
|
||||
|
||||
PLASMA can be run from floppies, System in Drive 1, and Build or Demos in Drive 2. Mass storage is the recommended installation that looks like (replacing HARDISK with your volume name of choice):
|
||||
|
||||
@@ -24,6 +26,8 @@ Demo Files => /HARDISK/PLASMA/DEMOS/
|
||||
|
||||
SANE files => /HARDISK/PLASMA/SYS
|
||||
|
||||
INET files => /HARDDISK/PLASMA/SYS
|
||||
|
||||
Use the System Utilities to copy the floppy images into the above mentioned directories.
|
||||
|
||||
## Apple 1
|
||||
@@ -71,6 +75,16 @@ PLASMA comes with many library modules used by the tools, demos and sample code.
|
||||
```
|
||||
+ED [TEXT FILE]
|
||||
```
|
||||
The file manipulation utilities to copy, delete, rename, create directories, and change file type and aux type remove the need for external programs to do the same. PLASMA can now be installed with the tools included on the PLASMA2-SYS boot floppy. They are:
|
||||
```
|
||||
+COPY [-R] <SRCPATH>+ <DSTPATH>
|
||||
+DEL [-R] <FILEPATH>
|
||||
+REN <FILENAME> <NEWNAME>
|
||||
+NEWDIR <NEWDIRECTORY>
|
||||
+TYPE <FILENAME> [NEWTYPE [NEWAUX]]
|
||||
+CAT [-R] <FILEPATH]
|
||||
```
|
||||
The ```-R``` option will operate on the directories recursively. Wildcard filenames can be specified with ```'*'``` matching zero or more characters, and ```'?'``` matching any character.
|
||||
|
||||
## Compiler Modules
|
||||
|
||||
@@ -82,7 +96,7 @@ Compiler warnings are enabled with `-W`. The optional optimizer is enabled with
|
||||
|
||||
## Demos
|
||||
|
||||
There are some demo programs included for your perusal. Check out `ROGUE` for some diversion. You can find the documentation here: https://github.com/dschmenk/PLASMA/blob/master/doc/Rogue%20Instructions.md. A music sequencer to play through a MockingBoard if it is detected, or the built-in speaker if not. A minimal Web server if you have an Uthernet2 card (required). Bug reports appreciated.
|
||||
There are some demo programs included for your perusal. Check out `ROGUE` for some diversion. You can find the documentation here: https://github.com/dschmenk/PLASMA/blob/master/doc/Rogue%20Instructions.md. A music sequencer to play through a MockingBoard if it is detected, or the built-in speaker if not. A minimal Web server if you have an Uthernet2 card (required). Try `SPIDERS`for some hires shoot'em-up action. Bug reports appreciated.
|
||||
|
||||
## Source Code
|
||||
|
||||
@@ -102,6 +116,22 @@ There is a [YouTube playlist](https://www.youtube.com/playlist?list=PLlPKgUMQbJ7
|
||||
|
||||
- The documentation is sparse and incomplete. Yep, could use your help...
|
||||
|
||||
# Changes in PLASMA for 2.0 DP 4
|
||||
|
||||
1. Improved editor auto-indenting
|
||||
|
||||
2. Compiler fix for terneray operator precedence
|
||||
|
||||
3. Machine check for HGR library
|
||||
|
||||
# Changes in PLASMA for 2.0 DP 3
|
||||
|
||||
1. File manipulation utilities fixed for Apple /// SOS vs ProDOS differences
|
||||
|
||||
2. More optimizations for HiRes graphics libraries
|
||||
|
||||
3. Spiders From Mars hires demo game
|
||||
|
||||
# Changes in PLASMA for 2.0 DP 2
|
||||
|
||||
1. Many file manipulaition utilities (COPY, REName, NEWDIRectory, DELete, CATalog, TYPE)
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
images/apple/SFM.PO
Normal file
BIN
images/apple/SFM.PO
Normal file
Binary file not shown.
@@ -7,8 +7,7 @@ import dgrlib
|
||||
predef dgrTileStr(x, y, tilestr, strlen, tilebuff)#0
|
||||
predef dgrFill(x, y, tile)#0
|
||||
predef dgrClear(clr)#0
|
||||
predef dgrMode#1
|
||||
predef txtMode#0
|
||||
predef dgrMode(mode)#1
|
||||
predef dgrShow(page)#1
|
||||
predef dgrSwap#0
|
||||
predef dgrDrawBuf(page)#0
|
||||
|
@@ -33,7 +33,7 @@ import fileio
|
||||
byte entry_minver
|
||||
byte entry_access
|
||||
word entry_aux
|
||||
word entry_mod
|
||||
word entry_mod[2]
|
||||
word entry_headptr
|
||||
end
|
||||
//
|
||||
|
@@ -7,8 +7,7 @@ import grlib
|
||||
predef grTileStr(x, y, tilestr, strlen, tilebuff)#0
|
||||
predef grFill(x, y, tile)#0
|
||||
predef grClear(clr)#0
|
||||
predef grMode#1
|
||||
predef txtMode#0
|
||||
predef grMode(mode)#1
|
||||
predef grShow(page)#1
|
||||
predef grSwap#0
|
||||
predef grDrawBuf(page)#0
|
||||
|
3
src/inc/hgrfont.plh
Normal file
3
src/inc/hgrfont.plh
Normal file
@@ -0,0 +1,3 @@
|
||||
import hgrfont
|
||||
predef hgrPutStr(x, y, strptr)#0
|
||||
end
|
@@ -1,18 +1,21 @@
|
||||
import hgrlib
|
||||
predef divmod7(x)#2
|
||||
predef hgrPlot(x, y)#0
|
||||
predef hgrOrPlot(x, y)#0
|
||||
predef hgrXorPlot(x, y)#0
|
||||
predef hgrHLin(x1, x2, y)#0
|
||||
predef hgrVLin(y1, y2, x)#0
|
||||
predef hgrRect(x1, x2, y1, y2)#0
|
||||
predef hgrXorHLin(x1, x2, y)#0
|
||||
predef hgrXorVLin(y1, y2, x)#0
|
||||
predef hgrRect(x1, y1, x2, y2)#0
|
||||
predef hgrXorRect(x1, y1, x2, y2)#0
|
||||
predef hgrBLT(x, y, width, height, srcptr)#0
|
||||
predef hgrCopySrc(ofst, y, w, h, srcptr)#0
|
||||
predef hgrAndSrc(ofst, y, w, h, srcptr)#0
|
||||
predef hgrXorSrc(ofst, y, w, h, srcptr)#0
|
||||
predef hgrOrSrc(ofst, y, w, h, srcptr)#0
|
||||
predef hgrCopyDst(ofst, y, w, h, dstptr)#0
|
||||
predef hgrMode#1
|
||||
predef txtMode#0
|
||||
predef hgrMode(mode)#1
|
||||
predef hgrClear#0
|
||||
predef hgrShow(page)#1
|
||||
predef hgrSwap#1
|
||||
|
@@ -9,9 +9,11 @@ import hgrsprite
|
||||
predef spriteUnDrawXor(sprtptr)#0
|
||||
predef spritePos(x, y, sprtptr)#0
|
||||
predef spritePosIndex(x, y, i)#0
|
||||
predef spriteUnDrawList#0
|
||||
predef spriteUnDrawXorList#0
|
||||
predef spriteDrawList#0
|
||||
predef spriteDrawXorList#0
|
||||
predef spriteAdd(i, sprtptr)#1
|
||||
predef spriteDel(i)#1
|
||||
predef spriteDrawBuf(page)#0
|
||||
predef spriteDrawBuf(page)#1
|
||||
end
|
||||
|
13
src/inc/hgrtile.plh
Normal file
13
src/inc/hgrtile.plh
Normal file
@@ -0,0 +1,13 @@
|
||||
import hgrtile
|
||||
predef tileDraw(x, y, tileptr)#0
|
||||
predef tileXorDraw(x, y, tileptr)#0
|
||||
predef tileOrDraw(x, y, tileptr)#0
|
||||
predef tileAndDraw(x, y, tileptr)#0
|
||||
predef tileDrawStr(x, y, strptr, strlen, tileset)#0
|
||||
predef tileFromText(txtpage, tileset)#0
|
||||
predef tileMode(mode)#1
|
||||
predef tileClear#0
|
||||
predef tileShow(page)#1
|
||||
predef tileSwap#1
|
||||
predef tileDrawBuf(page)#1
|
||||
end
|
5
src/inc/matchfiles.plh
Normal file
5
src/inc/matchfiles.plh
Normal file
@@ -0,0 +1,5 @@
|
||||
import matchfiles
|
||||
predef matchName(src, exp)#1
|
||||
predef matchList(pathptr, exp)#2
|
||||
predef isWildName(exp)#1
|
||||
end
|
@@ -196,9 +196,8 @@ export asm dgrBLT(x, y, width, height, src)#0
|
||||
CLC
|
||||
ADC ESTKL+2,X ; WIDTH
|
||||
STA SRCL
|
||||
LDA SRCH
|
||||
ADC #$00
|
||||
STA SRCH
|
||||
BCC +++
|
||||
INC SRCH
|
||||
BNE +++
|
||||
+ AND #$FE
|
||||
TAY
|
||||
@@ -356,9 +355,8 @@ export asm dgrTile(x, y, src)#0
|
||||
LDA SRCL ; SKIP TO NEXT ROW
|
||||
ADC #$07 ; CARRY = 1
|
||||
STA SRCL
|
||||
LDA SRCH
|
||||
ADC #$00
|
||||
STA SRCH
|
||||
BCC +++
|
||||
INC SRCH
|
||||
BNE +++
|
||||
+ AND #$FE
|
||||
TAY
|
||||
@@ -494,7 +492,7 @@ asm _dgrFillTile
|
||||
RTS
|
||||
end
|
||||
//
|
||||
// Wait for VLB - Shouldn't work on //c, but seems to.
|
||||
// Wait for VLB - Only IIe/IIGS.
|
||||
//
|
||||
asm vlbWait#0
|
||||
- LDA $C019
|
||||
@@ -503,6 +501,30 @@ asm vlbWait#0
|
||||
BPL -
|
||||
RTS
|
||||
end
|
||||
// Wait for VBL on IIc is entirely different from others.
|
||||
// Setup, one-time *only* if polling will be used exclusively.
|
||||
// Otherwise requires restoring the mode on exit,
|
||||
// and setting up per-use instead.
|
||||
// [php]
|
||||
// sei ; otherwise interrupt is still raised
|
||||
// sta $C07F ; enable access to VBL register
|
||||
// sta $C05B ; enable VBL polling
|
||||
// sta $C07E ; disable access to VBL register
|
||||
//
|
||||
// wait for VBL:
|
||||
// - bit $C019
|
||||
// bpl -
|
||||
// lda $C070 ; $c019 bit 7 is sticky, reset it
|
||||
//
|
||||
// To allow other methods of VBL, restore access:
|
||||
// - bit $C019
|
||||
// bpl -
|
||||
// lda $C070 ; $c019 bit 7 is sticky, reset it
|
||||
// sta $C07F ; enable access to VBL register
|
||||
// sta $C05A ; disable VBL polling
|
||||
// sta $C07E ; disable access to VBL register
|
||||
// [plp]
|
||||
|
||||
//
|
||||
// Clear the buffer
|
||||
//
|
||||
@@ -513,25 +535,25 @@ export def dgrClear(clr)#0
|
||||
memset(@clrtile, clr, 32)
|
||||
dgrFill(0, 0, @clrtile)
|
||||
end
|
||||
//
|
||||
// Set double lores graphics, return draw buffer
|
||||
//
|
||||
export def dgrMode#1
|
||||
^showlores
|
||||
^showfull
|
||||
^showgraphics
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
^show80 = 0
|
||||
^an3on
|
||||
drawpage = 1
|
||||
drawbuff = dgrbuff[1]
|
||||
return 1
|
||||
end
|
||||
//
|
||||
// Set text mode
|
||||
//
|
||||
export def txtMode#0
|
||||
export def dgrMode(mode)#1
|
||||
if mode
|
||||
//
|
||||
// Set double lores graphics, return draw buffer
|
||||
//
|
||||
^showlores
|
||||
^showfull
|
||||
^showgraphics
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
^show80 = 0
|
||||
^an3on
|
||||
drawpage = 1
|
||||
drawbuff = dgrbuff[1]
|
||||
return 1
|
||||
fin
|
||||
//
|
||||
// Set text mode
|
||||
//
|
||||
^showtext
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
@@ -539,6 +561,7 @@ export def txtMode#0
|
||||
^mapmain = 0
|
||||
^an3off
|
||||
call($FC58, 0, 0, 0, 0) // home()
|
||||
return 0
|
||||
end
|
||||
//
|
||||
// Set display page, return other page
|
||||
|
@@ -298,7 +298,7 @@ def a3write(refnum, buff, len)
|
||||
params:2 = buff
|
||||
params:4 = len
|
||||
perr = syscall($CB, @params)
|
||||
return perr
|
||||
return perr ?? 0 :: len
|
||||
end
|
||||
def a1create(path, type, aux)
|
||||
return perr
|
||||
|
@@ -420,23 +420,26 @@ end
|
||||
//
|
||||
// Set lores graphics, return draw buffer
|
||||
//
|
||||
export def grMode#1
|
||||
^showlores
|
||||
^showfull
|
||||
^showgraphics
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
^show40 = 0
|
||||
^mapmain = 0
|
||||
^an3off
|
||||
drawpage = 1
|
||||
drawbuff = grbuff[1]
|
||||
return 1
|
||||
end
|
||||
//
|
||||
// Set text mode
|
||||
//
|
||||
export def txtMode#0
|
||||
export def grMode(mode)#1
|
||||
if mode
|
||||
//
|
||||
// Set GR mode
|
||||
//
|
||||
^showlores
|
||||
^showfull
|
||||
^showgraphics
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
^show40 = 0
|
||||
^mapmain = 0
|
||||
^an3off
|
||||
drawpage = 1
|
||||
drawbuff = grbuff[1]
|
||||
return 1
|
||||
fin
|
||||
//
|
||||
// Set text mode
|
||||
//
|
||||
^showtext
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
@@ -444,6 +447,7 @@ export def txtMode#0
|
||||
^mapmain = 0
|
||||
^an3off
|
||||
call($FC58, 0, 0, 0, 0) // home()
|
||||
return 0
|
||||
end
|
||||
//
|
||||
// Set display page, return other page
|
||||
|
140
src/libsrc/apple/hgrfont.pla
Normal file
140
src/libsrc/apple/hgrfont.pla
Normal file
@@ -0,0 +1,140 @@
|
||||
include "inc/hgrtile.plh"
|
||||
//
|
||||
// Apple //e hires character font
|
||||
//
|
||||
byte hgrFont[]
|
||||
byte = $1C,$22,$2A,$3A,$1A,$02,$3C,$00,$08,$14,$22,$22,$3E,$22,$22,$00
|
||||
byte = $1E,$22,$22,$1E,$22,$22,$1E,$00,$1C,$22,$02,$02,$02,$22,$1C,$00
|
||||
byte = $1E,$22,$22,$22,$22,$22,$1E,$00,$3E,$02,$02,$1E,$02,$02,$3E,$00
|
||||
byte = $3E,$02,$02,$1E,$02,$02,$02,$00,$3C,$02,$02,$02,$32,$22,$3C,$00
|
||||
byte = $22,$22,$22,$3E,$22,$22,$22,$00,$1C,$08,$08,$08,$08,$08,$1C,$00
|
||||
byte = $20,$20,$20,$20,$20,$22,$1C,$00,$22,$12,$0A,$06,$0A,$12,$22,$00
|
||||
byte = $02,$02,$02,$02,$02,$02,$3E,$00,$22,$36,$2A,$2A,$22,$22,$22,$00
|
||||
byte = $22,$22,$26,$2A,$32,$22,$22,$00,$1C,$22,$22,$22,$22,$22,$1C,$00
|
||||
byte = $1E,$22,$22,$1E,$02,$02,$02,$00,$1C,$22,$22,$22,$2A,$12,$2C,$00
|
||||
byte = $1E,$22,$22,$1E,$0A,$12,$22,$00,$1C,$22,$02,$1C,$20,$22,$1C,$00
|
||||
byte = $3E,$08,$08,$08,$08,$08,$08,$00,$22,$22,$22,$22,$22,$22,$1C,$00
|
||||
byte = $22,$22,$22,$22,$22,$14,$08,$00,$22,$22,$22,$2A,$2A,$36,$22,$00
|
||||
byte = $22,$22,$14,$08,$14,$22,$22,$00,$22,$22,$14,$08,$08,$08,$08,$00
|
||||
byte = $3E,$20,$10,$08,$04,$02,$3E,$00,$3E,$06,$06,$06,$06,$06,$3E,$00
|
||||
byte = $00,$02,$04,$08,$10,$20,$00,$00,$3E,$30,$30,$30,$30,$30,$3E,$00
|
||||
byte = $00,$00,$08,$14,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7F
|
||||
byte = $00,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$00,$08,$00
|
||||
byte = $14,$14,$14,$00,$00,$00,$00,$00,$14,$14,$3E,$14,$3E,$14,$14,$00
|
||||
byte = $08,$3C,$0A,$1C,$28,$1E,$08,$00,$06,$26,$10,$08,$04,$32,$30,$00
|
||||
byte = $04,$0A,$0A,$04,$2A,$12,$2C,$00,$08,$08,$08,$00,$00,$00,$00,$00
|
||||
byte = $08,$04,$02,$02,$02,$04,$08,$00,$08,$10,$20,$20,$20,$10,$08,$00
|
||||
byte = $08,$2A,$1C,$08,$1C,$2A,$08,$00,$00,$08,$08,$3E,$08,$08,$00,$00
|
||||
byte = $00,$00,$00,$00,$08,$08,$04,$00,$00,$00,$00,$3E,$00,$00,$00,$00
|
||||
byte = $00,$00,$00,$00,$00,$00,$08,$00,$00,$20,$10,$08,$04,$02,$00,$00
|
||||
byte = $1C,$22,$32,$2A,$26,$22,$1C,$00,$08,$0C,$08,$08,$08,$08,$1C,$00
|
||||
byte = $1C,$22,$20,$18,$04,$02,$3E,$00,$3E,$20,$10,$18,$20,$22,$1C,$00
|
||||
byte = $10,$18,$14,$12,$3E,$10,$10,$00,$3E,$02,$1E,$20,$20,$22,$1C,$00
|
||||
byte = $38,$04,$02,$1E,$22,$22,$1C,$00,$3E,$20,$10,$08,$04,$04,$04,$00
|
||||
byte = $1C,$22,$22,$1C,$22,$22,$1C,$00,$1C,$22,$22,$3C,$20,$10,$0E,$00
|
||||
byte = $00,$00,$08,$00,$08,$00,$00,$00,$00,$00,$08,$00,$08,$08,$04,$00
|
||||
byte = $10,$08,$04,$02,$04,$08,$10,$00,$00,$00,$3E,$00,$3E,$00,$00,$00
|
||||
byte = $04,$08,$10,$20,$10,$08,$04,$00,$1C,$22,$10,$08,$08,$00,$08,$00
|
||||
byte = $1C,$22,$2A,$3A,$1A,$02,$3C,$00,$08,$14,$22,$22,$3E,$22,$22,$00
|
||||
byte = $1E,$22,$22,$1E,$22,$22,$1E,$00,$1C,$22,$02,$02,$02,$22,$1C,$00
|
||||
byte = $1E,$22,$22,$22,$22,$22,$1E,$00,$3E,$02,$02,$1E,$02,$02,$3E,$00
|
||||
byte = $3E,$02,$02,$1E,$02,$02,$02,$00,$3C,$02,$02,$02,$32,$22,$3C,$00
|
||||
byte = $22,$22,$22,$3E,$22,$22,$22,$00,$1C,$08,$08,$08,$08,$08,$1C,$00
|
||||
byte = $20,$20,$20,$20,$20,$22,$1C,$00,$22,$12,$0A,$06,$0A,$12,$22,$00
|
||||
byte = $02,$02,$02,$02,$02,$02,$3E,$00,$22,$36,$2A,$2A,$22,$22,$22,$00
|
||||
byte = $22,$22,$26,$2A,$32,$22,$22,$00,$1C,$22,$22,$22,$22,$22,$1C,$00
|
||||
byte = $1E,$22,$22,$1E,$02,$02,$02,$00,$1C,$22,$22,$22,$2A,$12,$2C,$00
|
||||
byte = $1E,$22,$22,$1E,$0A,$12,$22,$00,$1C,$22,$02,$1C,$20,$22,$1C,$00
|
||||
byte = $3E,$08,$08,$08,$08,$08,$08,$00,$22,$22,$22,$22,$22,$22,$1C,$00
|
||||
byte = $22,$22,$22,$22,$22,$14,$08,$00,$22,$22,$22,$2A,$2A,$36,$22,$00
|
||||
byte = $22,$22,$14,$08,$14,$22,$22,$00,$22,$22,$14,$08,$08,$08,$08,$00
|
||||
byte = $3E,$20,$10,$08,$04,$02,$3E,$00,$3E,$06,$06,$06,$06,$06,$3E,$00
|
||||
byte = $00,$02,$04,$08,$10,$20,$00,$00,$3E,$30,$30,$30,$30,$30,$3E,$00
|
||||
byte = $00,$00,$08,$14,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7F
|
||||
byte = $00,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$00,$08,$00
|
||||
byte = $14,$14,$14,$00,$00,$00,$00,$00,$14,$14,$3E,$14,$3E,$14,$14,$00
|
||||
byte = $08,$3C,$0A,$1C,$28,$1E,$08,$00,$06,$26,$10,$08,$04,$32,$30,$00
|
||||
byte = $04,$0A,$0A,$04,$2A,$12,$2C,$00,$08,$08,$08,$00,$00,$00,$00,$00
|
||||
byte = $08,$04,$02,$02,$02,$04,$08,$00,$08,$10,$20,$20,$20,$10,$08,$00
|
||||
byte = $08,$2A,$1C,$08,$1C,$2A,$08,$00,$00,$08,$08,$3E,$08,$08,$00,$00
|
||||
byte = $00,$00,$00,$00,$08,$08,$04,$00,$00,$00,$00,$3E,$00,$00,$00,$00
|
||||
byte = $00,$00,$00,$00,$00,$00,$08,$00,$00,$20,$10,$08,$04,$02,$00,$00
|
||||
byte = $1C,$22,$32,$2A,$26,$22,$1C,$00,$08,$0C,$08,$08,$08,$08,$1C,$00
|
||||
byte = $1C,$22,$20,$18,$04,$02,$3E,$00,$3E,$20,$10,$18,$20,$22,$1C,$00
|
||||
byte = $10,$18,$14,$12,$3E,$10,$10,$00,$3E,$02,$1E,$20,$20,$22,$1C,$00
|
||||
byte = $38,$04,$02,$1E,$22,$22,$1C,$00,$3E,$20,$10,$08,$04,$04,$04,$00
|
||||
byte = $1C,$22,$22,$1C,$22,$22,$1C,$00,$1C,$22,$22,$3C,$20,$10,$0E,$00
|
||||
byte = $00,$00,$08,$00,$08,$00,$00,$00,$00,$00,$08,$00,$08,$08,$04,$00
|
||||
byte = $10,$08,$04,$02,$04,$08,$10,$00,$00,$00,$3E,$00,$3E,$00,$00,$00
|
||||
byte = $04,$08,$10,$20,$10,$08,$04,$00,$1C,$22,$10,$08,$08,$00,$08,$00
|
||||
byte = $1C,$22,$2A,$3A,$1A,$02,$3C,$00,$08,$14,$22,$22,$3E,$22,$22,$00
|
||||
byte = $1E,$22,$22,$1E,$22,$22,$1E,$00,$1C,$22,$02,$02,$02,$22,$1C,$00
|
||||
byte = $1E,$22,$22,$22,$22,$22,$1E,$00,$3E,$02,$02,$1E,$02,$02,$3E,$00
|
||||
byte = $3E,$02,$02,$1E,$02,$02,$02,$00,$3C,$02,$02,$02,$32,$22,$3C,$00
|
||||
byte = $22,$22,$22,$3E,$22,$22,$22,$00,$1C,$08,$08,$08,$08,$08,$1C,$00
|
||||
byte = $20,$20,$20,$20,$20,$22,$1C,$00,$22,$12,$0A,$06,$0A,$12,$22,$00
|
||||
byte = $02,$02,$02,$02,$02,$02,$3E,$00,$22,$36,$2A,$2A,$22,$22,$22,$00
|
||||
byte = $22,$22,$26,$2A,$32,$22,$22,$00,$1C,$22,$22,$22,$22,$22,$1C,$00
|
||||
byte = $1E,$22,$22,$1E,$02,$02,$02,$00,$1C,$22,$22,$22,$2A,$12,$2C,$00
|
||||
byte = $1E,$22,$22,$1E,$0A,$12,$22,$00,$1C,$22,$02,$1C,$20,$22,$1C,$00
|
||||
byte = $3E,$08,$08,$08,$08,$08,$08,$00,$22,$22,$22,$22,$22,$22,$1C,$00
|
||||
byte = $22,$22,$22,$22,$22,$14,$08,$00,$22,$22,$22,$2A,$2A,$36,$22,$00
|
||||
byte = $22,$22,$14,$08,$14,$22,$22,$00,$22,$22,$14,$08,$08,$08,$08,$00
|
||||
byte = $3E,$20,$10,$08,$04,$02,$3E,$00,$3E,$06,$06,$06,$06,$06,$3E,$00
|
||||
byte = $00,$02,$04,$08,$10,$20,$00,$00,$3E,$30,$30,$30,$30,$30,$3E,$00
|
||||
byte = $00,$00,$08,$14,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7F
|
||||
byte = $00,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$00,$08,$00
|
||||
byte = $14,$14,$14,$00,$00,$00,$00,$00,$14,$14,$3E,$14,$3E,$14,$14,$00
|
||||
byte = $08,$3C,$0A,$1C,$28,$1E,$08,$00,$06,$26,$10,$08,$04,$32,$30,$00
|
||||
byte = $04,$0A,$0A,$04,$2A,$12,$2C,$00,$08,$08,$08,$00,$00,$00,$00,$00
|
||||
byte = $08,$04,$02,$02,$02,$04,$08,$00,$08,$10,$20,$20,$20,$10,$08,$00
|
||||
byte = $08,$2A,$1C,$08,$1C,$2A,$08,$00,$00,$08,$08,$3E,$08,$08,$00,$00
|
||||
byte = $00,$00,$00,$00,$08,$08,$04,$00,$00,$00,$00,$3E,$00,$00,$00,$00
|
||||
byte = $00,$00,$00,$00,$00,$00,$08,$00,$00,$20,$10,$08,$04,$02,$00,$00
|
||||
byte = $1C,$22,$32,$2A,$26,$22,$1C,$00,$08,$0C,$08,$08,$08,$08,$1C,$00
|
||||
byte = $1C,$22,$20,$18,$04,$02,$3E,$00,$3E,$20,$10,$18,$20,$22,$1C,$00
|
||||
byte = $10,$18,$14,$12,$3E,$10,$10,$00,$3E,$02,$1E,$20,$20,$22,$1C,$00
|
||||
byte = $38,$04,$02,$1E,$22,$22,$1C,$00,$3E,$20,$10,$08,$04,$04,$04,$00
|
||||
byte = $1C,$22,$22,$1C,$22,$22,$1C,$00,$1C,$22,$22,$3C,$20,$10,$0E,$00
|
||||
byte = $00,$00,$08,$00,$08,$00,$00,$00,$00,$00,$08,$00,$08,$08,$04,$00
|
||||
byte = $10,$08,$04,$02,$04,$08,$10,$00,$00,$00,$3E,$00,$3E,$00,$00,$00
|
||||
byte = $04,$08,$10,$20,$10,$08,$04,$00,$1C,$22,$10,$08,$08,$00,$08,$00
|
||||
byte = $1C,$22,$2A,$3A,$1A,$02,$3C,$00,$08,$14,$22,$22,$3E,$22,$22,$00
|
||||
byte = $1E,$22,$22,$1E,$22,$22,$1E,$00,$1C,$22,$02,$02,$02,$22,$1C,$00
|
||||
byte = $1E,$22,$22,$22,$22,$22,$1E,$00,$3E,$02,$02,$1E,$02,$02,$3E,$00
|
||||
byte = $3E,$02,$02,$1E,$02,$02,$02,$00,$3C,$02,$02,$02,$32,$22,$3C,$00
|
||||
byte = $22,$22,$22,$3E,$22,$22,$22,$00,$1C,$08,$08,$08,$08,$08,$1C,$00
|
||||
byte = $20,$20,$20,$20,$20,$22,$1C,$00,$22,$12,$0A,$06,$0A,$12,$22,$00
|
||||
byte = $02,$02,$02,$02,$02,$02,$3E,$00,$22,$36,$2A,$2A,$22,$22,$22,$00
|
||||
byte = $22,$22,$26,$2A,$32,$22,$22,$00,$1C,$22,$22,$22,$22,$22,$1C,$00
|
||||
byte = $1E,$22,$22,$1E,$02,$02,$02,$00,$1C,$22,$22,$22,$2A,$12,$2C,$00
|
||||
byte = $1E,$22,$22,$1E,$0A,$12,$22,$00,$1C,$22,$02,$1C,$20,$22,$1C,$00
|
||||
byte = $3E,$08,$08,$08,$08,$08,$08,$00,$22,$22,$22,$22,$22,$22,$1C,$00
|
||||
byte = $22,$22,$22,$22,$22,$14,$08,$00,$22,$22,$22,$2A,$2A,$36,$22,$00
|
||||
byte = $22,$22,$14,$08,$14,$22,$22,$00,$22,$22,$14,$08,$08,$08,$08,$00
|
||||
byte = $3E,$20,$10,$08,$04,$02,$3E,$00,$3E,$06,$06,$06,$06,$06,$3E,$00
|
||||
byte = $00,$02,$04,$08,$10,$20,$00,$00,$3E,$30,$30,$30,$30,$30,$3E,$00
|
||||
byte = $00,$00,$08,$14,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7F
|
||||
byte = $04,$08,$10,$00,$00,$00,$00,$00,$00,$00,$1C,$20,$3C,$22,$3C,$00
|
||||
byte = $02,$02,$1E,$22,$22,$22,$1E,$00,$00,$00,$3C,$02,$02,$02,$3C,$00
|
||||
byte = $20,$20,$3C,$22,$22,$22,$3C,$00,$00,$00,$1C,$22,$3E,$02,$3C,$00
|
||||
byte = $18,$24,$04,$1E,$04,$04,$04,$00,$00,$00,$1C,$22,$22,$3C,$20,$1C
|
||||
byte = $02,$02,$1E,$22,$22,$22,$22,$00,$08,$00,$0C,$08,$08,$08,$1C,$00
|
||||
byte = $10,$00,$18,$10,$10,$10,$12,$0C,$02,$02,$22,$12,$0E,$12,$22,$00
|
||||
byte = $0C,$08,$08,$08,$08,$08,$1C,$00,$00,$00,$36,$2A,$2A,$22,$22,$00
|
||||
byte = $00,$00,$1E,$22,$22,$22,$22,$00,$00,$00,$1C,$22,$22,$22,$1C,$00
|
||||
byte = $00,$00,$1E,$22,$22,$1E,$02,$02,$00,$00,$3C,$22,$22,$3C,$20,$20
|
||||
byte = $00,$00,$3A,$06,$02,$02,$02,$00,$00,$00,$3C,$02,$1C,$20,$1E,$00
|
||||
byte = $04,$04,$1E,$04,$04,$24,$18,$00,$00,$00,$22,$22,$22,$32,$2C,$00
|
||||
byte = $00,$00,$22,$22,$22,$14,$08,$00,$00,$00,$22,$22,$2A,$2A,$36,$00
|
||||
byte = $00,$00,$22,$14,$08,$14,$22,$00,$00,$00,$22,$22,$22,$3C,$20,$1C
|
||||
byte = $00,$00,$3E,$10,$08,$04,$3E,$00,$38,$0C,$0C,$06,$0C,$0C,$38,$00
|
||||
byte = $08,$08,$08,$08,$08,$08,$08,$08,$0E,$18,$18,$30,$18,$18,$0E,$00
|
||||
byte = $00,$2C,$1A,$00,$00,$00,$00,$00,$00,$2A,$14,$2A,$14,$2A,$00,$00
|
||||
//
|
||||
// Print string with HGR tile library
|
||||
//
|
||||
export def hgrPutStr(x, y, strptr)#0
|
||||
tileDrawStr(x, y, strptr + 1, ^strptr, @hgrFont + 1024) // Offset into regular char
|
||||
end
|
||||
done
|
@@ -16,7 +16,40 @@ const hgr1 = $2000
|
||||
const hgr2 = $4000
|
||||
const page1 = 0
|
||||
const page2 = 1
|
||||
//
|
||||
// Apple III hardware constants.
|
||||
//
|
||||
const ENV_REG = $FFDF
|
||||
//
|
||||
// Screen addresses
|
||||
//
|
||||
word hgrbuff[] = hgr1, hgr2
|
||||
//word hgrscan[] = $0000,$0400,$0800,$0C00,$1000,$1400,$1800,$1C00
|
||||
//word = $0080,$0480,$0880,$0C80,$1080,$1480,$1880,$1C80
|
||||
//word = $0100,$0500,$0900,$0D00,$1100,$1500,$1900,$1D00
|
||||
//word = $0180,$0580,$0980,$0D80,$1180,$1580,$1980,$1D80
|
||||
//word = $0200,$0600,$0A00,$0E00,$1200,$1600,$1A00,$1E00
|
||||
//word = $0280,$0680,$0A80,$0E80,$1280,$1680,$1A80,$1E80
|
||||
//word = $0300,$0700,$0B00,$0F00,$1300,$1700,$1B00,$1F00
|
||||
//word = $0380,$0780,$0B80,$0F80,$1380,$1780,$1B80,$1F80
|
||||
//word = $0028,$0428,$0828,$0C28,$1028,$1428,$1828,$1C28
|
||||
//word = $00A8,$04A8,$08A8,$0CA8,$10A8,$14A8,$18A8,$1CA8
|
||||
//word = $0128,$0528,$0928,$0D28,$1128,$1528,$1928,$1D28
|
||||
//word = $01A8,$05A8,$09A8,$0DA8,$11A8,$15A8,$19A8,$1DA8
|
||||
//word = $0228,$0628,$0A28,$0E28,$1228,$1628,$1A28,$1E28
|
||||
//word = $02A8,$06A8,$0AA8,$0EA8,$12A8,$16A8,$1AA8,$1EA8
|
||||
//word = $0328,$0728,$0B28,$0F28,$1328,$1728,$1B28,$1F28
|
||||
//word = $03A8,$07A8,$0BA8,$0FA8,$13A8,$17A8,$1BA8,$1FA8
|
||||
//word = $0050,$0450,$0850,$0C50,$1050,$1450,$1850,$1C50
|
||||
//word = $00D0,$04D0,$08D0,$0CD0,$10D0,$14D0,$18D0,$1CD0
|
||||
//word = $0150,$0550,$0950,$0D50,$1150,$1550,$1950,$1D50
|
||||
//word = $01D0,$05D0,$09D0,$0DD0,$11D0,$15D0,$19D0,$1DD0
|
||||
//word = $0250,$0650,$0A50,$0E50,$1250,$1650,$1A50,$1E50
|
||||
//word = $02D0,$06D0,$0AD0,$0ED0,$12D0,$16D0,$1AD0,$1ED0
|
||||
//word = $0350,$0750,$0B50,$0F50,$1350,$1750,$1B50,$1F50
|
||||
//word = $03D0,$07D0,$0BD0,$0FD0,$13D0,$17D0,$1BD0,$1FD0
|
||||
//word hmask = $8081,$8082,$8084,$8088,$8090,$80A0,$80C0
|
||||
//word = $8180,$8280,$8480,$8880,$9080,$A080,$C080
|
||||
byte hgrscanl[]= $00,$00,$00,$00,$00,$00,$00,$00
|
||||
byte = $80,$80,$80,$80,$80,$80,$80,$80
|
||||
byte = $00,$00,$00,$00,$00,$00,$00,$00
|
||||
@@ -65,36 +98,10 @@ byte = $02,$06,$0A,$0E,$12,$16,$1A,$1E
|
||||
byte = $02,$06,$0A,$0E,$12,$16,$1A,$1E
|
||||
byte = $03,$07,$0B,$0F,$13,$17,$1B,$1F
|
||||
byte = $03,$07,$0B,$0F,$13,$17,$1B,$1F
|
||||
word //hgrscan[] = $0000,$0400,$0800,$0C00,$1000,$1400,$1800,$1C00
|
||||
word // = $0080,$0480,$0880,$0C80,$1080,$1480,$1880,$1C80
|
||||
word // = $0100,$0500,$0900,$0D00,$1100,$1500,$1900,$1D00
|
||||
word // = $0180,$0580,$0980,$0D80,$1180,$1580,$1980,$1D80
|
||||
word // = $0200,$0600,$0A00,$0E00,$1200,$1600,$1A00,$1E00
|
||||
word // = $0280,$0680,$0A80,$0E80,$1280,$1680,$1A80,$1E80
|
||||
word // = $0300,$0700,$0B00,$0F00,$1300,$1700,$1B00,$1F00
|
||||
word // = $0380,$0780,$0B80,$0F80,$1380,$1780,$1B80,$1F80
|
||||
word // = $0028,$0428,$0828,$0C28,$1028,$1428,$1828,$1C28
|
||||
word // = $00A8,$04A8,$08A8,$0CA8,$10A8,$14A8,$18A8,$1CA8
|
||||
word // = $0128,$0528,$0928,$0D28,$1128,$1528,$1928,$1D28
|
||||
word // = $01A8,$05A8,$09A8,$0DA8,$11A8,$15A8,$19A8,$1DA8
|
||||
word // = $0228,$0628,$0A28,$0E28,$1228,$1628,$1A28,$1E28
|
||||
word // = $02A8,$06A8,$0AA8,$0EA8,$12A8,$16A8,$1AA8,$1EA8
|
||||
word // = $0328,$0728,$0B28,$0F28,$1328,$1728,$1B28,$1F28
|
||||
word // = $03A8,$07A8,$0BA8,$0FA8,$13A8,$17A8,$1BA8,$1FA8
|
||||
word // = $0050,$0450,$0850,$0C50,$1050,$1450,$1850,$1C50
|
||||
word // = $00D0,$04D0,$08D0,$0CD0,$10D0,$14D0,$18D0,$1CD0
|
||||
word // = $0150,$0550,$0950,$0D50,$1150,$1550,$1950,$1D50
|
||||
word // = $01D0,$05D0,$09D0,$0DD0,$11D0,$15D0,$19D0,$1DD0
|
||||
word // = $0250,$0650,$0A50,$0E50,$1250,$1650,$1A50,$1E50
|
||||
word // = $02D0,$06D0,$0AD0,$0ED0,$12D0,$16D0,$1AD0,$1ED0
|
||||
word // = $0350,$0750,$0B50,$0F50,$1350,$1750,$1B50,$1F50
|
||||
word // = $03D0,$07D0,$0BD0,$0FD0,$13D0,$17D0,$1BD0,$1FD0
|
||||
word hcolor[] = $0000,$552A,$2A55,$7F7F,$8080,$D5AA,$AAD5,$FFFF
|
||||
word hmask = $8081,$8082,$8084,$8088,$8090,$80A0,$80C0
|
||||
word = $8180,$8280,$8480,$8880,$9080,$A080,$C080
|
||||
byte hbmask = $81,$82,$84,$88,$90,$A0,$C0
|
||||
byte hlmask = $FF,$FE,$FC,$F8,$F0,$E0,$C0
|
||||
byte hrmask = $81,$83,$87,$8F,$9F,$BF,$FF
|
||||
word hcolor[] = $0000,$552A,$2A55,$7F7F,$8080,$D5AA,$AAD5,$FFFF
|
||||
word curhclr
|
||||
byte drawpage = 1
|
||||
word drawbuff = hgr2
|
||||
@@ -543,8 +550,6 @@ end
|
||||
asm _hgrPlotC
|
||||
LDA $1000,Y ; HBMASK
|
||||
STA TMPL
|
||||
EOR #$FF
|
||||
STA TMPH
|
||||
LDA ESTKL+1,X ; HORIZ OFFSET
|
||||
CMP #40
|
||||
BCS +
|
||||
@@ -553,12 +558,10 @@ asm _hgrPlotC
|
||||
end
|
||||
asm _hgrPlotD
|
||||
LDA $2000,Y ; CURHCLR
|
||||
AND TMPL
|
||||
STA TMPL
|
||||
LDY ESTKL+1,X ; HORIZ OFFSET
|
||||
LDA (DST),Y
|
||||
AND TMPH
|
||||
ORA TMPL
|
||||
EOR (DST),Y
|
||||
AND TMPL
|
||||
EOR (DST),Y
|
||||
STA (DST),Y
|
||||
+ INX
|
||||
INX
|
||||
@@ -601,14 +604,59 @@ asm _hgrXorPlotC
|
||||
end
|
||||
asm _hgrXorPlotD
|
||||
LDA $2000,Y ; CURHCLR
|
||||
AND TMPL
|
||||
LDY ESTKL+1,X ; HORIZ OFFSET
|
||||
AND TMPL
|
||||
EOR (DST),Y
|
||||
STA (DST),Y
|
||||
+ INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def hgrOrPlot(x, y)#0
|
||||
// word pixptr
|
||||
// byte ofst, pixofst, pmask
|
||||
//
|
||||
// ofst, pixofst = divmod7(x)
|
||||
// pixptr = hgrscan[y] + drawbuff + ofst
|
||||
// pmask = hbmask[pixofst]
|
||||
// ^pixptr = ^pixptr | (curhclr.[ofst & 1] & pmask)
|
||||
//end
|
||||
export asm hgrOrPlot(x, y)#0
|
||||
LDY ESTKL+0,X ; Y COORD
|
||||
CPY #192
|
||||
BCS +
|
||||
end
|
||||
asm _hgrOrPlotA
|
||||
LDA $8000,Y ; HGRSCANL
|
||||
STA DSTL
|
||||
LDA $1000 ; DRAWBUFFH
|
||||
ORA $9000,Y ; HGRSCANH
|
||||
STA DSTH
|
||||
INX
|
||||
end
|
||||
asm _hgrOrPlotB
|
||||
JSR 1000 ; DIVMOD7
|
||||
LDY ESTKL+0,X ; PIXEL OFFSET
|
||||
end
|
||||
asm _hgrOrPlotC
|
||||
LDA $1000,Y ; HBMASK
|
||||
STA TMPL
|
||||
LDA ESTKL+1,X ; HORIZ OFFSET
|
||||
CMP #40
|
||||
BCS +
|
||||
AND #$01
|
||||
TAY
|
||||
end
|
||||
asm _hgrOrPlotD
|
||||
LDA $2000,Y ; CURHCLR
|
||||
LDY ESTKL+1,X ; HORIZ OFFSET
|
||||
AND TMPL
|
||||
ORA (DST),Y
|
||||
STA (DST),Y
|
||||
+ INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def hgrHLin(x1, x2, y)#0
|
||||
// word pixptr, x
|
||||
// byte lofst, lpixofst, lpmask
|
||||
@@ -668,6 +716,8 @@ end
|
||||
asm _hgrHLinD
|
||||
LDA $1000,Y ; HRMASK
|
||||
STA TMPH
|
||||
LDY ESTKL+1,X ; RIGHT HORIZ OFFSET
|
||||
STY IPY ; STEAL THIS ZP FOR A MOMENT
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
@@ -679,62 +729,163 @@ end
|
||||
asm _hgrHLinF
|
||||
LDA $1000,Y ; HLMASK
|
||||
STA TMPL
|
||||
LDA ESTKL+1,X ; LEFT HORIZ OFFSET
|
||||
TAY
|
||||
LDY ESTKL+1,X ; LEFT HORIZ OFFSET
|
||||
TYA
|
||||
LSR
|
||||
BCS +
|
||||
end
|
||||
asm _hgrHLinG
|
||||
LDA $2000 ; CURHCLRL
|
||||
STA SRCL
|
||||
LDA $2001 ; CURHCLRH
|
||||
STA SRCH
|
||||
LDA $2000 ; CURHCLRL
|
||||
STA SRCL
|
||||
BCC ++
|
||||
+ LDA $2000 ; CURHCLRL
|
||||
STA SRCH
|
||||
LDA $2001 ; CURHCLRH
|
||||
STA SRCL
|
||||
++ TYA
|
||||
CMP ESTKL-1,X ; RIGHT HORIZ OFFSET
|
||||
++ CPY IPY ; RIGHT HORIZ OFFSET
|
||||
BNE +
|
||||
LDA TMPL
|
||||
EOR (DST),Y
|
||||
AND TMPL
|
||||
AND TMPH
|
||||
STA TMPL
|
||||
AND SRCL
|
||||
STA TMPH
|
||||
LDA TMPL
|
||||
EOR #$FF
|
||||
AND (DST),Y
|
||||
ORA TMPH
|
||||
EOR (DST),Y
|
||||
STA (DST),Y
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
+ LDA SRCL ; CURHCLR
|
||||
+ EOR (DST),Y
|
||||
AND TMPL
|
||||
STA ESTKL+0,X
|
||||
LDA TMPL
|
||||
EOR #$FF
|
||||
AND (DST),Y
|
||||
ORA ESTKL+0,X
|
||||
EOR (DST),Y
|
||||
- STA (DST),Y
|
||||
INY
|
||||
TYA
|
||||
CMP ESTKL-1,X ; RIGHT HORIZ OFFSET
|
||||
LDA SRCH
|
||||
INY
|
||||
CPY IPY ; RIGHT HORIZ OFFSET
|
||||
BCS +
|
||||
STA (DST),Y
|
||||
INY
|
||||
TYA
|
||||
CMP ESTKL-1,X ; RIGHT HORIZ OFFSET
|
||||
LDA SRCL
|
||||
INY
|
||||
CPY IPY ; RIGHT HORIZ OFFSET
|
||||
BCC -
|
||||
+ EOR (DST),Y
|
||||
AND TMPH
|
||||
EOR (DST),Y
|
||||
STA (DST),Y
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def hgrXorHLin(x1, x2, y)#0
|
||||
// word pixptr, x
|
||||
// byte lofst, lpixofst, lpmask
|
||||
// byte rofst, rpixofst, rpmask
|
||||
//
|
||||
// if x1 == x2
|
||||
// hgrPlot(x1, y)
|
||||
// else
|
||||
// lofst, lpixofst = divmod7(x1)
|
||||
// pixptr = hgrscan[y] + drawbuff + lofst
|
||||
// rofst, rpixofst = divmod7(x2)
|
||||
// lpmask = hlmask[lpixofst]
|
||||
// rpmask = hrmask[rpixofst]
|
||||
// if lofst == rofst
|
||||
// lpmask = lpmask & rpmask
|
||||
// ^pixptr = ^pixptr ^ (curhclr.[pixptr.0 & 1] & lpmask)
|
||||
// else
|
||||
// ^pixptr = ^pixptr ^ (curhclr.[pixptr.0 & 1] & lpmask)
|
||||
// pixptr++
|
||||
// for x = lofst + 1 to rofst - 1
|
||||
// ^pixptr = ^pixptr ^ curhclr.[pixptr.0 & 1]
|
||||
// pixptr++
|
||||
// next
|
||||
// ^pixptr = ^pixptr ^ (curhclr.[pixptr.0 & 1] & rpmask)
|
||||
// fin
|
||||
// fin
|
||||
//end
|
||||
export asm hgrXorHLin(x1, x2, y)#0
|
||||
LDA ESTKL+1
|
||||
CMP ESTKL+2
|
||||
BNE +
|
||||
LDA ESTKH+1
|
||||
CMP ESTKH+2
|
||||
BNE +
|
||||
end
|
||||
asm _hgrXHLinA
|
||||
JSR $F000
|
||||
INX
|
||||
RTS
|
||||
+ LDY ESTKL+0,X ; Y COORD
|
||||
end
|
||||
asm _hgrXHLinB
|
||||
LDA $8000,Y ; HGRSCANL
|
||||
STA DSTL
|
||||
LDA $1000 ; DRAWBUFFH
|
||||
ORA $9000,Y ; HGRSCANH
|
||||
STA DSTH
|
||||
LDA ESTKL+1,X
|
||||
STA ESTKL+0,X
|
||||
LDA ESTKH+1,X
|
||||
STA ESTKH+0,X
|
||||
end
|
||||
asm _hgrXHLinC
|
||||
JSR 1000 ; DIVMOD7
|
||||
LDY ESTKL+0,X ; RIGHT PIXEL OFFSET
|
||||
end
|
||||
asm _hgrXHLinD
|
||||
LDA $1000,Y ; HRMASK
|
||||
STA TMPH
|
||||
LDY ESTKL+1,X ; RIGHT HORIZ OFFSET
|
||||
STY IPY ; STEAL THIS ZP FOR A MOMENT
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
end
|
||||
asm _hgrXHLinE
|
||||
JSR 1000 ; DIVMOD7
|
||||
LDY ESTKL+0,X ; LEFT PIXEL OFFSET
|
||||
end
|
||||
asm _hgrXHLinF
|
||||
LDA $1000,Y ; HLMASK
|
||||
STA TMPL
|
||||
LDY ESTKL+1,X ; LEFT HORIZ OFFSET
|
||||
TYA
|
||||
LSR
|
||||
BCS +
|
||||
end
|
||||
asm _hgrXHLinG
|
||||
LDA $2001 ; CURHCLRH
|
||||
STA SRCH
|
||||
LDA $2000 ; CURHCLRH
|
||||
STA SRCL
|
||||
BCC ++
|
||||
+ LDA $2000 ; CURHCLRL
|
||||
STA SRCH
|
||||
LDA $2001 ; CURHCLRH
|
||||
STA SRCL
|
||||
++ CPY IPY ; RIGHT HORIZ OFFSET
|
||||
BNE +
|
||||
AND TMPL
|
||||
AND TMPH
|
||||
EOR (DST),Y
|
||||
STA (DST),Y
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
+ AND TMPL
|
||||
- EOR (DST),Y
|
||||
STA (DST),Y
|
||||
LDA SRCH
|
||||
INY
|
||||
CPY IPY ; RIGHT HORIZ OFFSET
|
||||
BCS +
|
||||
EOR (DST),Y
|
||||
STA (DST),Y
|
||||
LDA SRCL
|
||||
INY
|
||||
CPY IPY ; RIGHT HORIZ OFFSET
|
||||
BCC -
|
||||
+ AND TMPH
|
||||
STA ESTKL+0,X
|
||||
LDA TMPH
|
||||
EOR #$FF
|
||||
AND (DST),Y
|
||||
ORA ESTKL+0,X
|
||||
EOR (DST),Y
|
||||
STA (DST),Y
|
||||
INX
|
||||
INX
|
||||
@@ -800,8 +951,67 @@ asm _hgrVLinC
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def hgrXVlin(y1, y2, x)#0
|
||||
// word pixptr, y, ofst
|
||||
// byte pixofst, pmask, cmask
|
||||
//
|
||||
// if y1 == y2
|
||||
// hgrXorPlot(x, y1)
|
||||
// else
|
||||
// ofst, pixofst = divmod7(x)
|
||||
// ofst = ofst + drawbuff
|
||||
// pmask = hbmask[pixofst]
|
||||
// cmask = curhclr.[ofst & 1] & pmask
|
||||
// pmask = ~pmask
|
||||
// for y = y1 to y2
|
||||
// pixptr = hgrscan[y] + ofst
|
||||
// ^pixptr = ^pixptr ^ cmask
|
||||
// next
|
||||
// fin
|
||||
//end
|
||||
export asm hgrXorVlin(y1, y2, x)#0
|
||||
JSR 1000 ; DIVMOD7
|
||||
LDY ESTKL+0,X ; PIXEL OFFSET
|
||||
end
|
||||
asm _hgrXVLinA
|
||||
LDA $1000,Y ; HBMASK
|
||||
STA TMPL
|
||||
EOR #$FF
|
||||
STA TMPH
|
||||
LDA ESTKL+1,X ; HORIZ OFFSET
|
||||
AND #$01
|
||||
TAY
|
||||
end
|
||||
asm _hgrXVLinB
|
||||
LDA $2000,Y ; CURHCLR
|
||||
AND TMPL
|
||||
STA TMPL
|
||||
LDY ESTKL+3,X ; Y1 COORD
|
||||
end
|
||||
asm _hgrXVLinC
|
||||
- LDA $8000,Y ; HGRSCANL
|
||||
STA DSTL
|
||||
LDA $1000 ; DRAWBUFFH
|
||||
ORA $9000,Y ; HGRSCANH
|
||||
STA DSTH
|
||||
LDY ESTKL+1,X ; HORIZ OFFSET
|
||||
LDA TMPL
|
||||
EOR (DST),Y
|
||||
STA (DST),Y
|
||||
LDY ESTKL+3,X ; Y1 COORD
|
||||
TYA
|
||||
INY
|
||||
STY ESTKL+3,X ; Y1 COORD
|
||||
CMP ESTKL+2,X ; Y2 COORD
|
||||
BNE -
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//
|
||||
// BLT scanline of pixmap
|
||||
// Masked BLT scanline of pixmap
|
||||
//
|
||||
asm scanBLT(x, y, w, srcptr)#0
|
||||
LDA ESTKL+0,X ; SRC PTR
|
||||
@@ -841,7 +1051,7 @@ asm _scanBLTB
|
||||
JSR $D000 ; HPLOT
|
||||
BEQ ++
|
||||
BNE ++
|
||||
+ JSR $E000 ; HPLOTX
|
||||
+ JSR $E000 ; HPLOTOR
|
||||
++ INC ESTKL+3,X ; X COORDL
|
||||
BNE +
|
||||
INC ESTKH+3,X ; X COORDH
|
||||
@@ -878,7 +1088,7 @@ asm _scanBLTD
|
||||
JSR $D000 ; HPLOT
|
||||
BEQ ++
|
||||
BNE ++
|
||||
+ JSR $E000 ; HPLOTX
|
||||
+ JSR $E000 ; HPLOTOR
|
||||
++ INC ESTKL+3,X ; X COORDL
|
||||
BNE +
|
||||
INC ESTKH+3,X ; X COORDH
|
||||
@@ -893,7 +1103,7 @@ BLTDONE INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
export def hgrRect(x1, x2, y1, y2)#0
|
||||
export def hgrRect(x1, y1, x2, y2)#0
|
||||
word y
|
||||
|
||||
if x1 == x2
|
||||
@@ -904,6 +1114,17 @@ export def hgrRect(x1, x2, y1, y2)#0
|
||||
next
|
||||
fin
|
||||
end
|
||||
export def hgrXorRect(x1, y1, x2, y2)#0
|
||||
word y
|
||||
|
||||
if x1 == x2
|
||||
hgrXorVLin(y1, y2, x1)
|
||||
else
|
||||
for y = y1 to y2
|
||||
hgrXorHLin(x1, x2, y)
|
||||
next
|
||||
fin
|
||||
end
|
||||
export def hgrBLT(x, y, w, h, srcptr)#0
|
||||
word i, j
|
||||
word saveclr
|
||||
@@ -917,7 +1138,7 @@ export def hgrBLT(x, y, w, h, srcptr)#0
|
||||
// if i & 1
|
||||
// hgrColor(c)
|
||||
// if c & $08
|
||||
// hgrXorPlot(x + i, j)
|
||||
// hgrOrPlot(x + i, j)
|
||||
// else
|
||||
// hgrPlot(x + i, j)
|
||||
// fin
|
||||
@@ -934,22 +1155,29 @@ export def hgrBLT(x, y, w, h, srcptr)#0
|
||||
next
|
||||
curhclr = saveclr
|
||||
end
|
||||
export def hgrMode#1
|
||||
memset(hgr1, 0, $2000) // Clear HGR page 1
|
||||
^showpage1
|
||||
^showfull
|
||||
^showhires
|
||||
^showgraphics
|
||||
drawpage = 1
|
||||
drawbuff = hgrbuff[1]
|
||||
return 1
|
||||
end
|
||||
export def txtMode#0
|
||||
export def hgrMode(mode)#1
|
||||
if mode
|
||||
//
|
||||
// Set HGR mode
|
||||
//
|
||||
memset(hgr1, 0, $2000) // Clear HGR page 1
|
||||
^showpage1
|
||||
^showfull
|
||||
^showhires
|
||||
^showgraphics
|
||||
drawpage = 1
|
||||
drawbuff = hgrbuff[1]
|
||||
return 1
|
||||
fin
|
||||
//
|
||||
// Show text mode
|
||||
//
|
||||
^showpage1
|
||||
^showtext
|
||||
return 0
|
||||
end
|
||||
export def hgrClear#0
|
||||
memset(drawbuff, curhclr, $2000) // Clear HGR page 1
|
||||
memset(drawbuff, curhclr, drawbuff) // Clear current HGR page
|
||||
end
|
||||
//
|
||||
// Set display page, return other page
|
||||
@@ -971,6 +1199,13 @@ export def hgrDrawBuf(page)#1
|
||||
return drawpage
|
||||
end
|
||||
//
|
||||
// Machine compatibility check
|
||||
//
|
||||
if MACHID & MACHID_MODEL == MACHID_III or MACHID & MACHID_MODEL == MACHID_I
|
||||
puts("Apple II compatible only.\n")
|
||||
return -1
|
||||
fin
|
||||
//
|
||||
// Assembly fixups
|
||||
//
|
||||
hgrCopyDst:1 = @clipsrc
|
||||
@@ -1005,6 +1240,12 @@ _hgrXorPlotA:9 = @hgrscanh
|
||||
_hgrXorPlotB:1 = @divmod7
|
||||
_hgrXorPlotC:1 = @hbmask
|
||||
_hgrXorPlotD:1 = @curhclr
|
||||
_hgrOrPlotA:1 = @hgrscanl
|
||||
_hgrOrPlotA:6 = @drawbuff.1
|
||||
_hgrOrPlotA:9 = @hgrscanh
|
||||
_hgrOrPlotB:1 = @divmod7
|
||||
_hgrOrPlotC:1 = @hbmask
|
||||
_hgrOrPlotD:1 = @curhclr
|
||||
_hgrHLinA:1 = @hgrPlot
|
||||
_hgrHLinB:1 = @hgrscanl
|
||||
_hgrHLinB:6 = @drawbuff.1
|
||||
@@ -1013,24 +1254,42 @@ _hgrHLinC:1 = @divmod7
|
||||
_hgrHLinD:1 = @hrmask
|
||||
_hgrHLinE:1 = @divmod7
|
||||
_hgrHLinF:1 = @hlmask
|
||||
_hgrHLinG:1 = @curhclr
|
||||
_hgrHLinG:6 = @curhclr.1
|
||||
_hgrHLinG:13 = @curhclr.1
|
||||
_hgrHLinG:18 = @curhclr
|
||||
_hgrHLinG:1 = @curhclr.1
|
||||
_hgrHLinG:6 = @curhclr
|
||||
_hgrHLinG:13 = @curhclr
|
||||
_hgrHLinG:18 = @curhclr.1
|
||||
_hgrXHLinA:1 = @hgrXorPlot
|
||||
_hgrXHLinB:1 = @hgrscanl
|
||||
_hgrXHLinB:6 = @drawbuff.1
|
||||
_hgrXHLinB:9 = @hgrscanh
|
||||
_hgrXHLinC:1 = @divmod7
|
||||
_hgrXHLinD:1 = @hrmask
|
||||
_hgrXHLinE:1 = @divmod7
|
||||
_hgrXHLinF:1 = @hlmask
|
||||
_hgrXHLinG:1 = @curhclr.1
|
||||
_hgrXHLinG:6 = @curhclr
|
||||
_hgrXHLinG:13 = @curhclr
|
||||
_hgrXHLinG:18 = @curhclr.1
|
||||
hgrVLin:1 = @divmod7
|
||||
_hgrVLinA:1 = @hbmask
|
||||
_hgrVLinB:1 = @curhclr
|
||||
_hgrVLinC:1 = @hgrscanl
|
||||
_hgrVLinC:6 = @drawbuff.1
|
||||
_hgrVLinC:9 = @hgrscanh
|
||||
hgrXorVLin:1 = @divmod7
|
||||
_hgrXVLinA:1 = @hbmask
|
||||
_hgrXVLinB:1 = @curhclr
|
||||
_hgrXVLinC:1 = @hgrscanl
|
||||
_hgrXVLinC:6 = @drawbuff.1
|
||||
_hgrXVLinC:9 = @hgrscanh
|
||||
hgrColor:7 = @hcolor
|
||||
hgrColor:10 = @curhclr
|
||||
hgrColor:13 = @hcolor.1
|
||||
hgrColor:16 = @curhclr.1
|
||||
_scanBLTA:1 = @hgrColor
|
||||
_scanBLTB:1 = @hgrPlot
|
||||
_scanBLTB:8 = @hgrXorPlot
|
||||
_scanBLTB:8 = @hgrOrPlot
|
||||
_scanBLTC:1 = @hgrColor
|
||||
_scanBLTD:1 = @hgrPlot
|
||||
_scanBLTD:8 = @hgrXorPlot
|
||||
_scanBLTD:8 = @hgrOrPlot
|
||||
done
|
||||
|
@@ -107,8 +107,10 @@ BLTDONE INX
|
||||
end
|
||||
def spriteBLTMask(x, y, w, h, srcptr)#0
|
||||
word i, j
|
||||
byte pitch
|
||||
byte c
|
||||
|
||||
pitch = (w + 1) / 2
|
||||
for j = y to y + h - 1
|
||||
scanMask(x, j, w, srcptr)
|
||||
// for i = 0 to w - 1
|
||||
@@ -120,71 +122,72 @@ def spriteBLTMask(x, y, w, h, srcptr)#0
|
||||
// fin
|
||||
// hgrPlot(x + i, j)
|
||||
// next
|
||||
srcptr = srcptr + (w + 1) / 2
|
||||
srcptr = srcptr + pitch
|
||||
next
|
||||
end
|
||||
export def spriteCompile(w, h, xcenter, ycenter, srcptr)#1
|
||||
var sprtptr, bytewidth, spritesize, i
|
||||
|
||||
sprtptr = heapalloc(t_sprite)
|
||||
bytewidth = (w + 7) / 7 + 1
|
||||
if not sprtptr; return 0; fin
|
||||
bytewidth = (w + 13) / 7
|
||||
sprtptr->s_pitch = bytewidth
|
||||
spritesize = bytewidth * h
|
||||
sprtptr=>s_size = spritesize
|
||||
sprtptr->s_height = h
|
||||
sprtptr->s_xcenter = xcenter
|
||||
sprtptr->s_ycenter = ycenter
|
||||
sprtptr=>s_under[0] = heapalloc(spritesize)
|
||||
sprtptr=>s_under[1] = heapalloc(spritesize)
|
||||
sprtptr=>s_under[0] = 0
|
||||
sprtptr=>s_under[1] = 0
|
||||
for i = 0 to 13
|
||||
sprtptr=>s_map[i] = heapalloc(spritesize)
|
||||
sprtptr=>s_mask[i] = heapalloc(spritesize)
|
||||
if not sprtptr=>s_map[i] or not sprtptr=>s_mask[i]
|
||||
heaprelease(sprtptr)
|
||||
return 0
|
||||
fin
|
||||
hgrColor(7)
|
||||
hgrRect(0, 0, w + 21, h - 1)
|
||||
spriteBLTMask(i, 0, w, h, srcptr)
|
||||
hgrCopyDst(i > 6 ?? 1 :: 0, 0, bytewidth, h, sprtptr=>s_mask[i])
|
||||
hgrColor(0)
|
||||
hgrRect(0, w + 21, 0, h - 1)
|
||||
hgrBLT(i, 0, w, h, srcptr)
|
||||
hgrCopyDst(i > 6 ?? 1 :: 0, 0, bytewidth, h, sprtptr=>s_map[i])
|
||||
hgrColor(3)
|
||||
hgrRect(0, w + 21, h, h * 2 - 1)
|
||||
spriteBLTMask(i, h, w, h, srcptr)
|
||||
hgrCopyDst(i > 6 ?? 1 :: 0, h, bytewidth, h, sprtptr=>s_mask[i])
|
||||
hgrRect(0, h, w + 21, h * 2 - 1)
|
||||
hgrBLT(i, h, w, h, srcptr)
|
||||
hgrCopyDst(i > 6 ?? 1 :: 0, h, bytewidth, h, sprtptr=>s_map[i])
|
||||
next
|
||||
return sprtptr
|
||||
end
|
||||
export def spriteDup(sprtsrc)#1
|
||||
var sprtdup, spritesize
|
||||
var sprtdup
|
||||
byte i
|
||||
|
||||
sprtdup = heapalloc(t_sprite)
|
||||
spritesize = sprtsrc=>s_size
|
||||
sprtdup=>s_size = spritesize
|
||||
sprtdup->s_pitch = sprtsrc->s_pitch
|
||||
sprtdup->s_height = sprtsrc->s_height
|
||||
sprtdup->s_height = sprtsrc->s_height
|
||||
sprtdup->s_xcenter = sprtsrc->s_xcenter
|
||||
sprtdup->s_ycenter = sprtsrc->s_ycenter
|
||||
sprtdup=>s_under[0] = heapalloc(spritesize)
|
||||
sprtdup=>s_under[1] = heapalloc(spritesize)
|
||||
for i = 0 to 13
|
||||
sprtdup=>s_map[i] = sprtsrc=>s_map[i]
|
||||
sprtdup=>s_mask[i] = sprtsrc=>s_mask[i]
|
||||
next
|
||||
sprtdup = heapalloc(t_sprite)
|
||||
if not sprtdup; return 0; fin
|
||||
memcpy(sprtdup, sprtsrc, t_sprite)
|
||||
sprtdup=>s_under[0] = 0
|
||||
sprtdup=>s_under[1] = 0
|
||||
return sprtdup
|
||||
end
|
||||
export def spriteRead(filestr)#1
|
||||
var sprtptr, spritesize
|
||||
byte refnum, i
|
||||
|
||||
sprtptr = 0
|
||||
refnum = fileio:open(@filestr)
|
||||
sprtptr = heapalloc(t_sprite)
|
||||
if not sprtptr; return 0; fin
|
||||
refnum = fileio:open(filestr)
|
||||
if refnum
|
||||
sprtptr = heapalloc(t_sprite)
|
||||
if fileio:read(refnum, sprtptr, t_sprite) == t_sprite
|
||||
spritesize = sprtptr=>s_size
|
||||
sprtptr=>s_under[0] = heapalloc(spritesize)
|
||||
sprtptr=>s_under[1] = heapalloc(spritesize)
|
||||
sprtptr=>s_under[0] = 0
|
||||
sprtptr=>s_under[1] = 0
|
||||
for i = 0 to 13
|
||||
sprtptr=>s_map[i] = heapalloc(spritesize)
|
||||
sprtptr=>s_mask[i] = heapalloc(spritesize)
|
||||
if not sprtptr=>s_map[i] or not sprtptr=>s_mask[i]
|
||||
heaprelease(sprtptr)
|
||||
fileio:close(refnum)
|
||||
return 0
|
||||
fin
|
||||
fileio:read(refnum, sprtptr=>s_map[i], spritesize)
|
||||
fileio:read(refnum, sprtptr=>s_mask[i], spritesize)
|
||||
next
|
||||
@@ -193,6 +196,9 @@ export def spriteRead(filestr)#1
|
||||
sprtptr = 0
|
||||
fin
|
||||
fileio:close(refnum)
|
||||
else
|
||||
heaprelease(sprtptr)
|
||||
sprtptr = 0
|
||||
fin
|
||||
return sprtptr
|
||||
end
|
||||
@@ -200,9 +206,9 @@ export def spriteSave(filestr, sprtptr)#1
|
||||
var spritesize
|
||||
byte refnum, i
|
||||
|
||||
fileio:destroy(@filestr)
|
||||
if fileio:create(@filestr, $06, $0000) == FILE_ERR_OK
|
||||
refnum = fileio:open(@filestr)
|
||||
fileio:destroy(filestr)
|
||||
if fileio:create(filestr, $06, $0000) == FILE_ERR_OK
|
||||
refnum = fileio:open(filestr)
|
||||
if refnum
|
||||
if fileio:write(refnum, sprtptr, t_sprite) == t_sprite
|
||||
spritesize = sprtptr=>s_size
|
||||
@@ -230,12 +236,18 @@ export def spriteDraw(sprtptr)#0
|
||||
sprtptr=>s_undery[drawpage] = y
|
||||
pitch = sprtptr->s_pitch
|
||||
height = sprtptr->s_height
|
||||
if not sprtptr=>s_under[drawpage]
|
||||
sprtptr=>s_under[drawpage] = heapalloc(sprtptr=>s_size)
|
||||
if not sprtptr=>s_under[drawpage]; return; fin
|
||||
fin
|
||||
hgrCopyDst(ofst, y, pitch, height, sprtptr=>s_under[drawpage])
|
||||
hgrAndSrc( ofst, y, pitch, height, sprtptr=>s_mask[map])
|
||||
hgrXorSrc( ofst, y, pitch, height, sprtptr=>s_map[map])
|
||||
end
|
||||
export def spriteUnDraw(sprtptr)#0
|
||||
hgrCopySrc(sprtptr=>s_underofst[drawpage], sprtptr=>s_undery[drawpage], sprtptr->s_pitch, sprtptr->s_height, sprtptr=>s_under[drawpage])
|
||||
if sprtptr=>s_under[drawpage]
|
||||
hgrCopySrc(sprtptr=>s_underofst[drawpage], sprtptr=>s_undery[drawpage], sprtptr->s_pitch, sprtptr->s_height, sprtptr=>s_under[drawpage])
|
||||
fin
|
||||
end
|
||||
export def spriteDrawXor(sprtptr)#0
|
||||
byte map, pitch, height
|
||||
@@ -267,6 +279,18 @@ export def spritePosIndex(x, y, i)#0
|
||||
drawList[i]=>s_xpos = x - drawList[i]->s_xcenter
|
||||
fin
|
||||
end
|
||||
export def spriteUnDrawList#0
|
||||
byte i
|
||||
var undrawptr
|
||||
|
||||
undrawptr = undrawList[drawpage]
|
||||
for i = 15 downto 0
|
||||
if undrawptr=>[i]
|
||||
spriteUnDraw(undrawptr=>[i])
|
||||
undrawptr=>[i] = 0
|
||||
fin
|
||||
next
|
||||
end
|
||||
export def spriteDrawList#0
|
||||
byte i
|
||||
var undrawptr
|
||||
@@ -284,6 +308,18 @@ export def spriteDrawList#0
|
||||
next
|
||||
memcpy(undrawptr, @drawList, 16*2)
|
||||
end
|
||||
export def spriteUnDrawXorList#0
|
||||
byte i
|
||||
var undrawptr
|
||||
|
||||
undrawptr = undrawList[drawpage]
|
||||
for i = 0 to 15
|
||||
if undrawptr=>[i]
|
||||
spriteUnDrawXor(undrawptr=>[i])
|
||||
undrawptr=>[i] = 0
|
||||
fin
|
||||
next
|
||||
end
|
||||
export def spriteDrawXorList#0
|
||||
byte i
|
||||
var undrawptr
|
||||
@@ -315,8 +351,9 @@ export def spriteDel(i)#1
|
||||
drawList[i] = 0
|
||||
return sprtprev
|
||||
end
|
||||
export def spriteDrawBuf(page)#0
|
||||
export def spriteDrawBuf(page)#1
|
||||
drawpage = page & 1
|
||||
return drawpage
|
||||
end
|
||||
//
|
||||
// Assembly fixups
|
||||
|
435
src/libsrc/apple/hgrtile.pla
Normal file
435
src/libsrc/apple/hgrtile.pla
Normal file
@@ -0,0 +1,435 @@
|
||||
include "inc/cmdsys.plh"
|
||||
//
|
||||
// Hardware addresses
|
||||
//
|
||||
const showgraphics = $C050
|
||||
const showtext = $C051
|
||||
const showfull = $C052
|
||||
const showmix = $C053
|
||||
const showpage1 = $C054
|
||||
const showpage2 = $C055
|
||||
const showlores = $C056
|
||||
const showhires = $C057
|
||||
const keyboard = $C000
|
||||
const keystrobe = $C010
|
||||
const txt1 = $0400
|
||||
const txt2 = $0800
|
||||
const hgr1 = $2000
|
||||
const hgr2 = $4000
|
||||
const page1 = 0
|
||||
const page2 = 1
|
||||
|
||||
word txtbuff[] = txt1, txt2
|
||||
word hgrbuff[] = hgr1, hgr2
|
||||
//
|
||||
// Screen tile scanline addresses.
|
||||
//
|
||||
word[] rowaddr = $0000,$0080,$0100,$0180,$0200,$0280,$0300,$0380
|
||||
word = $0028,$00A8,$0128,$01A8,$0228,$02A8,$0328,$03A8
|
||||
word = $0050,$00D0,$0150,$01D0,$0250,$02D0,$0350,$03D0
|
||||
byte[] scanbttml = $00,$80,$00,$80,$00,$80,$00,$80
|
||||
byte = $28,$A8,$28,$A8,$28,$A8,$28,$A8
|
||||
byte = $50,$D0,$50,$D0,$50,$D0,$50,$D0
|
||||
byte[] scanbttmh = $1C,$1C,$1D,$1D,$1E,$1E,$1F,$1F
|
||||
byte = $1C,$1C,$1D,$1D,$1E,$1E,$1F,$1F
|
||||
byte = $1C,$1C,$1D,$1D,$1E,$1E,$1F,$1F
|
||||
|
||||
byte hbmask = $81,$82,$84,$88,$90,$A0,$C0
|
||||
word hcolor[] = $0000,$552A,$2A55,$7F7F,$8080,$D5AA,$AAD5,$FFFF
|
||||
byte drawpage = 0
|
||||
word drawbuff = hgr1
|
||||
|
||||
asm tileInc#0
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
CURSH = $24
|
||||
CURSV = $25
|
||||
GBASL = $26
|
||||
GBASH = $27
|
||||
GBASE = GBASL
|
||||
TBASL = $28
|
||||
TBASH = $29
|
||||
TBASE = TBASL
|
||||
TBAS2L = $2A
|
||||
TBAS2H = $2B
|
||||
TBAS2E = TBAS2L
|
||||
end
|
||||
//export def tileDraw(x, y, tileptr)#0
|
||||
// var scrnptr
|
||||
//
|
||||
// scrnptr = (scanaddr[y] | drawbuff) + x
|
||||
// scrnptr->[$1C00] = tileptr->[7]
|
||||
// scrnptr->[$1800] = tileptr->[6]
|
||||
// scrnptr->[$1400] = tileptr->[5]
|
||||
// scrnptr->[$1000] = tileptr->[4]
|
||||
// scrnptr->[$0C00] = tileptr->[3]
|
||||
// scrnptr->[$0800] = tileptr->[2]
|
||||
// scrnptr->[$0400] = tileptr->[1]
|
||||
// scrnptr->[$0000] = tileptr->[0]
|
||||
//end
|
||||
export asm tileDraw(x, y, tileptr)#0
|
||||
LDA ESTKL+0,X ; TILEPTRL
|
||||
STA SRCL
|
||||
LDA ESTKH+0,X ; TILEPTRH
|
||||
STA SRCH
|
||||
LDY ESTKL+1,X ; Y COORD
|
||||
LDA ESTKL+2,X ; X COORD
|
||||
CLC
|
||||
end
|
||||
asm _tileDraw
|
||||
ADC $1000,Y ; SCANBTTML
|
||||
STA ESTKL+0,X ; USE ESTK AS POINTER
|
||||
LDA $3001 ; DRAWBUFFH
|
||||
ADC $2000,Y ; SCANBTTMH
|
||||
STA ESTKL+1,X
|
||||
LDY #$07 ; DRAW BOTTOM UP
|
||||
SEC
|
||||
- LDA (SRC),Y
|
||||
STA (ESTKL,X)
|
||||
LDA ESTKL+1,X
|
||||
SBC #$04
|
||||
STA ESTKL+1,X
|
||||
DEY
|
||||
BNE -
|
||||
LDA (SRC),Y
|
||||
STA (ESTKL,X)
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def tileXorDraw(x, y, tileptr)#0
|
||||
// var scrnptr
|
||||
//
|
||||
// scrnptr = (scanaddr[y] | drawbuff) + x
|
||||
// scrnptr->[$1C00] = tileptr->[7]
|
||||
// scrnptr->[$1800] = tileptr->[6]
|
||||
// scrnptr->[$1400] = tileptr->[5]
|
||||
// scrnptr->[$1000] = tileptr->[4]
|
||||
// scrnptr->[$0C00] = tileptr->[3]
|
||||
// scrnptr->[$0800] = tileptr->[2]
|
||||
// scrnptr->[$0400] = tileptr->[1]
|
||||
// scrnptr->[$0000] = tileptr->[0]
|
||||
//end
|
||||
export asm tileXorDraw(x, y, tileptr)#0
|
||||
LDA ESTKL+0,X ; TILEPTRL
|
||||
STA SRCL
|
||||
LDA ESTKH+0,X ; TILEPTRH
|
||||
STA SRCH
|
||||
LDY ESTKL+1,X ; Y COORD
|
||||
LDA ESTKL+2,X ; X COORD
|
||||
CLC
|
||||
end
|
||||
asm _tileXDraw
|
||||
ADC $1000,Y ; SCANBTTML
|
||||
STA ESTKL+0,X ; USE ESTK AS POINTER
|
||||
LDA $3001 ; DRAWBUFFH
|
||||
ADC $2000,Y ; SCANBTTMH
|
||||
STA ESTKL+1,X
|
||||
LDY #$07 ; DRAW BOTTOM UP
|
||||
SEC
|
||||
- LDA (SRC),Y
|
||||
EOR (ESTKL,X)
|
||||
STA (ESTKL,X)
|
||||
LDA ESTKL+1,X
|
||||
SBC #$04
|
||||
STA ESTKL+1,X
|
||||
DEY
|
||||
BNE -
|
||||
LDA (SRC),Y
|
||||
EOR (ESTKL,X)
|
||||
STA (ESTKL,X)
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def tileOrDraw(x, y, tileptr)#0
|
||||
// var scrnptr
|
||||
//
|
||||
// scrnptr = (scanaddr[y] | drawbuff) + x
|
||||
// scrnptr->[$1C00] = tileptr->[7]
|
||||
// scrnptr->[$1800] = tileptr->[6]
|
||||
// scrnptr->[$1400] = tileptr->[5]
|
||||
// scrnptr->[$1000] = tileptr->[4]
|
||||
// scrnptr->[$0C00] = tileptr->[3]
|
||||
// scrnptr->[$0800] = tileptr->[2]
|
||||
// scrnptr->[$0400] = tileptr->[1]
|
||||
// scrnptr->[$0000] = tileptr->[0]
|
||||
//end
|
||||
export asm tileOrDraw(x, y, tileptr)#0
|
||||
LDA ESTKL+0,X ; TILEPTRL
|
||||
STA SRCL
|
||||
LDA ESTKH+0,X ; TILEPTRH
|
||||
STA SRCH
|
||||
LDY ESTKL+1,X ; Y COORD
|
||||
LDA ESTKL+2,X ; X COORD
|
||||
CLC
|
||||
end
|
||||
asm _tileODraw
|
||||
ADC $1000,Y ; SCANBTTML
|
||||
STA ESTKL+0,X ; USE ESTK AS POINTER
|
||||
LDA $3001 ; DRAWBUFFH
|
||||
ADC $2000,Y ; SCANBTTMH
|
||||
STA ESTKL+1,X
|
||||
LDY #$07 ; DRAW BOTTOM UP
|
||||
SEC
|
||||
- LDA (SRC),Y
|
||||
ORA (ESTKL,X)
|
||||
STA (ESTKL,X)
|
||||
LDA ESTKL+1,X
|
||||
SBC #$04
|
||||
STA ESTKL+1,X
|
||||
DEY
|
||||
BNE -
|
||||
LDA (SRC),Y
|
||||
ORA (ESTKL,X)
|
||||
STA (ESTKL,X)
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def tileAndDraw(x, y, tileptr)#0
|
||||
// var scrnptr
|
||||
//
|
||||
// scrnptr = (scanaddr[y] | drawbuff) + x
|
||||
// scrnptr->[$1C00] = tileptr->[7]
|
||||
// scrnptr->[$1800] = tileptr->[6]
|
||||
// scrnptr->[$1400] = tileptr->[5]
|
||||
// scrnptr->[$1000] = tileptr->[4]
|
||||
// scrnptr->[$0C00] = tileptr->[3]
|
||||
// scrnptr->[$0800] = tileptr->[2]
|
||||
// scrnptr->[$0400] = tileptr->[1]
|
||||
// scrnptr->[$0000] = tileptr->[0]
|
||||
//end
|
||||
export asm tileAndDraw(x, y, tileptr)#0
|
||||
LDA ESTKL+0,X ; TILEPTRL
|
||||
STA SRCL
|
||||
LDA ESTKH+0,X ; TILEPTRH
|
||||
STA SRCH
|
||||
LDY ESTKL+1,X ; Y COORD
|
||||
LDA ESTKL+2,X ; X COORD
|
||||
CLC
|
||||
end
|
||||
asm _tileADraw
|
||||
ADC $1000,Y ; SCANBTTML
|
||||
STA ESTKL+0,X ; USE ESTK AS POINTER
|
||||
LDA $3001 ; DRAWBUFFH
|
||||
ADC $2000,Y ; SCANBTTMH
|
||||
STA ESTKL+1,X
|
||||
LDY #$07 ; DRAW BOTTOM UP
|
||||
SEC
|
||||
- LDA (SRC),Y
|
||||
AND (ESTKL,X)
|
||||
STA (ESTKL,X)
|
||||
LDA ESTKL+1,X
|
||||
SBC #$04
|
||||
STA ESTKL+1,X
|
||||
DEY
|
||||
BNE -
|
||||
LDA (SRC),Y
|
||||
AND (ESTKL,X)
|
||||
STA (ESTKL,X)
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def tileDrawStr(x, y, strptr, strlen, tileset)#0
|
||||
// while strlen
|
||||
// tileDraw(x, y, tileset + ^strptr * 8)
|
||||
// x++
|
||||
// strptr++
|
||||
// strlen--
|
||||
// loop
|
||||
//end
|
||||
export asm tileDrawStr(x, y, strptr, strlen, tileset)#0
|
||||
LDA ESTKL+0,X ; TILESETPTRL
|
||||
STA DSTL
|
||||
LDA ESTKH+0,X ; TILESETPTRH
|
||||
STA DSTH
|
||||
LDA ESTKL+2,X ; STRPTRL
|
||||
STA TMPL
|
||||
LDA ESTKH+2,X ; STRPTRH
|
||||
STA TMPH
|
||||
LDY ESTKL+3,X ; Y COORD
|
||||
LDA ESTKL+4,X ; X COORD
|
||||
CLC
|
||||
end
|
||||
asm _tileDSa
|
||||
ADC $1000,Y ; SCANBTTML
|
||||
STA $D000 ; SELF MODIFY LOOP
|
||||
STA $D001
|
||||
STA $D002
|
||||
STA $D003
|
||||
STA $D004
|
||||
STA $D005
|
||||
STA $D006
|
||||
STA $D007
|
||||
end
|
||||
asm _tileDSb
|
||||
LDA $3001 ; DRAWBUFFH
|
||||
ADC $2000,Y ; SCANBTTMH
|
||||
STA $D008 ; SELF MODIFY LOOP
|
||||
SEC
|
||||
SBC #$04
|
||||
STA $D009
|
||||
SBC #$04
|
||||
STA $D00A
|
||||
SBC #$04
|
||||
STA $D00B
|
||||
SBC #$04
|
||||
STA $D00C
|
||||
SBC #$04
|
||||
STA $D00D
|
||||
SBC #$04
|
||||
STA $D00E
|
||||
SBC #$04
|
||||
STA $D00F
|
||||
LDA ESTKL+1,X ; STRLEN
|
||||
STX IPY
|
||||
TAX ; DRAW RIGHT TO LEFT
|
||||
BEQ +
|
||||
DEX
|
||||
LDY #$00
|
||||
- STY SRCH
|
||||
TXA
|
||||
TAY
|
||||
LDA (TMP),Y ; TILE INDEX * 8
|
||||
ASL
|
||||
ROL SRCH
|
||||
ASL
|
||||
ROL SRCH
|
||||
ASL
|
||||
ROL SRCH
|
||||
; CLC ; CARRY IS CLEAR FROM ABOVE
|
||||
ADC DSTL ; ADD TO TILESETPTR
|
||||
STA SRCL
|
||||
LDA SRCH
|
||||
ADC DSTH
|
||||
STA SRCH
|
||||
LDY #$07 ; DRAW BOTTOM UP
|
||||
end
|
||||
asm _tileDSc
|
||||
LDA (SRC),Y
|
||||
STA $4000,X
|
||||
DEY
|
||||
LDA (SRC),Y
|
||||
STA $4000,X
|
||||
DEY
|
||||
LDA (SRC),Y
|
||||
STA $4000,X
|
||||
DEY
|
||||
LDA (SRC),Y
|
||||
STA $4000,X
|
||||
DEY
|
||||
LDA (SRC),Y
|
||||
STA $4000,X
|
||||
DEY
|
||||
LDA (SRC),Y
|
||||
STA $4000,X
|
||||
DEY
|
||||
LDA (SRC),Y
|
||||
STA $4000,X
|
||||
DEY
|
||||
LDA (SRC),Y
|
||||
STA $4000,X
|
||||
DEX
|
||||
BPL -
|
||||
LDX IPY
|
||||
+ INX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
export def tileFromText(txtpage, tileset)#0
|
||||
byte y
|
||||
word txtptr
|
||||
|
||||
txtptr = txtbuff[txtpage & 1]
|
||||
for y = 0 to 23
|
||||
tileDrawStr(0, y, rowaddr[y] | txtptr, 40, tileset)
|
||||
next
|
||||
end
|
||||
export def tileMode(mode)#1
|
||||
if mode
|
||||
//
|
||||
// Set HGR mode
|
||||
//
|
||||
memset(hgr1, 0, $2000) // Clear HGR page 1
|
||||
^showpage1
|
||||
^showfull
|
||||
^showhires
|
||||
^showgraphics
|
||||
drawpage = 0
|
||||
drawbuff = hgr1
|
||||
return 0
|
||||
fin
|
||||
//
|
||||
// Show text mode
|
||||
//
|
||||
^showpage1
|
||||
^showtext
|
||||
return 0
|
||||
end
|
||||
export def tileClear#0
|
||||
memset(drawbuff, $0000, drawbuff) // Clear current HGR page
|
||||
end
|
||||
//
|
||||
// Set display page, return other page
|
||||
//
|
||||
export def tileShow(page)#1
|
||||
page = page & 1
|
||||
^(showpage1 + page)
|
||||
return page ^ 1
|
||||
end
|
||||
export def tileSwap#1
|
||||
^(showpage1 + drawpage)
|
||||
drawpage = drawpage ^ 1
|
||||
drawbuff = hgrbuff[drawpage]
|
||||
return drawpage
|
||||
end
|
||||
export def tileDrawBuf(page)#1
|
||||
drawpage = page & 1
|
||||
drawbuff = hgrbuff[drawpage]
|
||||
return drawpage
|
||||
end
|
||||
//
|
||||
// Assembly fixups
|
||||
//
|
||||
_tileDraw:1 = @scanbttml
|
||||
_tileDraw:6 = @drawbuff.1
|
||||
_tileDraw:9 = @scanbttmh
|
||||
_tileXDraw:1 = @scanbttml
|
||||
_tileXDraw:6 = @drawbuff.1
|
||||
_tileXDraw:9 = @scanbttmh
|
||||
_tileODraw:1 = @scanbttml
|
||||
_tileODraw:6 = @drawbuff.1
|
||||
_tileODraw:9 = @scanbttmh
|
||||
_tileADraw:1 = @scanbttml
|
||||
_tileADraw:6 = @drawbuff.1
|
||||
_tileADraw:9 = @scanbttmh
|
||||
_tileDSa:1 = @scanbttml
|
||||
_tileDSa:4 = @_tileDSc.3
|
||||
_tileDSa:7 = @_tileDSc.9
|
||||
_tileDSa:10 = @_tileDSc.15
|
||||
_tileDSa:13 = @_tileDSc.21
|
||||
_tileDSa:16 = @_tileDSc.27
|
||||
_tileDSa:19 = @_tileDSc.33
|
||||
_tileDSa:22 = @_tileDSc.39
|
||||
_tileDSa:25 = @_tileDSc.45
|
||||
_tileDSa:28 = @_tileDSc.51
|
||||
_tileDSb:1 = @drawbuff.1
|
||||
_tileDSb:4 = @scanbttmh
|
||||
_tileDSb:7 = @_tileDSc.4
|
||||
_tileDSb:13 = @_tileDSc.10
|
||||
_tileDSb:18 = @_tileDSc.16
|
||||
_tileDSb:23 = @_tileDSc.22
|
||||
_tileDSb:28 = @_tileDSc.28
|
||||
_tileDSb:33 = @_tileDSc.34
|
||||
_tileDSb:38 = @_tileDSc.40
|
||||
_tileDSb:43 = @_tileDSc.46
|
||||
done
|
||||
|
117
src/libsrc/apple/matchfiles.pla
Normal file
117
src/libsrc/apple/matchfiles.pla
Normal file
@@ -0,0 +1,117 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/fileio.plh"
|
||||
|
||||
var dirbuf
|
||||
//
|
||||
// Match next section of source and expression
|
||||
//
|
||||
def matchNext(src, srcofst, exp, expofst)
|
||||
if ^exp >= expofst
|
||||
when exp->[expofst]
|
||||
is '*' // Multi-char wildcard
|
||||
if matchNext(src, srcofst, exp, expofst + 1) // Match zero wild chars
|
||||
return TRUE
|
||||
elsif ^src >= srcofst and matchNext(src, srcofst + 1, exp, expofst) // Match more wild chars
|
||||
return TRUE
|
||||
fin
|
||||
is '?' // Single char wildcard
|
||||
if ^src >= srcofst
|
||||
return matchNext(src, srcofst + 1, exp, expofst + 1)
|
||||
fin
|
||||
return FALSE
|
||||
otherwise // verbatim match
|
||||
if ^src >= srcofst and src->[srcofst] == exp->[expofst]
|
||||
return matchNext(src, srcofst + 1, exp, expofst + 1)
|
||||
fin
|
||||
return FALSE
|
||||
wend
|
||||
fin
|
||||
return ^src < srcofst and ^exp < expofst // Return TRUE if at the end of both
|
||||
end
|
||||
//
|
||||
// Start off matching process
|
||||
//
|
||||
export def matchName(src, exp)#1
|
||||
//
|
||||
// Match on empty wildcard name (same as '*')
|
||||
//
|
||||
if not ^exp
|
||||
return TRUE
|
||||
fin
|
||||
return matchNext(src, 1, exp, 1)
|
||||
end
|
||||
export def matchList(pathstr, exp)#2
|
||||
byte refnum
|
||||
char[64] curpath
|
||||
var firstblk, entrylen, entriesblk, i, entry, entrylist, entryptr, entrycnt
|
||||
|
||||
if not dirbuf
|
||||
dirbuf = heapallocalign(512, 8, 0)
|
||||
fin
|
||||
if not ^pathstr
|
||||
fileio:getpfx(@curpath)
|
||||
pathstr = @curpath
|
||||
fin
|
||||
if pathstr->[^pathstr] <> '/' // Make sure path ends with a '/'
|
||||
^pathstr++
|
||||
pathstr->[^pathstr] = '/'
|
||||
fin
|
||||
entrylist = 0
|
||||
entrycnt = 0
|
||||
firstblk = 1
|
||||
refnum = fileio:open(pathstr)
|
||||
while fileio:read(refnum, dirbuf, 512) == 512
|
||||
//
|
||||
// Skip block pointers
|
||||
//
|
||||
entry = dirbuf + 4
|
||||
if firstblk
|
||||
//
|
||||
// Pull out revelant details from the first block
|
||||
//
|
||||
entrylen = dirbuf->$23
|
||||
entriesblk = dirbuf->$24 - 1
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
for i = firstblk to entriesblk
|
||||
//
|
||||
// Copy directory entry details
|
||||
//
|
||||
^entry = ^entry & $0F
|
||||
if ^entry
|
||||
//
|
||||
// Match wildcard filename
|
||||
//
|
||||
if matchName(entry, exp)
|
||||
entryptr = heapalloc(t_fileentry)
|
||||
memcpy(entryptr, entry, t_fileentry)
|
||||
entrycnt++
|
||||
if not entrylist
|
||||
entrylist = entryptr
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
loop
|
||||
fileio:close(refnum)
|
||||
return entrylist, entrycnt
|
||||
end
|
||||
//
|
||||
// Is this a wildcard name?
|
||||
//
|
||||
export def isWildName(exp)#1
|
||||
byte i
|
||||
|
||||
if ^exp
|
||||
for i = 1 to ^exp
|
||||
if exp->[i] == '*' or exp->[i] == '?'
|
||||
return TRUE
|
||||
fin
|
||||
next
|
||||
fin
|
||||
return FALSE
|
||||
end
|
||||
done
|
||||
|
@@ -270,7 +270,7 @@ CHKSIG: LDY #$05
|
||||
LDA (TMPTR),Y
|
||||
CMP #$01
|
||||
BNE :+
|
||||
LDY #$0C
|
||||
INY
|
||||
TXA ; LOOK FOR MATCHING ID
|
||||
CMP (TMPTR),Y
|
||||
BNE :+
|
||||
@@ -283,7 +283,6 @@ CHKSIG: LDY #$05
|
||||
LDA TMPTR+1
|
||||
CMP #$C8
|
||||
BCC CHKSIG
|
||||
SEC
|
||||
RTS
|
||||
|
||||
;*
|
||||
|
181
src/libsrc/apple/shrlib.pla
Normal file
181
src/libsrc/apple/shrlib.pla
Normal file
@@ -0,0 +1,181 @@
|
||||
include "inc/cmdsys.plh"
|
||||
//
|
||||
// Apple II hardware constants.
|
||||
//
|
||||
const store80dis = $C000
|
||||
const store80en = $C001
|
||||
const vidctl = $C029
|
||||
const showgraphics = $C050
|
||||
const showtext = $C051
|
||||
const showfull = $C052
|
||||
const showmix = $C053
|
||||
const showpage1 = $C054
|
||||
const showpage2 = $C055
|
||||
const showlores = $C056
|
||||
const showhires = $C057
|
||||
const show40 = $C00C
|
||||
const show80 = $C00D
|
||||
const mapmain = $C000
|
||||
const mapaux = $C001
|
||||
const an3on = $C05E
|
||||
const an3off = $C05F
|
||||
const ena80 = $C07E
|
||||
const dis80 = $C07F
|
||||
const pixbuf = $2000
|
||||
const scbbuf = $9D00
|
||||
const palbuf = $9E00
|
||||
const scb640 = $80 // 640 PIXEL SUPER-HIRES
|
||||
const scb320 = $00 // 320 PIXEL SUPER-HIRES
|
||||
|
||||
word palette = $0000, $0007, $0070, $0077, $0700, $0707, $0770, $0
|
||||
word = $0CCC, $000F, $00F0, $00FF, $0F00, $0F0F, $0FF0, $0FFF
|
||||
|
||||
|
||||
asm shrInc(buff)
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
GBASL = $26
|
||||
GBASH = $27
|
||||
GBASE = GBASL
|
||||
GCLR = $30
|
||||
STORE80DIS = $C000
|
||||
STORE80EN = $C001
|
||||
MAINWRT = $C004
|
||||
AUXWRT = $C005
|
||||
VIDCTL = $C029
|
||||
SHADOW = $C035
|
||||
end
|
||||
//
|
||||
// This gets copied to $0100!!!
|
||||
//
|
||||
asm auxRead
|
||||
STA $C003 ; READ AUX MEM
|
||||
LDA (GBASE),Y
|
||||
STA $C002 ; READ MAIN MEM
|
||||
RTS
|
||||
end
|
||||
//
|
||||
// Peek byte from SHR memory
|
||||
//
|
||||
asm shrPeek(addr)
|
||||
LDA ESTKL,X
|
||||
STA GBASL
|
||||
LDA ESTKH,X
|
||||
STA GBASH
|
||||
LDY #$00
|
||||
STY ESTKH,X
|
||||
PHP
|
||||
SEI
|
||||
LDA SHADOW
|
||||
AND #$F7
|
||||
STA SHADOW
|
||||
JSR $0100
|
||||
STA ESTKL,X
|
||||
LDA SHADOW
|
||||
ORA #$08
|
||||
STA SHADOW
|
||||
PLP
|
||||
RTS
|
||||
end
|
||||
//
|
||||
// Poke byte into SHR memory
|
||||
//
|
||||
asm shrPoke(addr, data)#0
|
||||
LDA ESTKL+1,X
|
||||
STA GBASL
|
||||
LDA ESTKH+1,X
|
||||
STA GBASH
|
||||
LDY #$00
|
||||
PHP
|
||||
SEI
|
||||
LDA SHADOW
|
||||
AND #$F7
|
||||
STA SHADOW
|
||||
LDA ESTKL+0,X
|
||||
STA AUXWRT
|
||||
STA (GBASE),Y
|
||||
STA MAINWRT
|
||||
LDA SHADOW
|
||||
ORA #$08
|
||||
STA SHADOW
|
||||
PLP
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//
|
||||
// Fill byte into SHR memory
|
||||
//
|
||||
asm shrFill(addr, data, len)#0
|
||||
LDA ESTKL+2,X
|
||||
STA GBASL
|
||||
LDA ESTKH+2,X
|
||||
STA GBASH
|
||||
LDY #$00
|
||||
PHP
|
||||
SEI
|
||||
LDA SHADOW
|
||||
AND #$F7
|
||||
STA SHADOW
|
||||
LDA ESTKL+1,X
|
||||
STA AUXWRT
|
||||
- STA (GBASE),Y
|
||||
INY
|
||||
BNE +
|
||||
INC GBASH
|
||||
+ DEC ESTKL+0,X
|
||||
BNE -
|
||||
DEC ESTKH+0,X
|
||||
BNE -
|
||||
STA MAINWRT
|
||||
LDA SHADOW
|
||||
ORA #$08
|
||||
STA SHADOW
|
||||
PLP
|
||||
INX
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
export def shrPalette(pal, rgbptr)#0
|
||||
word palptr
|
||||
byte i
|
||||
|
||||
palptr = palbuf + pal * 32
|
||||
for i = 0 to 31
|
||||
shrPoke(palptr + i, ^(rgbptr + i))
|
||||
next
|
||||
end
|
||||
export def shrMode(mode)#0
|
||||
byte row, scb
|
||||
if mode
|
||||
//
|
||||
// Set super hires graphics
|
||||
//
|
||||
if mode == 640
|
||||
scb = scb640
|
||||
else
|
||||
scb = scb320
|
||||
fin
|
||||
for row = 0 to 199
|
||||
shrPoke(scbbuf + row, scb)
|
||||
shrRowPalette(row, palette)
|
||||
next
|
||||
^store80dis = 0 // Turn off 80 column mode
|
||||
^vidctl = ^vidctl | $80 // Turn on SHR mode
|
||||
return
|
||||
fin
|
||||
//
|
||||
// Set text mode
|
||||
//
|
||||
^vidctl = ^vidctl & $7F
|
||||
^showtext
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
^show40 = 0
|
||||
^mapmain = 0
|
||||
^an3off
|
||||
call($FC58, 0, 0, 0, 0) // home()
|
||||
end
|
||||
|
||||
// Put read AUX mem routine in scary location
|
||||
memcpy($0100, @auxRead, 9)
|
||||
done
|
@@ -305,7 +305,7 @@ TONELP SBC #$01 ; 2
|
||||
;+4 = 11 (from BNE above)
|
||||
|
||||
+++ BIT $C000 ; 4
|
||||
BMI TONEXIT ; 2
|
||||
NOP ; 2
|
||||
BPL TONELP ; 3
|
||||
;---
|
||||
;+9 = 20
|
||||
|
@@ -10,7 +10,7 @@ var err, shorterr, shortlen, longerr, longlen
|
||||
|
||||
//def nopLin(a, b, c)#0
|
||||
//end
|
||||
//def majorline(majorstart, major, majorend, minor, dir, majorspan)#0
|
||||
//def majorspans(majorstart, major, majorend, minor, dir, majorspan)#0
|
||||
// //
|
||||
// // Initial half-span step
|
||||
// //
|
||||
@@ -32,7 +32,7 @@ var err, shorterr, shortlen, longerr, longlen
|
||||
// //
|
||||
// majorspan(majorstart, majorend, minor)#0
|
||||
//end
|
||||
asm majorline(majorstart, major, majorend, minor, dir, majorspan)#0
|
||||
asm majorspans(majorstart, major, majorend, minor, dir, majorspan)#0
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
LDA $1000 ; ERRL
|
||||
CLC
|
||||
@@ -48,7 +48,7 @@ asm majorline(majorstart, major, majorend, minor, dir, majorspan)#0
|
||||
STA $A001
|
||||
STA $B001
|
||||
end
|
||||
asm _majorlineA
|
||||
asm _majorspansA
|
||||
- DEX
|
||||
DEX
|
||||
DEX
|
||||
@@ -82,11 +82,11 @@ asm _majorlineA
|
||||
ADC #$00
|
||||
STA ESTKH+5,X ; MAJORSTARTH
|
||||
end
|
||||
asm _majorlineB
|
||||
asm _majorspansB
|
||||
LDY $1001 ; ERRH
|
||||
BMI +
|
||||
end
|
||||
asm _majorlineC
|
||||
asm _majorspansC
|
||||
LDA $1000 ; ERRL
|
||||
CLC
|
||||
ADC $2000 ; SHORTERRL
|
||||
@@ -101,10 +101,14 @@ asm _majorlineC
|
||||
LDA ESTKH+4,X ; MAJORH
|
||||
ADC $3001 ; SHORTLENH
|
||||
STA ESTKH+4,X
|
||||
BCC ++
|
||||
LDA ESTKL+4,X ; MAJORL
|
||||
CMP ESTKL+3,X ; MAJORENDL
|
||||
LDA ESTKH+4,X ; MAJORH
|
||||
SBC ESTKH+3,X ; MAJORENDH
|
||||
BCC -
|
||||
BCS ++
|
||||
end
|
||||
asm _majorlineD
|
||||
asm _majorspansD
|
||||
+ LDA $1000 ; ERRL
|
||||
CLC
|
||||
ADC $4000 ; LONGERRL
|
||||
@@ -119,16 +123,15 @@ asm _majorlineD
|
||||
LDA ESTKH+4,X ; MAJORH
|
||||
ADC $5001 ; LONGLENH
|
||||
STA ESTKH+4,X
|
||||
|
||||
++ LDA ESTKL+4,X ; MAJORL
|
||||
LDA ESTKL+4,X ; MAJORL
|
||||
CMP ESTKL+3,X ; MAJORENDL
|
||||
LDA ESTKH+4,X ; MAJORH
|
||||
SBC ESTKH+3,X ; MAJORENDH
|
||||
BCS +
|
||||
BCS ++
|
||||
end
|
||||
asm _majorlineE
|
||||
asm _majorspansE
|
||||
JMP $6000
|
||||
+ DEX
|
||||
++ DEX
|
||||
DEX
|
||||
DEX
|
||||
LDA ESTKL+8,X ; MAJORSTARTL
|
||||
@@ -335,6 +338,52 @@ export def setlinespans(h, v)#0
|
||||
hspan = h
|
||||
vspan = v
|
||||
end
|
||||
def hmajorspans(x1, y1, x2, y2, dx, dy, sy)#0
|
||||
var dy2, halflen, rem
|
||||
//
|
||||
// Half-span length and error
|
||||
//
|
||||
dy2 = dy * 2
|
||||
halflen, rem = divmod(dx, dy2)
|
||||
err = dy2 - rem
|
||||
//
|
||||
// Long-span length = half-span length * 2
|
||||
//
|
||||
longlen = (halflen + 1) * 2
|
||||
longerr = err * 2
|
||||
if longerr >= dy2
|
||||
longerr = longerr - dy2
|
||||
longlen--
|
||||
fin
|
||||
//
|
||||
// Short-span length = long-span length - 1
|
||||
//
|
||||
shortlen = longlen - 1
|
||||
shorterr = longerr - dy2
|
||||
majorspans(x1, x1 + halflen, x2, y1, sy, hspan)
|
||||
end
|
||||
def vmajorspans(x1, y1, x2, y2, dx, dy, sx)#0
|
||||
var dx2, halflen, rem
|
||||
|
||||
//
|
||||
// Half-span length and error
|
||||
//
|
||||
dx2 = dx * 2
|
||||
halflen, rem = divmod(dy, dx2)
|
||||
err = dx2 - rem
|
||||
//
|
||||
// Long-span length = half-span length * 2
|
||||
//
|
||||
longlen = (halflen + 1) * 2
|
||||
longerr = err * 2
|
||||
if longerr >= dx2
|
||||
longerr = longerr - dx2
|
||||
longlen--
|
||||
fin
|
||||
shortlen = longlen - 1
|
||||
shorterr = longerr - dx2
|
||||
majorspans(y1, y1 + halflen, y2, x1, sx, vspan)
|
||||
end
|
||||
export def linespans(x1, y1, x2, y2)#0
|
||||
var dx, dy, dx2, dy2, halflen, rem, sx, sy
|
||||
|
||||
@@ -358,29 +407,9 @@ export def linespans(x1, y1, x2, y2)#0
|
||||
hspan(x1, x2, y1)#0; return
|
||||
fin
|
||||
//
|
||||
// Half-span length and error
|
||||
// JIT optimize setup
|
||||
//
|
||||
dy2 = dy * 2
|
||||
halflen, rem = divmod(dx, dy2)
|
||||
err = dy2 - rem
|
||||
//
|
||||
// Long-span length = half-span length * 2
|
||||
//
|
||||
longlen = (halflen + 1) * 2
|
||||
longerr = err * 2
|
||||
if longerr >= dy2
|
||||
longerr = longerr - dy2
|
||||
longlen--
|
||||
fin
|
||||
//
|
||||
// Short-span length = long-span length - 1
|
||||
//
|
||||
shortlen = longlen - 1
|
||||
shorterr = longerr - dy2
|
||||
//
|
||||
// JIT optimize inner loop
|
||||
//
|
||||
majorline(x1, x1 + halflen, x2, y1, sy, hspan)
|
||||
hmajorspans(x1, y1, x2, y2, dx, dy, sy)
|
||||
else
|
||||
if sy < 0
|
||||
x1, x2 = x2, x1
|
||||
@@ -391,26 +420,9 @@ export def linespans(x1, y1, x2, y2)#0
|
||||
vspan(y1, y2, x1)#0; return
|
||||
fin
|
||||
//
|
||||
// Half-span length and error
|
||||
// JIT optimize inner setup
|
||||
//
|
||||
dx2 = dx * 2
|
||||
halflen, rem = divmod(dy, dx2)
|
||||
err = dx2 - rem
|
||||
//
|
||||
// Long-span length = half-span length * 2
|
||||
//
|
||||
longlen = (halflen + 1) * 2
|
||||
longerr = err * 2
|
||||
if longerr >= dx2
|
||||
longerr = longerr - dx2
|
||||
longlen--
|
||||
fin
|
||||
shortlen = longlen - 1
|
||||
shorterr = longerr - dx2
|
||||
//
|
||||
// JIT optimize inner loop
|
||||
//
|
||||
majorline(y1, y1 + halflen, y2, x1, sx, vspan)
|
||||
vmajorspans(x1, y1, x2, y2, dx, dy, sx)
|
||||
fin
|
||||
end
|
||||
export def setlineplot(p)#0
|
||||
@@ -449,46 +461,46 @@ export def line(x1, y1, x2, y2)#0
|
||||
//
|
||||
// Assembly fixups
|
||||
//
|
||||
majorline:1 = @err
|
||||
majorline:5 = @shorterr
|
||||
majorline:8 = @err
|
||||
majorline:11 = @err.1
|
||||
majorline:14 = @shorterr.1
|
||||
majorline:17 = @err.1
|
||||
majorline:22 = @_majorlineA.28
|
||||
majorline:25 = @_majorlineE.31
|
||||
majorline:30 = @_majorlineA.29
|
||||
majorline:33 = @_majorlineE.32
|
||||
_majorlineB:1 = @err.1
|
||||
_majorlineC:1 = @err
|
||||
_majorlineC:5 = @shorterr
|
||||
_majorlineC:8 = @err
|
||||
_majorlineC:12 = @shorterr.1
|
||||
_majorlineC:15 = @err.1
|
||||
_majorlineC:21 = @shortlen
|
||||
_majorlineC:28 = @shortlen.1
|
||||
_majorlineD:1 = @err
|
||||
_majorlineD:5 = @longerr
|
||||
_majorlineD:8 = @err
|
||||
_majorlineD:12 = @longerr.1
|
||||
_majorlineD:15 = @err.1
|
||||
_majorlineD:21 = @longlen
|
||||
_majorlineD:28 = @longlen.1
|
||||
_majorlineE:1 = @_majorlineA
|
||||
hline:16 = @err
|
||||
hline:23 = @err.1
|
||||
_hlineA:1 = @jmpplot
|
||||
_hlineA:4 = @err.1
|
||||
_hlineB:6 = @err
|
||||
_hlineB:9 = @err
|
||||
_hlineB:13 = @err.1
|
||||
_hlineB:16 = @err.1
|
||||
vline:16 = @err
|
||||
vline:23 = @err.1
|
||||
_vlineA:1 = @jmpplot
|
||||
_vlineA:4 = @err.1
|
||||
_vlineB:6 = @err
|
||||
_vlineB:9 = @err
|
||||
_vlineB:13 = @err.1
|
||||
_vlineB:16 = @err.1
|
||||
majorspans:1 = @err
|
||||
majorspans:5 = @shorterr
|
||||
majorspans:8 = @err
|
||||
majorspans:11 = @err.1
|
||||
majorspans:14 = @shorterr.1
|
||||
majorspans:17 = @err.1
|
||||
majorspans:22 = @_majorspansA.28
|
||||
majorspans:25 = @_majorspansE.31
|
||||
majorspans:30 = @_majorspansA.29
|
||||
majorspans:33 = @_majorspansE.32
|
||||
_majorspansB:1 = @err.1
|
||||
_majorspansC:1 = @err
|
||||
_majorspansC:5 = @shorterr
|
||||
_majorspansC:8 = @err
|
||||
_majorspansC:12 = @shorterr.1
|
||||
_majorspansC:15 = @err.1
|
||||
_majorspansC:21 = @shortlen
|
||||
_majorspansC:28 = @shortlen.1
|
||||
_majorspansD:1 = @err
|
||||
_majorspansD:5 = @longerr
|
||||
_majorspansD:8 = @err
|
||||
_majorspansD:12 = @longerr.1
|
||||
_majorspansD:15 = @err.1
|
||||
_majorspansD:21 = @longlen
|
||||
_majorspansD:28 = @longlen.1
|
||||
_majorspansE:1 = @_majorspansA
|
||||
hline:16 = @err
|
||||
hline:23 = @err.1
|
||||
_hlineA:1 = @jmpplot
|
||||
_hlineA:4 = @err.1
|
||||
_hlineB:6 = @err
|
||||
_hlineB:9 = @err
|
||||
_hlineB:13 = @err.1
|
||||
_hlineB:16 = @err.1
|
||||
vline:16 = @err
|
||||
vline:23 = @err.1
|
||||
_vlineA:1 = @jmpplot
|
||||
_vlineA:4 = @err.1
|
||||
_vlineB:6 = @err
|
||||
_vlineB:9 = @err
|
||||
_vlineB:13 = @err.1
|
||||
_vlineB:16 = @err.1
|
||||
done
|
||||
|
57
src/makefile
57
src/makefile
@@ -15,6 +15,7 @@ CMDJIT = rel/apple/CMD128\#061000
|
||||
PLVMZP_C64 = vmsrc/c64/plvmzp.inc
|
||||
PLVMC64 = rel/c64/PLASMA
|
||||
ED = rel/ED\#FE1000
|
||||
ZIPCHIP = rel/apple/ZIPCHIP\#FE1000
|
||||
JIT = rel/apple/JIT\#FE1000
|
||||
JIT16 = rel/apple/JIT16\#FE1000
|
||||
JITUNE = rel/apple/JITUNE\#FE1000
|
||||
@@ -29,6 +30,7 @@ TYPE = rel/apple/TYPE\#FE1000
|
||||
SIEVE = rel/SIEVE\#FE1000
|
||||
PRIMEGAP = rel/PRIMEGAP\#FE1000
|
||||
ARGS = rel/ARGS\#FE1000
|
||||
MATCHFILES = rel/apple/MATCHFILES\#FE1000
|
||||
SPIPORT = rel/apple/SPIPORT\#FE1000
|
||||
SDFAT = rel/apple/SDFAT\#FE1000
|
||||
FATCAT = rel/apple/FATCAT\#FE1000
|
||||
@@ -61,8 +63,12 @@ HGRLIB = rel/apple/HGRLIB\#FE1000
|
||||
GRLIB = rel/apple/GRLIB\#FE1000
|
||||
DGRLIB = rel/apple/DGRLIB\#FE1000
|
||||
HGRSPRITE = rel/apple/HGRSPRITE\#FE1000
|
||||
HGRTILE = rel/apple/HGRTILE\#FE1000
|
||||
HGRFONT = rel/apple/HGRFONT\#FE1000
|
||||
LINES = rel/LINES\#FE1000
|
||||
GRAFIX = rel/apple/GRAFIX\#FE1000
|
||||
SFM = rel/apple/SFM\#FE1000
|
||||
SFMSPRT = rel/apple/SFMSPRT\#FE1000
|
||||
GFXDEMO = rel/apple/GFXDEMO\#FE1000
|
||||
JOYBUZZ = rel/apple/JOYBUZZ\#FE1000
|
||||
PORTIO = rel/apple/PORTIO\#FE1000
|
||||
@@ -70,6 +76,7 @@ ROGUE = rel/ROGUE\#FE1000
|
||||
ROGUEMAP = rel/ROGUEMAP\#FE1000
|
||||
ROGUECOMBAT= rel/ROGUECOMBAT\#FE1000
|
||||
MON = rel/apple/MON\#FE1000
|
||||
TILETEST = rel/apple/TILETEST\#FE1000
|
||||
HGRTEST = rel/apple/HGRTEST\#FE1000
|
||||
GRTEST = rel/apple/GRTEST\#FE1000
|
||||
DGRTEST = rel/apple/DGRTEST\#FE1000
|
||||
@@ -102,7 +109,7 @@ TXTTYPE = .TXT
|
||||
#SYSTYPE = \#FF2000
|
||||
#TXTTYPE = \#040000
|
||||
|
||||
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(PLVMJIT03) $(CMD) $(CMDJIT) $(JIT) $(JIT17) $(JITUNE) $(SOSCMD) $(SOSCMDJIT) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(LINES) $(HGRSPRITE) $(HGRLIB) $(HGRTEST) $(GRLIB) $(DGRLIB) $(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
||||
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(PLVMJIT03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(SOSCMDJIT) $(PLASMAPLASM) $(CODEOPT) $(ZIPCHIP) $(MATCHFILES) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(SFM) $(SFMSPRT) $(GRAFIX) $(GFXDEMO) $(LINES) $(HGRTILE) $(HGRFONT) $(HGRSPRITE) $(HGRLIB) $(TILETEST) $(HGRTEST) $(GRLIB) $(DGRLIB) $(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
||||
|
||||
-rm vmsrc/plvmzp.inc
|
||||
|
||||
@@ -224,6 +231,10 @@ $(ED): toolsrc/ed.pla $(PLVM02) $(PLASM) toolsrc/ed.pla
|
||||
./$(PLASM) -AMOW < toolsrc/ed.pla > toolsrc/ed.a
|
||||
acme --setpc 4094 -o $(ED) toolsrc/ed.a
|
||||
|
||||
$(MATCHFILES): libsrc/apple/matchfiles.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/apple/matchfiles.pla > libsrc/apple/matchfiles.a
|
||||
acme --setpc 4094 -o $(MATCHFILES) libsrc/apple/matchfiles.a
|
||||
|
||||
$(ARGS): libsrc/args.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/args.pla > libsrc/args.a
|
||||
acme --setpc 4094 -o $(ARGS) libsrc/args.a
|
||||
@@ -252,6 +263,14 @@ $(LONGJMP): libsrc/longjmp.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/longjmp.pla > libsrc/longjmp.a
|
||||
acme --setpc 4094 -o $(LONGJMP) libsrc/longjmp.a
|
||||
|
||||
$(SFM): samplesrc/sfm.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/sfm.pla > samplesrc/sfm.a
|
||||
acme --setpc 4094 -o $(SFM) samplesrc/sfm.a
|
||||
|
||||
$(SFMSPRT): samplesrc/sfmsprt.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/sfmsprt.pla > samplesrc/sfmsprt.a
|
||||
acme --setpc 4094 -o $(SFMSPRT) samplesrc/sfmsprt.a
|
||||
|
||||
$(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a
|
||||
acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a
|
||||
@@ -428,47 +447,59 @@ $(DGRLIB): libsrc/apple/dgrlib.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/apple/dgrlib.pla > libsrc/apple/dgrlib.a
|
||||
acme --setpc 4094 -o $(DGRLIB) libsrc/apple/dgrlib.a
|
||||
|
||||
$(TILETEST): samplesrc/tiletest.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/tiletest.pla > samplesrc/tiletest.a
|
||||
acme --setpc 4094 -o $(TILETEST) samplesrc/tiletest.a
|
||||
|
||||
$(HGRTILE): libsrc/apple/hgrtile.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/apple/hgrtile.pla > libsrc/apple/hgrtile.a
|
||||
acme --setpc 4094 -o $(HGRTILE) libsrc/apple/hgrtile.a
|
||||
|
||||
$(HGRFONT): libsrc/apple/hgrfont.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/apple/hgrfont.pla > libsrc/apple/hgrfont.a
|
||||
acme --setpc 4094 -o $(HGRFONT) libsrc/apple/hgrfont.a
|
||||
|
||||
$(HGRSPRITE): libsrc/apple/hgrsprite.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/apple/hgrsprite.pla > libsrc/apple/hgrsprite.a
|
||||
acme --setpc 4094 -o $(HGRSPRITE) libsrc/apple/hgrsprite.a
|
||||
|
||||
$(HGRTEST): samplesrc/hgrtest.pla $(PLVM02) $(PLASM)
|
||||
$(HGRTEST): samplesrc/hgrtest.pla $(HGRLIB) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/hgrtest.pla > samplesrc/hgrtest.a
|
||||
acme --setpc 4094 -o $(HGRTEST) samplesrc/hgrtest.a
|
||||
|
||||
$(GRTEST): samplesrc/grtest.pla $(PLVM02) $(PLASM)
|
||||
$(GRTEST): samplesrc/grtest.pla $(GRLIB) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/grtest.pla > samplesrc/grtest.a
|
||||
acme --setpc 4094 -o $(GRTEST) samplesrc/grtest.a
|
||||
|
||||
$(DGRTEST): samplesrc/dgrtest.pla $(PLVM02) $(PLASM)
|
||||
$(DGRTEST): samplesrc/dgrtest.pla $(DGRLIB) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/dgrtest.pla > samplesrc/dgrtest.a
|
||||
acme --setpc 4094 -o $(DGRTEST) samplesrc/dgrtest.a
|
||||
|
||||
$(MON): utilsrc/apple/mon.pla $(PLVM02) $(PLASM)
|
||||
$(MON): utilsrc/apple/mon.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/mon.pla > utilsrc/apple/mon.a
|
||||
acme --setpc 4094 -o $(MON) utilsrc/apple/mon.a
|
||||
|
||||
$(COPY): utilsrc/apple/copy.pla $(PLVM03) $(PLASM)
|
||||
$(COPY): utilsrc/apple/copy.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/copy.pla > utilsrc/apple/copy.a
|
||||
acme --setpc 4094 -o $(COPY) utilsrc/apple/copy.a
|
||||
|
||||
$(DEL): utilsrc/apple/del.pla $(PLVM03) $(PLASM)
|
||||
$(DEL): utilsrc/apple/del.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/del.pla > utilsrc/apple/del.a
|
||||
acme --setpc 4094 -o $(DEL) utilsrc/apple/del.a
|
||||
|
||||
$(REN): utilsrc/apple/ren.pla $(PLVM03) $(PLASM)
|
||||
$(REN): utilsrc/apple/ren.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/ren.pla > utilsrc/apple/ren.a
|
||||
acme --setpc 4094 -o $(REN) utilsrc/apple/ren.a
|
||||
|
||||
$(CAT): utilsrc/apple/cat.pla $(PLVM03) $(PLASM)
|
||||
$(CAT): utilsrc/apple/cat.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/cat.pla > utilsrc/apple/cat.a
|
||||
acme --setpc 4094 -o $(CAT) utilsrc/apple/cat.a
|
||||
|
||||
$(NEWDIR): utilsrc/apple/newdir.pla $(PLVM03) $(PLASM)
|
||||
$(NEWDIR): utilsrc/apple/newdir.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/newdir.pla > utilsrc/apple/newdir.a
|
||||
acme --setpc 4094 -o $(NEWDIR) utilsrc/apple/newdir.a
|
||||
|
||||
$(TYPE): utilsrc/apple/type.pla $(PLVM03) $(PLASM)
|
||||
$(TYPE): utilsrc/apple/type.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/type.pla > utilsrc/apple/type.a
|
||||
acme --setpc 4094 -o $(TYPE) utilsrc/apple/type.a
|
||||
|
||||
@@ -476,6 +507,10 @@ $(SOS): utilsrc/apple/sos.pla $(PLVM03) $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/sos.pla > utilsrc/apple/sos.a
|
||||
acme --setpc 4094 -o $(SOS) utilsrc/apple/sos.a
|
||||
|
||||
$(ZIPCHIP): utilsrc/apple/zipchip.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/zipchip.pla > utilsrc/apple/zipchip.a
|
||||
acme --setpc 4094 -o $(ZIPCHIP) utilsrc/apple/zipchip.a
|
||||
|
||||
$(JIT): libsrc/apple/jit.pla libsrc/jitcore.pla $(PLVMJIT) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/apple/jit.pla > libsrc/apple/jit.a
|
||||
acme --setpc 4094 -o $(JIT) libsrc/apple/jit.a
|
||||
|
58
src/mkrel
58
src/mkrel
@@ -10,6 +10,8 @@ mkdir prodos/sys
|
||||
cp rel/apple/FILEIO#FE1000 prodos/sys/FILEIO.REL
|
||||
cp rel/apple/CONIO#FE1000 prodos/sys/CONIO.REL
|
||||
cp rel/LINES#FE1000 prodos/sys/LINES.REL
|
||||
cp rel/apple/HGRFONT#FE1000 prodos/sys/HGRFONT.REL
|
||||
cp rel/apple/HGRTILE#FE1000 prodos/sys/HGRTILE.REL
|
||||
cp rel/apple/HGRSPRITE#FE1000 prodos/sys/HGRSPRITE.REL
|
||||
cp rel/apple/HGRLIB#FE1000 prodos/sys/HGRLIB.REL
|
||||
cp rel/apple/GRLIB#FE1000 prodos/sys/GRLIB.REL
|
||||
@@ -20,6 +22,7 @@ cp rel/apple/REN#FE1000 prodos/sys/REN.REL
|
||||
cp rel/apple/CAT#FE1000 prodos/sys/CAT.REL
|
||||
cp rel/apple/NEWDIR#FE1000 prodos/sys/NEWDIR.REL
|
||||
cp rel/apple/TYPE#FE1000 prodos/sys/TYPE.REL
|
||||
cp rel/apple/MATCHFILES#FE1000 prodos/sys/MATCHFILES.REL
|
||||
cp rel/ARGS#FE1000 prodos/sys/ARGS.REL
|
||||
cp rel/ED#FE1000 prodos/sys/ED.REL
|
||||
cp rel/FIBER#FE1000 prodos/sys/FIBER.REL
|
||||
@@ -37,6 +40,7 @@ cp rel/apple/SNDSEQ#FE1000 prodos/sys/SNDSEQ.REL
|
||||
cp rel/apple/JIT#FE1000 prodos/sys/JIT.REL
|
||||
cp rel/apple/JIT16#FE1000 prodos/sys/JIT16.REL
|
||||
cp rel/apple/JITUNE#FE1000 prodos/sys/JITUNE.REL
|
||||
cp rel/apple/ZIPCHIP#FE1000 prodos/sys/ZIPCHIP.REL
|
||||
cp rel/LZ4#FE1000 prodos/sys/LZ4.REL
|
||||
cp rel/TFTPD#FE1000 prodos/sys/TFTPD.REL
|
||||
cp rel/INT32#FE1000 prodos/sys/INT32.REL
|
||||
@@ -69,10 +73,6 @@ cp ../sysfiles/ELEMS.CODE#060000 prodos/fpsos/sys/ELEMS.CODE.BIN
|
||||
rm -rf prodos/demos
|
||||
mkdir prodos/demos
|
||||
cp rel/INT32TEST#FE1000 prodos/demos/INT32TEST.REL
|
||||
cp rel/apple/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
|
||||
cp rel/apple/GRTEST#FE1000 prodos/demos/GRTEST.REL
|
||||
cp rel/apple/DGRTEST#FE1000 prodos/demos/DGRTEST.REL
|
||||
cp rel/apple/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
|
||||
cp rel/apple/ROD#FE1000 prodos/demos/ROD.REL
|
||||
cp rel/RPNCALC#FE1000 prodos/demos/RPNCALC.REL
|
||||
cp rel/LZ4CAT#FE1000 prodos/demos/LZ4CAT.REL
|
||||
@@ -85,27 +85,37 @@ cp rel/ROGUEMAP#FE1000 prodos/demos/rogue/ROGUEMAP.REL
|
||||
cp samplesrc/LEVEL0#040000 prodos/demos/rogue/LEVEL0.TXT
|
||||
cp samplesrc/LEVEL1#040000 prodos/demos/rogue/LEVEL1.TXT
|
||||
|
||||
mkdir prodos/demos/sdutils
|
||||
cp rel/apple/SPIPORT#FE1000 prodos/demos/sdutils/SPIPORT.REL
|
||||
cp rel/apple/SDFAT#FE1000 prodos/demos/sdutils/SDFAT.REL
|
||||
cp rel/apple/FATCAT#FE1000 prodos/demos/sdutils/FATCAT.REL
|
||||
cp rel/apple/FATGET#FE1000 prodos/demos/sdutils/FATGET.REL
|
||||
cp rel/apple/FATPUT#FE1000 prodos/demos/sdutils/FATPUT.REL
|
||||
cp rel/apple/FATREADDSK#FE1000 prodos/demos/sdutils/FATREADDSK.REL
|
||||
cp rel/apple/FATWRITEDSK#FE1000 prodos/demos/sdutils/FATWRITEDSK.REL
|
||||
|
||||
mkdir prodos/demos/apple3
|
||||
cp rel/apple/GFXDEMO#FE1000 prodos/demos/apple3/GFXDEMO.REL
|
||||
cp samplesrc/APPLE3.PIX#060000 prodos/demos/apple3/APPLE3.PIX.BIN
|
||||
mkdir prodos/demos/music
|
||||
cp rel/apple/PLAYSEQ#FE1000 prodos/demos/music/PLAYSEQ.REL
|
||||
cp mockingboard/ultima3.seq prodos/demos/music/ULTIMA3.SEQ.BIN
|
||||
cp mockingboard/startrek.seq prodos/demos/music/STARTREK.SEQ.BIN
|
||||
|
||||
mkdir prodos/demos/net
|
||||
cp rel/HTTPD#FE1000 prodos/demos/net/HTTPD.REL
|
||||
cp samplesrc/index.html prodos/demos/net/INDEX.HTML.TXT
|
||||
|
||||
mkdir prodos/demos/music
|
||||
cp rel/apple/PLAYSEQ#FE1000 prodos/demos/music/PLAYSEQ.REL
|
||||
cp mockingboard/ultima3.seq prodos/demos/music/ULTIMA3.SEQ.BIN
|
||||
cp mockingboard/startrek.seq prodos/demos/music/STARTREK.SEQ.BIN
|
||||
mkdir prodos/demos/apple2
|
||||
cp rel/apple/TILETEST#FE1000 prodos/demos/apple2/TILETEST.REL
|
||||
cp rel/apple/HGRTEST#FE1000 prodos/demos/apple2/HGRTEST.REL
|
||||
cp rel/apple/GRTEST#FE1000 prodos/demos/apple2/GRTEST.REL
|
||||
cp rel/apple/DGRTEST#FE1000 prodos/demos/apple2/DGRTEST.REL
|
||||
|
||||
mkdir prodos/demos/apple2/spiders
|
||||
cp rel/apple/SFM#FE1000 prodos/demos/apple2/spiders/SFM.REL
|
||||
cp rel/apple/SFMSPRT#FE1000 prodos/demos/apple2/spiders/SFMSPRT.REL
|
||||
|
||||
mkdir prodos/demos/apple2/sdutils
|
||||
cp rel/apple/SPIPORT#FE1000 prodos/demos/apple2/sdutils/SPIPORT.REL
|
||||
cp rel/apple/SDFAT#FE1000 prodos/demos/apple2/sdutils/SDFAT.REL
|
||||
cp rel/apple/FATCAT#FE1000 prodos/demos/apple2/sdutils/FATCAT.REL
|
||||
cp rel/apple/FATGET#FE1000 prodos/demos/apple2/sdutils/FATGET.REL
|
||||
cp rel/apple/FATPUT#FE1000 prodos/demos/apple2/sdutils/FATPUT.REL
|
||||
cp rel/apple/FATREADDSK#FE1000 prodos/demos/apple2/sdutils/FATREADDSK.REL
|
||||
cp rel/apple/FATWRITEDSK#FE1000 prodos/demos/apple2/sdutils/FATWRITEDSK.REL
|
||||
|
||||
mkdir prodos/demos/apple3
|
||||
cp rel/apple/GFXDEMO#FE1000 prodos/demos/apple3/GFXDEMO.REL
|
||||
cp samplesrc/APPLE3.PIX#060000 prodos/demos/apple3/APPLE3.PIX.BIN
|
||||
|
||||
rm -rf prodos/bld
|
||||
mkdir prodos/bld
|
||||
@@ -118,6 +128,7 @@ cp samplesrc/int32test.pla prodos/bld/samples/INT32TEST.PLA.TXT
|
||||
cp samplesrc/grtest.pla prodos/bld/samples/GRTEST.PLA.TXT
|
||||
cp samplesrc/dgrtest.pla prodos/bld/samples/DGRTEST.PLA.TXT
|
||||
cp samplesrc/hgrtest.pla prodos/bld/samples/HGRTEST.PLA.TXT
|
||||
cp samplesrc/tiletest.pla prodos/bld/samples/TILETEST.PLA.TXT
|
||||
cp samplesrc/fibertest.pla prodos/bld/samples/FIBERTEST.PLA.TXT
|
||||
cp samplesrc/mousetest.pla prodos/bld/samples/MOUSETEST.PLA.TXT
|
||||
cp samplesrc/memtest.pla prodos/bld/samples/MEMTEST.PLA.TXT
|
||||
@@ -130,6 +141,10 @@ cp samplesrc/rpncalc.pla prodos/bld/samples/RPNCALC.PLA.TXT
|
||||
cp samplesrc/fatcat.pla prodos/bld/samples/FATCAT.PLA.TXT
|
||||
cp samplesrc/gfxdemo.pla prodos/bld/samples/GFXDEMO.PLA.TXT
|
||||
cp samplesrc/lz4cat.pla prodos/bld/samples/Z4CAT.PLA.TXT
|
||||
cp samplesrc/sfm.pla prodos/bld/samples/SFM.PLA.TXT
|
||||
cp samplesrc/sfmsprt.pla prodos/bld/samples/SFMSPRT.PLA.TXT
|
||||
cp utilsrc/apple/mon.pla prodos/bld/samples/MON.PLA.TXT
|
||||
cp utilsrc/apple/zipchip.pla prodos/bld/samples/ZIPCHIP.PLA.TXT
|
||||
|
||||
#mkdir prodos/bld/examples
|
||||
#cp samplesrc/examples/ex.1.pla prodos/bld/examples/EX.1.PLA.TXT
|
||||
@@ -152,9 +167,12 @@ cp samplesrc/lz4cat.pla prodos/bld/samples/Z4CAT.PLA.TXT
|
||||
|
||||
mkdir prodos/bld/inc
|
||||
cp inc/args.plh prodos/bld/inc/ARGS.PLH.TXT
|
||||
cp inc/matchfiles.plh prodos/bld/inc/MATCHFILES.PLH.TXT
|
||||
cp inc/cmdsys.plh prodos/bld/inc/CMDSYS.PLH.TXT
|
||||
cp inc/conio.plh prodos/bld/inc/CONIO.PLH.TXT
|
||||
cp inc/lines.plh prodos/bld/inc/LINES.PLH.TXT
|
||||
cp inc/hgrfont.plh prodos/bld/inc/HGRFONT.PLH.TXT
|
||||
cp inc/hgrtile.plh prodos/bld/inc/HGRTILE.PLH.TXT
|
||||
cp inc/hgrsprite.plh prodos/bld/inc/HGRSPRITE.PLH.TXT
|
||||
cp inc/hgrlib.plh prodos/bld/inc/HGRLIB.PLH.TXT
|
||||
cp inc/grlib.plh prodos/bld/inc/GRLIB.PLH.TXT
|
||||
|
@@ -24,7 +24,7 @@ def dgrTest#0
|
||||
byte b, l, k
|
||||
word i, j, ii, ij
|
||||
|
||||
b = dgrMode()
|
||||
b = dgrMode(TRUE)
|
||||
dgrDrawBuf(0)
|
||||
for k = 15 downto 0
|
||||
dgrClear(k)
|
||||
@@ -59,7 +59,7 @@ def dgrTest#0
|
||||
fin
|
||||
loop
|
||||
^$C010
|
||||
txtMode
|
||||
dgrMode(FALSE)
|
||||
end
|
||||
|
||||
dgrTest
|
||||
|
@@ -24,7 +24,7 @@ def grTest#0
|
||||
byte b, l, k
|
||||
word i, j, ii, ij
|
||||
|
||||
b = grMode()
|
||||
b = grMode(TRUE)
|
||||
grDrawBuf(0)
|
||||
for k = 15 downto 0
|
||||
grClear(k)
|
||||
@@ -59,7 +59,7 @@ def grTest#0
|
||||
fin
|
||||
loop
|
||||
^$C010
|
||||
txtMode
|
||||
grMode(FALSE)
|
||||
end
|
||||
|
||||
grTest
|
||||
|
@@ -15,7 +15,6 @@ byte = $83, $31, $11, $13, $38
|
||||
byte = $88, $33, $11, $33, $88
|
||||
byte = $88, $83, $33, $38, $88
|
||||
var sprtBall
|
||||
|
||||
def testline#0
|
||||
var i
|
||||
|
||||
@@ -42,6 +41,7 @@ def testblt(sprtnum)#0
|
||||
jj[0] = -1
|
||||
if sprtnum
|
||||
for k = 1 to sprtnum
|
||||
spriteAdd(k, spriteDup(sprtBall))
|
||||
i[k] = ((i[k - 1] ^ 37) + 97) % 270
|
||||
ii[k] = -ii[k - 1]
|
||||
j[k] = ((j[k - 1] ^ 29) + 53) % 180
|
||||
@@ -65,7 +65,7 @@ def testblt(sprtnum)#0
|
||||
loop
|
||||
end
|
||||
|
||||
hgrMode
|
||||
hgrMode(TRUE)
|
||||
spriteDrawBuf(hgrDrawBuf(0)) // So we can see the compile process
|
||||
sprtBall = spriteCompile(10, 10, 5, 5, @ball)
|
||||
hgrColor(0)
|
||||
@@ -74,22 +74,7 @@ testline
|
||||
memcpy($4000, $2000, $2000) // Copy to both buffers
|
||||
spriteDrawBuf(hgrDrawBuf(1))
|
||||
spriteAdd(0, sprtBall)
|
||||
spriteAdd(1, spriteDup(sprtBall))
|
||||
spriteAdd(2, spriteDup(sprtBall))
|
||||
spriteAdd(3, spriteDup(sprtBall))
|
||||
spriteAdd(4, spriteDup(sprtBall))
|
||||
spriteAdd(5, spriteDup(sprtBall))
|
||||
spriteAdd(6, spriteDup(sprtBall))
|
||||
spriteAdd(7, spriteDup(sprtBall))
|
||||
spriteAdd(8, spriteDup(sprtBall))
|
||||
spriteAdd(9, spriteDup(sprtBall))
|
||||
spriteAdd(10, spriteDup(sprtBall))
|
||||
spriteAdd(11, spriteDup(sprtBall))
|
||||
spriteAdd(12, spriteDup(sprtBall))
|
||||
spriteAdd(13, spriteDup(sprtBall))
|
||||
spriteAdd(14, spriteDup(sprtBall))
|
||||
spriteAdd(15, spriteDup(sprtBall))
|
||||
testblt(16)
|
||||
getc
|
||||
txtMode
|
||||
hgrMode(FALSE)
|
||||
done
|
||||
|
@@ -402,7 +402,7 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
// Update distance
|
||||
//
|
||||
occluded = 1
|
||||
dist = dist + 1
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
@@ -419,12 +419,12 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if adjtile & OPAQUE_TILE
|
||||
^(viewmap + imap - mapcols) = adjtile | VIEWED_TILE
|
||||
screen.[ycentr-xbeam[l]-1, xcentr+ybeam[l]] = adjtile
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
if tile <> PIT_TILE
|
||||
if tile <> PIT_TILE
|
||||
screen.[ycentr-xbeam[l], xcentr+ybeam[l]] = tile & INV_TILE
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
@@ -437,24 +437,24 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
if tile & LIT_TILE
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
screen.[ycentr-xbeam[l], xcentr+ybeam[l]] = tile & INV_TILE
|
||||
darkness = 0
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
occluded = 1
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 2
|
||||
for l = 1 to dbeam[lightdist]
|
||||
@@ -464,17 +464,17 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap + mapcols) & INV_TILE
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap + mapcols) & INV_TILE
|
||||
if adjtile & OPAQUE_TILE
|
||||
^(viewmap + imap + mapcols) = adjtile | VIEWED_TILE
|
||||
screen.[ycentr+xbeam[l]+1, xcentr+ybeam[l]] = adjtile
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
if tile <> PIT_TILE
|
||||
if tile <> PIT_TILE
|
||||
screen.[ycentr+xbeam[l], xcentr+ybeam[l]] = tile & INV_TILE
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
@@ -486,25 +486,25 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
screen.[ycentr+xbeam[l], xcentr+ybeam[l]] = tile & INV_TILE
|
||||
darkness = 0
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
occluded = 1
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 3
|
||||
for l = 1 to dbeam[lightdist]
|
||||
@@ -514,17 +514,17 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap + 1) & INV_TILE
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap + 1) & INV_TILE
|
||||
if adjtile & OPAQUE_TILE
|
||||
^(viewmap + imap + 1) = adjtile | VIEWED_TILE
|
||||
screen.[ycentr+ybeam[l], xcentr+xbeam[l]+1] = adjtile
|
||||
fin
|
||||
fin
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
if tile <> PIT_TILE
|
||||
if tile <> PIT_TILE
|
||||
screen.[ycentr+ybeam[l], xcentr+xbeam[l]] = tile & INV_TILE
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
@@ -536,25 +536,25 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
screen.[ycentr+ybeam[l], xcentr+xbeam[l]] = tile & INV_TILE
|
||||
darkness = 0
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
occluded = 1
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 4
|
||||
for l = 1 to dbeam[lightdist]
|
||||
@@ -564,17 +564,17 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap - 1) & INV_TILE
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap - 1) & INV_TILE
|
||||
if adjtile & OPAQUE_TILE
|
||||
^(viewmap + imap - 1) = adjtile | VIEWED_TILE
|
||||
screen.[ycentr+ybeam[l], xcentr-xbeam[l]-1] = adjtile
|
||||
fin
|
||||
fin
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
if tile <> PIT_TILE
|
||||
if tile <> PIT_TILE
|
||||
screen.[ycentr+ybeam[l], xcentr-xbeam[l]] = tile & INV_TILE
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
@@ -586,25 +586,25 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
screen.[ycentr+ybeam[l], xcentr-xbeam[l]] = tile & INV_TILE
|
||||
darkness = 0
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
occluded = 1
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 5
|
||||
for l = 1 to dbeam[lightdist]
|
||||
@@ -614,17 +614,17 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap + mapcols) & INV_TILE
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap + mapcols) & INV_TILE
|
||||
if adjtile & OPAQUE_TILE
|
||||
^(viewmap + imap + mapcols) = adjtile | VIEWED_TILE
|
||||
screen.[ycentr+xbeam[l]+1, xcentr-ybeam[l]] = adjtile
|
||||
fin
|
||||
fin
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
if tile <> PIT_TILE
|
||||
if tile <> PIT_TILE
|
||||
screen.[ycentr+xbeam[l], xcentr-ybeam[l]] = tile & INV_TILE
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
@@ -636,26 +636,26 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
screen.[ycentr+xbeam[l], xcentr-ybeam[l]] = tile & INV_TILE
|
||||
darkness = 0
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
occluded = 1
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 6
|
||||
for l = 1 to dbeam[lightdist]
|
||||
if vispix[vbeam[l]]
|
||||
@@ -664,17 +664,17 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap - mapcols) & INV_TILE
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap - mapcols) & INV_TILE
|
||||
if adjtile & OPAQUE_TILE
|
||||
^(viewmap + imap - mapcols) = adjtile | VIEWED_TILE
|
||||
screen.[ycentr-xbeam[l]-1, xcentr-ybeam[l]] = adjtile
|
||||
fin
|
||||
fin
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
if tile <> PIT_TILE
|
||||
if tile <> PIT_TILE
|
||||
screen.[ycentr-xbeam[l], xcentr-ybeam[l]] = tile & INV_TILE
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
@@ -686,25 +686,25 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
screen.[ycentr-xbeam[l], xcentr-ybeam[l]] = tile & INV_TILE
|
||||
darkness = 0
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
occluded = 1
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 7
|
||||
for l = 1 to dbeam[lightdist]
|
||||
@@ -714,17 +714,17 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap - 1) & INV_TILE
|
||||
vispix[l] = 1
|
||||
adjtile = ^(map + imap - 1) & INV_TILE
|
||||
if adjtile & OPAQUE_TILE
|
||||
^(viewmap + imap - 1) = adjtile | VIEWED_TILE
|
||||
screen.[ycentr-ybeam[l], xcentr-xbeam[l]-1] = adjtile
|
||||
fin
|
||||
fin
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
if tile <> PIT_TILE
|
||||
if tile <> PIT_TILE
|
||||
screen.[ycentr-ybeam[l], xcentr-xbeam[l]] = tile & INV_TILE
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
@@ -736,25 +736,25 @@ export def drawmap(xorg, yorg, viewfield, viewdir, lightdist, viewdist)
|
||||
if tile & OPAQUE_TILE
|
||||
vispix[l] = 0
|
||||
else
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
vispix[l] = 1
|
||||
occluded = 0
|
||||
fin
|
||||
if tile & LIT_TILE
|
||||
^(viewmap + imap) = tile | VIEWED_TILE
|
||||
screen.[ycentr-ybeam[l], xcentr-xbeam[l]] = tile & INV_TILE
|
||||
darkness = 0
|
||||
fin
|
||||
fin
|
||||
else
|
||||
vispix[l] = 0
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
if l == dbeam[dist]
|
||||
if occluded
|
||||
break
|
||||
fin
|
||||
occluded = 1
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
dist = dist + 1
|
||||
fin
|
||||
next
|
||||
break
|
||||
wend
|
||||
next
|
||||
|
@@ -535,47 +535,47 @@ def play
|
||||
is KEY_TILE
|
||||
player.key = 1
|
||||
updtmaptile(player.xpos, player.ypos, FLOOR_TILE)
|
||||
gotit
|
||||
break
|
||||
gotit
|
||||
break
|
||||
is RAFT_TILE
|
||||
player.raft = 1
|
||||
updtmaptile(player.xpos, player.ypos, FLOOR_TILE)
|
||||
gotit
|
||||
break
|
||||
gotit
|
||||
break
|
||||
is GOLD_TILE
|
||||
player.gold = player.gold + 1
|
||||
updtmaptile(player.xpos, player.ypos, FLOOR_TILE)
|
||||
gotit
|
||||
gotit
|
||||
break
|
||||
is TORCH_TILE
|
||||
if player.oil < 1000
|
||||
if player.oil < 1000
|
||||
player:oil = player:oil + TORCH_OIL
|
||||
if player:oil > 1000
|
||||
player:oil = 1000
|
||||
fin
|
||||
if player:oil > 1000
|
||||
player:oil = 1000
|
||||
fin
|
||||
setmaptile(player.xpos, player.ypos, FLOOR_TILE)
|
||||
for yt = player.ypos - 1 to player.ypos + 1
|
||||
for xt = player.xpos - 1 to player.xpos + 1
|
||||
setmaptile(xt, yt, getmaptile(xt, yt) & MAP_TILE)
|
||||
next
|
||||
next
|
||||
gotit
|
||||
fin
|
||||
for xt = player.xpos - 1 to player.xpos + 1
|
||||
setmaptile(xt, yt, getmaptile(xt, yt) & MAP_TILE)
|
||||
next
|
||||
next
|
||||
gotit
|
||||
fin
|
||||
break
|
||||
is FOOD_TILE
|
||||
if player.health < 100 or player.energy < 100
|
||||
if player.health < 100 or player.energy < 100
|
||||
player.health = player.health + MANA/2
|
||||
if player.health > 100
|
||||
player.health = 100
|
||||
fin
|
||||
if player.health > 100
|
||||
player.health = 100
|
||||
fin
|
||||
player.energy = player.energy + MANA
|
||||
if player.energy > 100
|
||||
player.energy = 100
|
||||
fin
|
||||
updtmaptile(player.xpos, player.ypos, FLOOR_TILE)
|
||||
player.fov = 1
|
||||
gotit
|
||||
fin
|
||||
if player.energy > 100
|
||||
player.energy = 100
|
||||
fin
|
||||
updtmaptile(player.xpos, player.ypos, FLOOR_TILE)
|
||||
player.fov = 1
|
||||
gotit
|
||||
fin
|
||||
break
|
||||
wend
|
||||
break
|
||||
|
637
src/samplesrc/sfm.pla
Normal file
637
src/samplesrc/sfm.pla
Normal file
@@ -0,0 +1,637 @@
|
||||
//
|
||||
// Ziggy Stardust and the Spiders from Mars
|
||||
//
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/hgrlib.plh"
|
||||
include "inc/hgrsprite.plh"
|
||||
include "inc/joybuzz.plh"
|
||||
sysflags reshgr1 // Reserve HGR page 1
|
||||
|
||||
const NUMSTARS = 32
|
||||
const SHIP_SPRTNUM = 0
|
||||
const MISSLE_SPRTNUM = 1
|
||||
const WEB_SPRTBASE = 2
|
||||
const SPIDER_SPRTEBASE = 8
|
||||
const LASER_RECHARGE = 20
|
||||
const MISSLE_RELOAD = 10
|
||||
const ATTACK_SPEED = 12
|
||||
const SWARM_LIMIT = 52
|
||||
const FASTMOVE_LIMIT = 120
|
||||
const WEB_LIMIT = 152
|
||||
const YSHIP = 180
|
||||
const LASER_BUZZ = 20
|
||||
const ATTACK_BUZZ = 5
|
||||
const WEB1_BUZZ = 10
|
||||
const WEB2_BUZZ = 12
|
||||
const WEB3_BUZZ = 14
|
||||
const SPLAT_BUZZ = 40
|
||||
|
||||
var sprtEgg1, sprtEgg2, sprtEgg3, sprtEgg
|
||||
var sprtSpider1, sprtSpider2, sprtSpider3, sprtSpider
|
||||
var sprtSplat1, sprtSplat2
|
||||
var sprtWeb1, sprtWeb2, sprtWeb3
|
||||
var sprtShip, sprtMissle, sprtDummy, heapstart
|
||||
var[NUMSTARS] xstar
|
||||
byte[NUMSTARS] ystar
|
||||
byte curstar, buzz
|
||||
|
||||
//
|
||||
// Apple II speaker tone generator routine
|
||||
//
|
||||
//asm spkrTone(pitch, duration)#0
|
||||
byte _spkrTone[]
|
||||
byte = $86, $E5 // STX ESP
|
||||
byte = $B4, $C0 // LDY ESTKH,X
|
||||
byte = $B5, $D0 // LDA ESTKL,X
|
||||
byte = $F0, $01 // BEQ +1
|
||||
byte = $C8 // INY
|
||||
byte = $85, $08 // STA DSTL
|
||||
byte = $84, $09 // STY DSTH
|
||||
byte = $B4, $C1 // LDY ESTKL+1,X
|
||||
byte = $B5, $D1 // LDA ESTKL+1,X
|
||||
byte = $F0, $01 // BEQ +1
|
||||
byte = $C8 // INY
|
||||
byte = $85, $E7 // STA TMPL
|
||||
byte = $84, $E8 // STY TMPH
|
||||
byte = $AA // TAX
|
||||
byte = $A9, $FF // LDA #$FF
|
||||
byte = $08 // PHP
|
||||
byte = $78 // SEI
|
||||
byte = $EA // NOP
|
||||
byte = $EA // NOP
|
||||
byte = $B0, $00 // BCS +0
|
||||
byte = $38 // SEC
|
||||
byte = $CA // DEX
|
||||
byte = $D0, $18 // BNE +18
|
||||
byte = $88 // DEY
|
||||
byte = $D0, $17 // BNE +17
|
||||
byte = $2C, $30, $C0 // BIT $C030
|
||||
byte = $A6, $E7 // LDX TMPL
|
||||
byte = $A4, $E8 // LDY TMPH
|
||||
byte = $E9, $01 // SBC #$01
|
||||
byte = $B0, $EA // BCS -EA
|
||||
byte = $C6, $08 // DEC DSTL
|
||||
byte = $D0, $EA // BNE -EA
|
||||
byte = $C6, $09 // DEC DSTH
|
||||
byte = $D0, $E6 // BNE -E6
|
||||
byte = $F0, $07 // BEQ +8
|
||||
byte = $EA // NOP
|
||||
byte = $EA // NOP
|
||||
byte = $EA, $EA // BIT $C000 (nope)
|
||||
byte = $EA // NOP
|
||||
byte = $D0, $EB // BNE -EA
|
||||
byte = $28 // PLP
|
||||
byte = $A6, $E5 // LDX ESP
|
||||
byte = $E8 // INX
|
||||
byte = $E8 // INX
|
||||
byte = $60 // RTS
|
||||
|
||||
def game(spdrcnt)#1
|
||||
var[8] xspdr, yspdr, ixspdr, iyspdr, hatch
|
||||
var xship, xmissle, leftxlaser, rightxlaser, attack
|
||||
byte[8] life, death
|
||||
byte lasercharging, missleloading, misslecnt, ymissle
|
||||
byte leftylaser, rightylaser, lefthit, righthit, sprtnum[], width
|
||||
byte spdrnum, k, xdelta, ydelta, btn0, btn1, webstate
|
||||
|
||||
xship = 140
|
||||
ymissle = 255 // Not active value
|
||||
misslecnt = 6
|
||||
missleloading = FALSE
|
||||
lasercharging = FALSE
|
||||
//
|
||||
// Initialize the spiders (first is special)
|
||||
//
|
||||
xspdr[0] = 100
|
||||
ixspdr[0] = 1
|
||||
yspdr[0] = 60
|
||||
iyspdr[0] = -1
|
||||
hatch[0] = 1
|
||||
life[0] = 3
|
||||
death[0] = 0
|
||||
attack = -1
|
||||
webstate = 0
|
||||
//
|
||||
// Initialize spiders
|
||||
//
|
||||
spdrnum = spdrcnt - 1
|
||||
for k = 1 to spdrnum
|
||||
spriteAdd(k + SPIDER_SPRTEBASE, spriteDup(sprtEgg3))
|
||||
xspdr[k] = ((xspdr[k - 1] ^ 37) + 97) & 255
|
||||
ixspdr[k] = -ixspdr[k - 1]
|
||||
yspdr[k] = ((yspdr[k - 1] ^ 29) + 53) & 63
|
||||
iyspdr[k] = -iyspdr[k - 1]
|
||||
hatch[k] = k / 2 + 1//hatch[k - 1] + 1
|
||||
life[k] = 3
|
||||
death[k] = 0
|
||||
next
|
||||
//
|
||||
// Initialize missle display
|
||||
//
|
||||
hgrColor(3)
|
||||
hgrRect(0, YSHIP+3, 279, 191)
|
||||
for k = 0 to misslecnt-1
|
||||
spritePos(k * 16 + 160, 184, sprtMissle)
|
||||
spriteDrawXor(sprtMissle)
|
||||
next
|
||||
hgrColor(1)
|
||||
hgrRect(4, YSHIP+6, LASER_RECHARGE * 4 + 4, 188)
|
||||
//
|
||||
// Main game loop
|
||||
//
|
||||
repeat
|
||||
//
|
||||
// Move living spiders
|
||||
//
|
||||
for k = 0 to spdrnum
|
||||
if life[k]
|
||||
yspdr[k] = yspdr[k] + iyspdr[k]
|
||||
if yspdr[k] < -5
|
||||
//
|
||||
// Above screen
|
||||
//
|
||||
iyspdr[k] = 1
|
||||
if hatch[k]
|
||||
hatch[k]--
|
||||
if hatch[k] == 0
|
||||
//
|
||||
// Hatch this egg into a spider
|
||||
//
|
||||
life[k] = 3 // Reset life
|
||||
spriteAdd(k + SPIDER_SPRTEBASE, spriteDup(sprtSpider3))
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
if yspdr[k] > SWARM_LIMIT
|
||||
//
|
||||
// Attack or not?
|
||||
//
|
||||
if hatch[k] == 0 and attack < 0
|
||||
attack = k
|
||||
iyspdr[k] = ATTACK_SPEED
|
||||
fin
|
||||
if attack == k
|
||||
//
|
||||
// Attacking
|
||||
//
|
||||
if yspdr[k] > WEB_LIMIT
|
||||
//
|
||||
// Iterate through web sequence
|
||||
//
|
||||
when webstate
|
||||
is 10
|
||||
iyspdr[k] = -8 // Retreat
|
||||
yspdr[k] = WEB_LIMIT
|
||||
spriteDel(2)
|
||||
spriteDel(3)
|
||||
spriteDel(4)
|
||||
webstate = 0
|
||||
break
|
||||
is 0
|
||||
iyspdr[k] = 0
|
||||
spriteAdd(2, sprtWeb1)
|
||||
spritePosIndex(xspdr[k], WEB_LIMIT+7, 2)
|
||||
buzz = WEB1_BUZZ
|
||||
webstate = 1
|
||||
break
|
||||
is 1
|
||||
spriteAdd(3, sprtWeb2)
|
||||
spritePosIndex(xspdr[k], WEB_LIMIT+15, 3)
|
||||
buzz = WEB2_BUZZ
|
||||
webstate = 2
|
||||
break
|
||||
is 2
|
||||
spriteAdd(4, sprtWeb3)
|
||||
spritePosIndex(xspdr[k], WEB_LIMIT+22, 4)
|
||||
webstate = 3
|
||||
otherwise
|
||||
//
|
||||
// States 3..9 just repeat this
|
||||
//
|
||||
if xship >= xspdr[k] - 17 and xship <= xspdr[k] + 17
|
||||
//
|
||||
// Capture ship
|
||||
//
|
||||
return FALSE
|
||||
fin
|
||||
buzz = WEB3_BUZZ
|
||||
webstate++
|
||||
wend
|
||||
else
|
||||
if iyspdr[k] > 0
|
||||
//
|
||||
// Move towards player during attack, but not too fast
|
||||
//
|
||||
xdelta = yspdr[k] > FASTMOVE_LIMIT ?? 2 :: 4
|
||||
xspdr[k] = xspdr[k] + (xship - xspdr[k]) / xdelta
|
||||
buzz = ATTACK_BUZZ
|
||||
else
|
||||
//
|
||||
// Retreat at a progressively faster rate
|
||||
//
|
||||
if ixspdr[k] > 0
|
||||
xspdr[k] = xspdr[k] + (WEB_LIMIT - yspdr[k]) / 8
|
||||
else
|
||||
xspdr[k] = xspdr[k] - (WEB_LIMIT - yspdr[k]) / 8
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
else
|
||||
//
|
||||
// Just reverse direction towards top of screen
|
||||
//
|
||||
iyspdr[k] = -1
|
||||
fin
|
||||
else
|
||||
if attack == k
|
||||
//
|
||||
// Retreated back to swarm zone so stop attack
|
||||
//
|
||||
attack = -1
|
||||
iyspdr[k] = -1
|
||||
fin
|
||||
//
|
||||
// Swarm movement
|
||||
//
|
||||
if ixspdr[k] > 0
|
||||
xspdr[k] = xspdr[k] + yspdr[k] / 8
|
||||
else
|
||||
xspdr[k] = xspdr[k] - yspdr[k] / 8
|
||||
fin
|
||||
if xspdr[k] < -5 or xspdr[k] > 284
|
||||
if xspdr[k] < -5
|
||||
xspdr[k] = -5
|
||||
ixspdr[k] = 1
|
||||
else
|
||||
xspdr[k] = 284
|
||||
ixspdr[k] = -1
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
spritePosIndex(xspdr[k], yspdr[k], k+SPIDER_SPRTEBASE)
|
||||
elsif death[k]
|
||||
//
|
||||
// Splat sequence
|
||||
//
|
||||
death[k]--
|
||||
if death[k]
|
||||
spriteAdd(k+SPIDER_SPRTEBASE, spriteDup(sprtSplat2))
|
||||
spritePosIndex(xspdr[k], yspdr[k], k+SPIDER_SPRTEBASE)
|
||||
else
|
||||
spriteAdd(k+SPIDER_SPRTEBASE, spriteDup(sprtDummy))
|
||||
spritePosIndex(0, 0, k+SPIDER_SPRTEBASE)
|
||||
spdrcnt--
|
||||
if not spdrcnt
|
||||
return TRUE
|
||||
fin
|
||||
buzz = SPLAT_BUZZ
|
||||
fin
|
||||
fin
|
||||
next
|
||||
//
|
||||
// Move ship
|
||||
//
|
||||
xdelta, ydelta, btn0, btn1 = joypos(buzz)
|
||||
buzz = spdrcnt * 4
|
||||
xship = xship + ((xdelta + 4) / 8 - 5)
|
||||
if xship < 0; xship = 0; fin
|
||||
if xship > 279; xship = 279; fin
|
||||
spritePosIndex(xship, YSHIP, SHIP_SPRTNUM)
|
||||
//
|
||||
// Missle
|
||||
//
|
||||
if misslecnt and missleloading
|
||||
missleloading--
|
||||
fin
|
||||
if btn1 and not missleloading and ymissle == 255
|
||||
//
|
||||
// Fire missle
|
||||
//
|
||||
xmissle = xship
|
||||
ymissle = YSHIP-15
|
||||
missleloading = MISSLE_RELOAD
|
||||
misslecnt--
|
||||
spritePos(misslecnt * 16 + 160, 184, sprtMissle) // Erase from armory
|
||||
spriteDrawXor(sprtMissle)
|
||||
spriteAdd(1, sprtMissle)
|
||||
fin
|
||||
if ymissle <> 255
|
||||
if ymissle < 8
|
||||
//
|
||||
// Missle off top of screen
|
||||
//
|
||||
spriteDel(1)
|
||||
ymissle = 255
|
||||
else
|
||||
ymissle = ymissle - 8
|
||||
spritePosIndex(xmissle, ymissle, MISSLE_SPRTNUM)
|
||||
for k = 0 to spdrnum
|
||||
if life[k]
|
||||
//
|
||||
// Hit test will all living spiders
|
||||
//
|
||||
if ymissle >= yspdr[k] - 15 and ymissle <= yspdr[k] + 5
|
||||
if hatch[k]
|
||||
width = 7 // Egg width
|
||||
else
|
||||
width = 10 // Spider width
|
||||
fin
|
||||
if xmissle >= xspdr[k] - width and xmissle <= xspdr[k] + width
|
||||
//
|
||||
// Hit & kill spider
|
||||
//
|
||||
life[k] = 0
|
||||
death[k] = 2
|
||||
spriteAdd(k+SPIDER_SPRTEBASE, spriteDup(sprtSplat1))
|
||||
spritePosIndex(xspdr[k], yspdr[k], k+SPIDER_SPRTEBASE)
|
||||
if attack == k // Was it attacking?
|
||||
attack = -1
|
||||
spriteDel(2)
|
||||
spriteDel(3)
|
||||
spriteDel(4)
|
||||
webstate = 0
|
||||
fin
|
||||
//
|
||||
// Remove missle
|
||||
//
|
||||
spriteDel(MISSLE_SPRTNUM)
|
||||
ymissle = 255
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
next
|
||||
buzz = ymissle/4
|
||||
fin
|
||||
fin
|
||||
//
|
||||
// Update sprites
|
||||
//
|
||||
spriteDrawXorList()
|
||||
//
|
||||
// Lasers
|
||||
//
|
||||
if lasercharging
|
||||
lasercharging--
|
||||
hgrColor(1)
|
||||
hgrRect(81 - lasercharging*4, YSHIP+6, 84 - lasercharging*4, 188)
|
||||
fin
|
||||
if btn0 and not lasercharging
|
||||
//
|
||||
// Fire laser
|
||||
//
|
||||
hgrColor(0)
|
||||
hgrRect(4, YSHIP+6, LASER_RECHARGE * 4 + 4, 188)
|
||||
lasercharging = LASER_RECHARGE
|
||||
leftxlaser = xship - 7
|
||||
rightxlaser = xship + 7
|
||||
leftylaser = 0
|
||||
rightylaser = 0
|
||||
lefthit = 255
|
||||
righthit = 255
|
||||
for k = 0 to spdrnum
|
||||
if life[k]
|
||||
//
|
||||
// Hit test will all living spiders
|
||||
//
|
||||
if hatch[k]
|
||||
width = 7 // Egg width
|
||||
else
|
||||
width = 10 // Spider width
|
||||
fin
|
||||
if leftxlaser >= xspdr[k]-width and leftxlaser <= xspdr[k]+width
|
||||
if yspdr[k] + 5 > leftylaser
|
||||
lefthit = k
|
||||
leftylaser = yspdr[k] + 5
|
||||
fin
|
||||
fin
|
||||
if rightxlaser >= xspdr[k]-width and rightxlaser <= xspdr[k]+width
|
||||
if yspdr[k] + 5 > rightylaser
|
||||
righthit = k
|
||||
rightylaser = yspdr[k] + 5
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
next
|
||||
//
|
||||
// Draw Laser beams
|
||||
//
|
||||
hgrColor(3)
|
||||
if leftxlaser >= 0
|
||||
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser)
|
||||
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser+1)
|
||||
fin
|
||||
if rightxlaser < 280
|
||||
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser)
|
||||
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser-1)
|
||||
fin
|
||||
buzz = LASER_BUZZ
|
||||
(@_spkrTone)(15, 1)#0
|
||||
if lefthit <> 255
|
||||
sprtnum = lefthit + SPIDER_SPRTEBASE
|
||||
//
|
||||
// Hit
|
||||
//
|
||||
life[lefthit]--
|
||||
if not life[lefthit]
|
||||
//
|
||||
// Kill spider
|
||||
//
|
||||
death[lefthit] = 2
|
||||
spriteAdd(sprtnum, spriteDup(sprtSplat1))
|
||||
spritePosIndex(xspdr[lefthit], yspdr[lefthit], sprtnum)
|
||||
if attack == lefthit // Was it attacking?
|
||||
spriteDel(2)
|
||||
spriteDel(3)
|
||||
spriteDel(4)
|
||||
webstate = 0
|
||||
attack = -1
|
||||
fin
|
||||
else
|
||||
//
|
||||
// Dim color to show life status
|
||||
//
|
||||
if hatch[lefthit]
|
||||
sprtEgg = life[lefthit] == 2 ?? sprtEgg2 :: sprtEgg1
|
||||
spriteAdd(sprtnum, spriteDup(sprtEgg))
|
||||
else
|
||||
sprtSpider = life[lefthit] == 2 ?? sprtSpider2 :: sprtSpider1
|
||||
spriteAdd(sprtnum, spriteDup(sprtSpider))
|
||||
fin
|
||||
spritePosIndex(xspdr[lefthit], yspdr[lefthit], sprtnum)
|
||||
fin
|
||||
fin
|
||||
if righthit <> 255 and life[righthit]
|
||||
sprtnum = righthit + SPIDER_SPRTEBASE
|
||||
//
|
||||
// Hit
|
||||
//
|
||||
life[righthit]--
|
||||
if not life[righthit]
|
||||
//
|
||||
// Kill spider
|
||||
//
|
||||
death[righthit] = 2
|
||||
spriteAdd(sprtnum, spriteDup(sprtSplat1))
|
||||
spritePosIndex(xspdr[righthit], yspdr[righthit], sprtnum)
|
||||
if attack == righthit // Was it attacking?
|
||||
spriteDel(2)
|
||||
spriteDel(3)
|
||||
spriteDel(4)
|
||||
webstate = 0
|
||||
attack = -1
|
||||
fin
|
||||
else
|
||||
//
|
||||
// Dim color to show life status
|
||||
//
|
||||
if hatch[righthit]
|
||||
sprtEgg = life[righthit] == 2 ?? sprtEgg2 :: sprtEgg1
|
||||
spriteAdd(sprtnum, spriteDup(sprtEgg))
|
||||
else
|
||||
sprtSpider = life[righthit] == 2 ?? sprtSpider2 :: sprtSpider1
|
||||
spriteAdd(sprtnum, spriteDup(sprtSpider))
|
||||
fin
|
||||
spritePosIndex(xspdr[righthit], yspdr[righthit], sprtnum)
|
||||
fin
|
||||
fin
|
||||
//
|
||||
// Undraw lasers
|
||||
//
|
||||
hgrColor(3)
|
||||
if leftxlaser >= 0
|
||||
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser)
|
||||
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser+1)
|
||||
fin
|
||||
if rightxlaser < 280
|
||||
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser)
|
||||
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser-1)
|
||||
fin
|
||||
fin
|
||||
//
|
||||
// Update stars
|
||||
//
|
||||
hgrColor(3)
|
||||
hgrXorPlot(xstar[curstar], ystar[curstar])
|
||||
ystar[curstar]++
|
||||
if ystar[curstar] > YSHIP
|
||||
ystar[curstar] = 0
|
||||
fin
|
||||
hgrXorPlot(xstar[curstar], ystar[curstar])
|
||||
curstar++
|
||||
if curstar >= NUMSTARS; curstar = 0; fin
|
||||
until ^$C000 == $9B // ESCape key pressed
|
||||
getc
|
||||
return FALSE
|
||||
end
|
||||
//
|
||||
// Initialization
|
||||
//
|
||||
puts("Loading");
|
||||
putc('.')
|
||||
sprtShip = spriteRead("SHIP")
|
||||
if not sprtShip
|
||||
cmdsys:modexec("SFMSPRT")
|
||||
sprtShip = spriteRead("SHIP")
|
||||
if not sprtShip
|
||||
puts("\nError: Unable to compile sprites.\n")
|
||||
return -1
|
||||
fin
|
||||
fin
|
||||
putc('.')
|
||||
sprtMissle = spriteRead("MISSLE")
|
||||
putc('.')
|
||||
sprtEgg3 = spriteRead("EGG3")
|
||||
putc('.')
|
||||
sprtEgg2 = spriteRead("EGG2")
|
||||
putc('.')
|
||||
sprtEgg1 = spriteRead("EGG1")
|
||||
putc('.')
|
||||
sprtSpider3= spriteRead("SPIDER3")
|
||||
putc('.')
|
||||
sprtSpider2= spriteRead("SPIDER2")
|
||||
putc('.')
|
||||
sprtSpider1= spriteRead("SPIDER1")
|
||||
putc('.')
|
||||
sprtWeb1 = spriteRead("WEB1")
|
||||
putc('.')
|
||||
sprtWeb2 = spriteRead("WEB2")
|
||||
putc('.')
|
||||
sprtWeb3 = spriteRead("WEB3")
|
||||
putc('.')
|
||||
sprtSplat1 = spriteRead("SPLAT1")
|
||||
putc('.')
|
||||
sprtSplat2 = spriteRead("SPLAT2")
|
||||
putc('.')
|
||||
sprtDummy = spriteRead("DUMMY")
|
||||
//
|
||||
// Heat up JIT compiler
|
||||
//
|
||||
for curstar = 0 to 50
|
||||
putc('.')
|
||||
spriteAdd(0, sprtDummy)
|
||||
spritePosIndex(0, 0, 0)
|
||||
spriteDrawXorList()
|
||||
next
|
||||
heapstart = heapmark()
|
||||
//puts("\nBeginning available memory: "); puti(heapavail()); putln
|
||||
repeat
|
||||
hgrMode(TRUE)
|
||||
spriteDrawBuf(hgrDrawBuf(0)) // Single buffered
|
||||
spriteAdd(SHIP_SPRTNUM, sprtShip)
|
||||
spriteAdd(SPIDER_SPRTEBASE, sprtEgg3)
|
||||
//
|
||||
// Init stars
|
||||
//
|
||||
xstar[0] = 99
|
||||
ystar[0] = 10
|
||||
hgrColor(3)
|
||||
hgrXorPlot(xstar[0], ystar[0])
|
||||
for curstar = 1 to NUMSTARS-1
|
||||
xstar[curstar] = (xstar[curstar - 1] + 97 - curstar) % 280
|
||||
ystar[curstar] = (ystar[curstar - 1] + 19 + curstar) % YSHIP
|
||||
hgrXorPlot(xstar[curstar], ystar[curstar])
|
||||
next
|
||||
curstar = 0
|
||||
if game(8)
|
||||
//
|
||||
// Won
|
||||
//
|
||||
spriteDrawXorList()
|
||||
(@_spkrTone)(100, 20)#0
|
||||
(@_spkrTone)(75, 20)#0
|
||||
(@_spkrTone)(15, 20)#0
|
||||
(@_spkrTone)(25, 100)#0
|
||||
puts("\nZiggy Stardust has saved Earth!\n")
|
||||
else
|
||||
//
|
||||
// Lost
|
||||
//
|
||||
spriteDrawXorList()
|
||||
(@_spkrTone)(100, 50)#0
|
||||
spriteDrawXor(sprtShip)
|
||||
(@_spkrTone)(150, 50)#0
|
||||
spriteDrawXor(sprtShip)
|
||||
(@_spkrTone)(100, 50)#0
|
||||
spriteDrawXor(sprtShip)
|
||||
(@_spkrTone)(150, 50)#0
|
||||
puts("\nEarth has been overrun")
|
||||
puts("\nby the Spiders from Mars\n")
|
||||
fin
|
||||
hgrMode(FALSE)
|
||||
//
|
||||
// Clear sprite lists
|
||||
//
|
||||
for curstar = 0 to 15
|
||||
spriteDel(curstar)
|
||||
next
|
||||
spriteDrawXorList()
|
||||
spriteDrawXorList()
|
||||
//
|
||||
// Reset heap
|
||||
//
|
||||
heaprelease(heapstart)
|
||||
//puts("\nAvailable memory: "); puti(heapavail()); putln
|
||||
puts("Play again (Y/N)?")
|
||||
until toupper(getc) <> 'Y'
|
||||
putln
|
||||
done
|
203
src/samplesrc/sfmsprt.pla
Normal file
203
src/samplesrc/sfmsprt.pla
Normal file
@@ -0,0 +1,203 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/hgrlib.plh"
|
||||
include "inc/hgrsprite.plh"
|
||||
sysflags reshgr1 // Reserve HGR page 1
|
||||
|
||||
|
||||
byte egg3 = $88,$88,$83,$33,$38,$88,$88
|
||||
byte = $88,$83,$33,$11,$33,$38,$88
|
||||
byte = $83,$31,$11,$11,$11,$13,$38
|
||||
byte = $33,$11,$11,$11,$11,$11,$33
|
||||
byte = $33,$11,$11,$11,$11,$11,$33
|
||||
byte = $33,$11,$11,$11,$11,$11,$33
|
||||
byte = $33,$11,$11,$11,$11,$11,$33
|
||||
byte = $33,$11,$11,$11,$11,$11,$33
|
||||
byte = $33,$11,$11,$11,$11,$11,$33
|
||||
byte = $83,$31,$11,$11,$11,$13,$38
|
||||
byte = $88,$83,$33,$11,$33,$38,$88
|
||||
byte = $88,$88,$83,$33,$38,$88,$88
|
||||
byte egg2 = $88,$88,$83,$33,$38,$88,$88
|
||||
byte = $88,$83,$33,$11,$33,$38,$88
|
||||
byte = $83,$30,$11,$00,$11,$13,$38
|
||||
byte = $33,$11,$00,$11,$00,$11,$33
|
||||
byte = $33,$00,$11,$00,$11,$00,$33
|
||||
byte = $33,$11,$00,$11,$00,$11,$33
|
||||
byte = $33,$00,$11,$00,$11,$00,$33
|
||||
byte = $33,$11,$00,$11,$00,$11,$33
|
||||
byte = $33,$00,$11,$00,$11,$00,$33
|
||||
byte = $83,$31,$00,$11,$00,$13,$38
|
||||
byte = $88,$83,$33,$00,$33,$38,$88
|
||||
byte = $88,$88,$83,$33,$38,$88,$88
|
||||
byte egg1 = $88,$88,$83,$33,$38,$88,$88
|
||||
byte = $88,$83,$33,$00,$33,$38,$88
|
||||
byte = $83,$30,$00,$00,$00,$03,$38
|
||||
byte = $33,$00,$00,$00,$00,$00,$33
|
||||
byte = $33,$00,$00,$00,$00,$00,$33
|
||||
byte = $33,$00,$00,$00,$00,$00,$33
|
||||
byte = $33,$00,$00,$00,$00,$00,$33
|
||||
byte = $33,$00,$00,$00,$00,$00,$33
|
||||
byte = $33,$00,$00,$00,$00,$00,$33
|
||||
byte = $83,$30,$00,$00,$00,$03,$38
|
||||
byte = $88,$83,$33,$11,$33,$38,$88
|
||||
byte = $88,$88,$83,$33,$38,$88,$88
|
||||
byte spider3 = $33,$88,$88,$33,$33,$33,$33,$88,$88,$33
|
||||
byte = $33,$88,$83,$32,$22,$22,$23,$38,$88,$33
|
||||
byte = $83,$38,$83,$32,$22,$22,$23,$38,$83,$38
|
||||
byte = $88,$83,$33,$22,$22,$22,$22,$33,$38,$88
|
||||
byte = $33,$88,$33,$22,$22,$22,$22,$33,$88,$33
|
||||
byte = $88,$33,$38,$33,$22,$22,$33,$83,$33,$88
|
||||
byte = $88,$88,$83,$33,$22,$22,$33,$38,$88,$88
|
||||
byte = $88,$33,$33,$33,$22,$22,$33,$33,$33,$88
|
||||
byte = $33,$88,$88,$88,$33,$33,$88,$88,$88,$33
|
||||
byte = $88,$88,$33,$33,$22,$22,$33,$33,$88,$88
|
||||
byte = $88,$33,$88,$33,$22,$22,$33,$88,$33,$88
|
||||
byte = $33,$88,$88,$83,$32,$23,$38,$88,$88,$33
|
||||
byte = $88,$88,$88,$88,$33,$33,$88,$88,$88,$88
|
||||
byte spider2 = $33,$88,$88,$33,$33,$33,$33,$88,$88,$33
|
||||
byte = $33,$88,$83,$30,$02,$20,$03,$38,$88,$33
|
||||
byte = $83,$38,$83,$32,$20,$02,$23,$38,$83,$38
|
||||
byte = $88,$83,$33,$20,$02,$20,$02,$33,$38,$88
|
||||
byte = $33,$88,$33,$02,$20,$02,$20,$33,$88,$33
|
||||
byte = $88,$33,$38,$30,$02,$20,$03,$83,$33,$88
|
||||
byte = $88,$88,$83,$33,$20,$02,$33,$38,$88,$88
|
||||
byte = $88,$33,$33,$30,$02,$20,$03,$33,$33,$88
|
||||
byte = $33,$88,$88,$88,$33,$33,$88,$88,$88,$33
|
||||
byte = $88,$88,$33,$30,$02,$20,$03,$33,$88,$88
|
||||
byte = $88,$33,$88,$33,$20,$02,$33,$88,$33,$88
|
||||
byte = $33,$88,$88,$83,$32,$23,$38,$88,$88,$33
|
||||
byte = $88,$88,$88,$88,$33,$33,$88,$88,$88,$88
|
||||
byte spider1 = $33,$88,$88,$33,$33,$33,$33,$88,$88,$33
|
||||
byte = $33,$88,$83,$30,$00,$00,$03,$38,$88,$33
|
||||
byte = $83,$38,$83,$30,$00,$00,$03,$38,$83,$38
|
||||
byte = $88,$83,$33,$00,$00,$00,$00,$33,$38,$88
|
||||
byte = $33,$88,$33,$00,$00,$00,$00,$33,$88,$33
|
||||
byte = $88,$33,$38,$33,$00,$00,$33,$83,$33,$88
|
||||
byte = $88,$88,$83,$33,$00,$00,$33,$38,$88,$88
|
||||
byte = $88,$33,$33,$30,$00,$00,$03,$33,$33,$88
|
||||
byte = $33,$88,$88,$88,$33,$33,$88,$88,$88,$33
|
||||
byte = $88,$88,$33,$30,$00,$00,$03,$33,$88,$88
|
||||
byte = $88,$33,$88,$33,$00,$00,$33,$88,$33,$88
|
||||
byte = $33,$88,$88,$83,$30,$03,$38,$88,$88,$33
|
||||
byte = $88,$88,$88,$88,$33,$33,$88,$88,$88,$88
|
||||
byte web1 = $88,$83,$38,$88
|
||||
byte = $88,$38,$83,$88
|
||||
byte = $88,$38,$83,$88
|
||||
byte = $88,$33,$33,$88
|
||||
byte = $83,$38,$83,$38
|
||||
byte = $83,$38,$83,$38
|
||||
byte = $83,$38,$83,$38
|
||||
byte = $33,$33,$33,$33
|
||||
byte web2 = $88,$33,$83,$38,$33,$88
|
||||
byte = $88,$38,$83,$38,$83,$88
|
||||
byte = $83,$38,$83,$38,$83,$38
|
||||
byte = $83,$33,$33,$33,$33,$38
|
||||
byte = $83,$38,$83,$38,$83,$38
|
||||
byte = $83,$38,$83,$38,$83,$38
|
||||
byte = $33,$88,$83,$38,$88,$33
|
||||
byte = $33,$33,$33,$33,$33,$33
|
||||
byte web3 = $88,$83,$38,$83,$38,$83,$38,$83,$38,$88
|
||||
byte = $88,$83,$38,$83,$38,$83,$38,$83,$38,$88
|
||||
byte = $88,$33,$88,$33,$88,$88,$33,$88,$33,$88
|
||||
byte = $88,$33,$33,$33,$33,$33,$33,$33,$33,$88
|
||||
byte = $83,$38,$88,$33,$83,$38,$33,$88,$83,$38
|
||||
byte = $83,$38,$83,$38,$83,$38,$83,$38,$83,$38
|
||||
byte = $33,$88,$83,$38,$83,$38,$83,$38,$88,$33
|
||||
byte = $33,$38,$33,$33,$33,$33,$33,$33,$33,$33
|
||||
byte splat1 = $88,$88,$88,$22,$22,$22,$22,$88,$88,$88
|
||||
byte = $88,$88,$88,$22,$11,$11,$22,$88,$88,$88
|
||||
byte = $88,$88,$88,$22,$11,$11,$22,$88,$88,$88
|
||||
byte = $88,$82,$22,$11,$11,$11,$11,$22,$28,$88
|
||||
byte = $22,$22,$22,$11,$11,$11,$11,$22,$22,$22
|
||||
byte = $88,$22,$28,$22,$11,$11,$22,$82,$22,$88
|
||||
byte = $88,$88,$82,$22,$11,$11,$22,$28,$88,$88
|
||||
byte = $88,$22,$22,$22,$11,$11,$22,$22,$22,$88
|
||||
byte = $22,$22,$88,$88,$22,$22,$88,$88,$22,$22
|
||||
byte = $88,$88,$22,$22,$11,$11,$22,$22,$88,$88
|
||||
byte = $88,$22,$22,$22,$11,$11,$22,$22,$22,$88
|
||||
byte = $22,$22,$88,$82,$21,$12,$28,$88,$22,$22
|
||||
byte = $88,$88,$88,$88,$22,$22,$88,$88,$88,$88
|
||||
byte splat2 = $88,$88,$88,$88,$22,$22,$22,$22,$88,$88,$88,$88
|
||||
byte = $88,$88,$88,$88,$22,$11,$11,$22,$88,$88,$88,$88
|
||||
byte = $88,$88,$88,$82,$22,$11,$11,$22,$88,$88,$88,$88
|
||||
byte = $88,$88,$88,$22,$11,$11,$11,$11,$22,$88,$88,$88
|
||||
byte = $88,$88,$82,$22,$11,$18,$81,$11,$22,$28,$88,$88
|
||||
byte = $88,$22,$22,$22,$11,$88,$88,$11,$22,$22,$22,$88
|
||||
byte = $22,$28,$82,$22,$11,$88,$88,$11,$22,$28,$82,$22
|
||||
byte = $88,$88,$22,$28,$88,$88,$88,$88,$82,$22,$88,$88
|
||||
byte = $88,$88,$88,$22,$88,$88,$88,$11,$22,$88,$88,$88
|
||||
byte = $88,$88,$22,$22,$11,$88,$88,$11,$22,$22,$88,$88
|
||||
byte = $88,$22,$22,$22,$11,$18,$81,$11,$22,$22,$22,$88
|
||||
byte = $88,$88,$88,$22,$11,$18,$81,$11,$22,$88,$88,$88
|
||||
byte = $88,$88,$22,$22,$11,$11,$11,$11,$22,$22,$88,$88
|
||||
byte = $88,$22,$22,$88,$22,$11,$11,$22,$88,$22,$22,$88
|
||||
byte = $22,$28,$88,$88,$88,$22,$22,$88,$88,$88,$82,$22
|
||||
byte = $88,$88,$22,$22,$22,$11,$11,$22,$22,$22,$88,$88
|
||||
byte = $88,$88,$22,$28,$22,$11,$11,$22,$82,$22,$88,$88
|
||||
byte ship = $CC,$CC,$CC,$77,$CC,$CC,$CC
|
||||
byte = $CC,$CC,$C7,$77,$7C,$CC,$CC
|
||||
byte = $CC,$CC,$C7,$77,$7C,$CC,$CC
|
||||
byte = $CC,$CC,$C7,$77,$7C,$CC,$CC
|
||||
byte = $CC,$CC,$C7,$77,$7C,$CC,$CC
|
||||
byte = $77,$CC,$77,$66,$77,$CC,$77
|
||||
byte = $77,$CC,$77,$66,$77,$CC,$77
|
||||
byte = $77,$CC,$77,$66,$77,$CC,$77
|
||||
byte = $77,$CC,$77,$77,$77,$CC,$77
|
||||
byte = $77,$CC,$77,$77,$77,$CC,$77
|
||||
byte = $77,$CC,$77,$77,$77,$CC,$77
|
||||
byte = $77,$C7,$77,$77,$77,$7C,$77
|
||||
byte = $77,$77,$75,$55,$57,$77,$77
|
||||
byte = $77,$77,$75,$55,$57,$77,$77
|
||||
byte missle = $CC,$55,$CC
|
||||
byte = $CC,$55,$CC
|
||||
byte = $CC,$55,$CC
|
||||
byte = $CC,$55,$CC
|
||||
byte = $CC,$55,$CC
|
||||
byte = $CC,$55,$CC
|
||||
byte = $C5,$55,$5C
|
||||
byte = $55,$55,$55
|
||||
byte dummy = $88,$88,$88,$88
|
||||
byte = $88,$88,$88,$88
|
||||
byte = $88,$88,$88,$88
|
||||
byte = $88,$88,$88,$88
|
||||
byte = $88,$88,$88,$88
|
||||
byte = $88,$88,$88,$88
|
||||
byte = $88,$88,$88,$88
|
||||
byte = $88,$88,$88,$88
|
||||
var sprtEgg1, sprtEgg2, sprtEgg3
|
||||
var sprtSpider1, sprtSpider2, sprtSpider3
|
||||
var sprtSplat1, sprtSplat2
|
||||
var sprtWeb1, sprtWeb2, sprtWeb3
|
||||
var sprtShip, sprtMissle, sprtDummy
|
||||
|
||||
hgrMode(TRUE)
|
||||
spriteDrawBuf(hgrDrawBuf(0)) // So we can see the compile process
|
||||
sprtShip = spriteCompile(14, 14, 7, 13, @ship)
|
||||
sprtMissle = spriteCompile( 6, 8, 3, 0, @missle)
|
||||
sprtEgg3 = spriteCompile(14, 12, 7, 6, @egg3)
|
||||
sprtEgg2 = spriteCompile(14, 12, 7, 6, @egg2)
|
||||
sprtEgg1 = spriteCompile(14, 12, 7, 6, @egg1)
|
||||
sprtSpider3= spriteCompile(20, 13, 10, 6, @spider3)
|
||||
sprtSpider2= spriteCompile(20, 13, 10, 6, @spider2)
|
||||
sprtSpider1= spriteCompile(20, 13, 10, 6, @spider1)
|
||||
sprtWeb1 = spriteCompile( 8, 8, 4, 0, @web1)
|
||||
sprtWeb2 = spriteCompile(12, 8, 6, 0, @web2)
|
||||
sprtWeb3 = spriteCompile(20, 8, 10, 0, @web3)
|
||||
sprtSplat1 = spriteCompile(20, 13, 10, 6, @splat1)
|
||||
sprtSplat2 = spriteCompile(24, 17, 12, 8, @splat2)
|
||||
sprtDummy = spriteCompile( 7, 8, 0, 0, @dummy)
|
||||
hgrMode(FALSE)
|
||||
spriteSave("SHIP", sprtShip)
|
||||
spriteSave("MISSLE", sprtMissle)
|
||||
spriteSave("EGG3", sprtEgg3)
|
||||
spriteSave("EGG2", sprtEgg2)
|
||||
spriteSave("EGG1", sprtEgg1)
|
||||
spriteSave("SPIDER1", sprtSpider1)
|
||||
spriteSave("SPIDER2", sprtSpider2)
|
||||
spriteSave("SPIDER3", sprtSpider3)
|
||||
spriteSave("WEB1", sprtWeb1)
|
||||
spriteSave("WEB2", sprtWeb2)
|
||||
spriteSave("WEB3", sprtWeb3)
|
||||
spriteSave("SPLAT1", sprtSplat1)
|
||||
spriteSave("SPLAT2", sprtSplat2)
|
||||
spriteSave("DUMMY", sprtDummy)
|
||||
done
|
13
src/samplesrc/tiletest.pla
Normal file
13
src/samplesrc/tiletest.pla
Normal file
@@ -0,0 +1,13 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/hgrtile.plh"
|
||||
include "inc/hgrfont.plh"
|
||||
sysflags reshgr1 // Reserve HGR page 1
|
||||
|
||||
tileMode(TRUE)
|
||||
hgrPutStr(5, 1, "Hello HiRes Tile Demo")
|
||||
getc
|
||||
tileFromText(0, @hgrFont)
|
||||
getc
|
||||
tileMode(FALSE)
|
||||
done
|
||||
|
27
src/tftpbld
27
src/tftpbld
@@ -6,9 +6,12 @@ echo "BLD/CODEOPT"; atftp $1 --put -l rel/CODEOPT#FE1000 -r $2/BLD/CODEOPT#FE10
|
||||
|
||||
#Build incs
|
||||
echo "BLD/INC/ARGS.PLH"; atftp $1 --put -l inc/args.plh -r $2/BLD/INC/ARGS.PLH#040000
|
||||
echo "BLD/INC/MATCHFILES.PLH"; atftp $1 --put -l inc/matchfiles.plh -r $2/BLD/INC/MATCHFILES.PLH#040000
|
||||
echo "BLD/INC/CMDSYS.PLH"; atftp $1 --put -l inc/cmdsys.plh -r $2/BLD/INC/CMDSYS.PLH#040000
|
||||
echo "BLD/INC/CONIO.PLH"; atftp $1 --put -l inc/conio.plh -r $2/BLD/INC/CONIO.PLH#040000
|
||||
echo "BLD/INC/LINES.PLH"; atftp $1 --put -l inc/lines.plh -r $2/BLD/INC/LINES.PLH#040000
|
||||
echo "BLD/INC/HGRTILE.PLH"; atftp $1 --put -l inc/hgrtile.plh -r $2/BLD/INC/HGRTILE.PLH#040000
|
||||
echo "BLD/INC/HGRFONT.PLH";atftp $1 --put -l inc/hgrfont.plh -r $2/BLD/INC/HGRFONT.PLH#040000
|
||||
echo "BLD/INC/HGRSPRITE.PLH";atftp $1 --put -l inc/hgrsprite.plh -r $2/BLD/INC/HGRSPRITE.PLH#040000
|
||||
echo "BLD/INC/HGRLIB.PLH"; atftp $1 --put -l inc/hgrlib.plh -r $2/BLD/INC/HGRLIB.PLH#040000
|
||||
echo "BLD/INC/GRLIB.PLH"; atftp $1 --put -l inc/grlib.plh -r $2/BLD/INC/GRLIB.PLH#040000
|
||||
@@ -43,32 +46,16 @@ echo "BLD/SAMPLES/INT32TEST.PLA"; atftp $1 --put -l samplesrc/int32test.pla -r $
|
||||
echo "BLD/SAMPLES/HGRTEST.PLA"; atftp $1 --put -l samplesrc/hgrtest.pla -r $2/BLD/SAMPLES/HGRTEST.PLA#040000
|
||||
echo "BLD/SAMPLES/GRTEST.PLA"; atftp $1 --put -l samplesrc/grtest.pla -r $2/BLD/SAMPLES/GRTEST.PLA#040000
|
||||
echo "BLD/SAMPLES/DGRTEST.PLA"; atftp $1 --put -l samplesrc/dgrtest.pla -r $2/BLD/SAMPLES/DGRTEST.PLA#040000
|
||||
echo "BLD/SAMPLES/TILETEST.PLA"; atftp $1 --put -l samplesrc/tiletest.pla -r $2/BLD/SAMPLES/TILETEST.PLA#040000
|
||||
echo "BLD/SAMPLES/HGRTEST.PLA"; atftp $1 --put -l samplesrc/hgrtest.pla -r $2/BLD/SAMPLES/HGRTEST.PLA#040000
|
||||
echo "BLD/SAMPLES/PLAYSEQ.PLA"; atftp $1 --put -l samplesrc/playseq.pla -r $2/BLD/SAMPLES/PLAYSEQ.PLA#040000
|
||||
echo "BLD/SAMPLES/RPNCALC.PLA"; atftp $1 --put -l samplesrc/rpncalc.pla -r $2/BLD/SAMPLES/RPNCALC.PLA#040000
|
||||
echo "BLD/SAMPLES/SIEVE.PLA"; atftp $1 --put -l samplesrc/sieve.pla -r $2/BLD/SAMPLES/SIEVE.PLA#040000
|
||||
echo "BLD/SAMPLES/MON.PLA"; atftp $1 --put -l utilsrc/apple/mon.pla -r $2/BLD/SAMPLES/MON.PLA#040000
|
||||
echo "BLD/SAMPLES/MEMTEST.PLA"; atftp $1 --put -l samplesrc/memtest.pla -r $2/BLD/SAMPLES/MEMTEST.PLA#040000
|
||||
echo "BLD/SAMPLES/FATCAT.PLA"; atftp $1 --put -l samplesrc/fatcat.pla -r $2/BLD/SAMPLES/FATCAT.PLA#040000
|
||||
echo "BLD/SAMPLES/GFXDEMO.PLA"; atftp $1 --put -l samplesrc/gfxdemo.pla -r $2/BLD/SAMPLES/GFXDEMO.PLA#040000
|
||||
echo "BLD/SAMPLES/LZ4CAT.PLA"; atftp $1 --put -l samplesrc/lz4cat.pla -r $2/BLD/SAMPLES/LZ4CAT.PLA#040000
|
||||
|
||||
# Examples from video series
|
||||
echo "BLD/EXAMPLES/EX.1.PLA"; atftp $1 --put -l samplesrc/examples/ex.1.pla -r $2/BLD/EXAMPLES/EX.1.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.2.PLA"; atftp $1 --put -l samplesrc/examples/ex.2.pla -r $2/BLD/EXAMPLES/EX.2.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.3.PLA"; atftp $1 --put -l samplesrc/examples/ex.3.pla -r $2/BLD/EXAMPLES/EX.3.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.4.PLA"; atftp $1 --put -l samplesrc/examples/ex.4.pla -r $2/BLD/EXAMPLES/EX.4.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.5.PLA"; atftp $1 --put -l samplesrc/examples/ex.5.pla -r $2/BLD/EXAMPLES/EX.5.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.6.PLA"; atftp $1 --put -l samplesrc/examples/ex.6.pla -r $2/BLD/EXAMPLES/EX.6.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.7.PLA"; atftp $1 --put -l samplesrc/examples/ex.7.pla -r $2/BLD/EXAMPLES/EX.7.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.8.PLA"; atftp $1 --put -l samplesrc/examples/ex.8.pla -r $2/BLD/EXAMPLES/EX.8.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.9.PLA"; atftp $1 --put -l samplesrc/examples/ex.9.pla -r $2/BLD/EXAMPLES/EX.9.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.10.PLA"; atftp $1 --put -l samplesrc/examples/ex.10.pla -r $2/BLD/EXAMPLES/EX.10.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.11.PLA"; atftp $1 --put -l samplesrc/examples/ex.11.pla -r $2/BLD/EXAMPLES/EX.11.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.12.PLA"; atftp $1 --put -l samplesrc/examples/ex.12.pla -r $2/BLD/EXAMPLES/EX.12.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.13.PLA"; atftp $1 --put -l samplesrc/examples/ex.13.pla -r $2/BLD/EXAMPLES/EX.13.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.14.PLA"; atftp $1 --put -l samplesrc/examples/ex.14.pla -r $2/BLD/EXAMPLES/EX.14.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.15.PLA"; atftp $1 --put -l samplesrc/examples/ex.15.pla -r $2/BLD/EXAMPLES/EX.15.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.16.PLA"; atftp $1 --put -l samplesrc/examples/ex.16.pla -r $2/BLD/EXAMPLES/EX.16.PLA#040000
|
||||
echo "BLD/EXAMPLES/EX.17.PLA"; atftp $1 --put -l samplesrc/examples/ex.17.pla -r $2/BLD/EXAMPLES/EX.17.PLA#040000
|
||||
echo "BLD/SAMPLES/SFM.PLA"; atftp $1 --put -l samplesrc/sfm.pla -r $2/BLD/SAMPLES/SFM.PLA#040000
|
||||
echo "BLD/SAMPLES/SFMSPRT.PLA"; atftp $1 --put -l samplesrc/sfmsprt.pla -r $2/BLD/SAMPLES/SFMSPRT.PLA#040000
|
||||
echo "BLD/SAMPLES/MON.PLA"; atftp $1 --put -l utilsrc/apple/mon.pla -r $2/BLD/SAMPLES/MON.PLA#040000
|
||||
|
||||
|
@@ -5,15 +5,13 @@ echo "DEMOS/RPNCALC"; atftp $1 --put -l rel/RPNCALC#FE1000
|
||||
echo "DEMOS/LZ4CAT"; atftp $1 --put -l rel/LZ4CAT#FE1000 -r $2/DEMOS/LZ4CAT#FE1000
|
||||
echo "DEMOS/SIEVE"; atftp $1 --put -l rel/SIEVE#FE1000 -r $2/DEMOS/SIEVE#FE1000
|
||||
echo "DEMOS/ROD"; atftp $1 --put -l rel/apple/ROD#FE1000 -r $2/DEMOS/ROD#FE1000
|
||||
echo "DEMOS/HGRTEST"; atftp $1 --put -l rel/apple/HGRTEST#FE1000 -r $2/DEMOS/HGRTEST#FE1000
|
||||
echo "DEMOS/GRTEST"; atftp $1 --put -l rel/apple/GRTEST#FE1000 -r $2/DEMOS/GRTEST#FE1000
|
||||
echo "DEMOS/INT32TEST"; atftp $1 --put -l rel/INT32TEST#FE1000 -r $2/DEMOS/INT32TEST#FE1000
|
||||
echo "DEMOS/DGRTEST"; atftp $1 --put -l rel/apple/DGRTEST#FE1000 -r $2/DEMOS/DGRTEST#FE1000
|
||||
|
||||
# Music demo
|
||||
echo "DEMOS/MUSIC/PLAYSEQ"; atftp $1 --put -l rel/apple/PLAYSEQ#FE1000 -r $2/DEMOS/MUSIC/PLAYSEQ#FE1000
|
||||
atftp $1 --put -l mockingboard/ultima3.seq -r $2/DEMOS/MUSIC/ULTIMA3.SEQ#060000
|
||||
atftp $1 --put -l mockingboard/startrek.seq -r $2/DEMOS/MUSIC/STARTREK.SEQ#060000
|
||||
|
||||
# Rogue demo
|
||||
echo "DEMOS/ROGUE/ROGUE"; atftp $1 --put -l rel/ROGUE#FE1000 -r $2/DEMOS/ROGUE/ROGUE#FE1000
|
||||
echo "DEMOS/ROGUE/ROGUEMAP"; atftp $1 --put -l rel/ROGUEMAP#FE1000 -r $2/DEMOS/ROGUE/ROGUEMAP#FE1000
|
||||
@@ -21,15 +19,26 @@ echo "DEMOS/ROGUE/ROGUECOMBAT"; atftp $1 --put -l rel/ROGUECOMBAT#FE1000
|
||||
atftp $1 --put -l samplesrc/LEVEL0#040000 -r $2/DEMOS/ROGUE/LEVEL0#040000
|
||||
atftp $1 --put -l samplesrc/LEVEL1#040000 -r $2/DEMOS/ROGUE/LEVEL1#040000
|
||||
|
||||
# Arduino+SD card demos
|
||||
echo "DEMOS/SDUTILS/SPIPORT"; atftp $1 --put -l rel/apple/SPIPORT#FE1000 -r $2/DEMOS/SDUTILS/SPIPORT#FE1000
|
||||
echo "DEMOS/SDUTILS/SDFAT"; atftp $1 --put -l rel/apple/SDFAT#FE1000 -r $2/DEMOS/SDUTILS/SDFAT#FE1000
|
||||
echo "DEMOS/SDUTILS/FATCAT"; atftp $1 --put -l rel/apple/FATCAT#FE1000 -r $2/DEMOS/SDUTILS/FATCAT#FE1000
|
||||
echo "DEMOS/SDUTILS/FATGET"; atftp $1 --put -l rel/apple/FATGET#FE1000 -r $2/DEMOS/SDUTILS/FATGET#FE1000
|
||||
echo "DEMOS/SDUTILS/FATPUT"; atftp $1 --put -l rel/apple/FATPUT#FE1000 -r $2/DEMOS/SDUTILS/FATPUT#FE1000
|
||||
echo "DEMOS/SDUTILS/FATREADDSK"; atftp $1 --put -l rel/apple/FATREADDSK#FE1000 -r $2/DEMOS/SDUTILS/FATREADDSK#FE1000
|
||||
echo "DEMOS/SDUTILS/FATWRITEDSK"; atftp $1 --put -l rel/apple/FATWRITEDSK#FE1000 -r $2/DEMOS/SDUTILS/FATWRITEDSK#FE1000
|
||||
|
||||
# Net demos
|
||||
echo "DEMOS/NET/HTTPD"; atftp $1 --put -l rel/HTTPD#FE1000 -r $2/DEMOS/NET/HTTPD#FE1000
|
||||
atftp $1 --put -l samplesrc/index.html -r $2/DEMOS/NET/INDEX.HTML#040000
|
||||
|
||||
# Apple 2 demos
|
||||
echo "DEMOS/APPLE2/TILETEST"; atftp $1 --put -l rel/apple/TILETEST#FE1000 -r $2/DEMOS/APPLE2/TILETEST#FE1000
|
||||
echo "DEMOS/APPLE2/HGRTEST"; atftp $1 --put -l rel/apple/HGRTEST#FE1000 -r $2/DEMOS/APPLE2/HGRTEST#FE1000
|
||||
echo "DEMOS/APPLE2/GRTEST"; atftp $1 --put -l rel/apple/GRTEST#FE1000 -r $2/DEMOS/APPLE2/GRTEST#FE1000
|
||||
echo "DEMOS/APPLE2/DGRTEST"; atftp $1 --put -l rel/apple/DGRTEST#FE1000 -r $2/DEMOS/APPLE2/DGRTEST#FE1000
|
||||
|
||||
# Spiders from Mars
|
||||
echo "DEMOS/APPLE2/SPIDERS/SFM"; atftp $1 --put -l rel/apple/SFM#FE1000 -r $2/DEMOS/APPLE2/SPIDERS/SFM#FE1000
|
||||
echo "DEMOS/APPLE2/SPIDERS/SFMSPRT"; atftp $1 --put -l rel/apple/SFMSPRT#FE1000 -r $2/DEMOS/APPLE2/SPIDERS/SFMSPRT#FE1000
|
||||
|
||||
# Arduino+SD card demos
|
||||
echo "DEMOS/APPLE2/SDUTILS/SPIPORT"; atftp $1 --put -l rel/apple/SPIPORT#FE1000 -r $2/DEMOS/APPLE2/SDUTILS/SPIPORT#FE1000
|
||||
echo "DEMOS/APPLE2/SDUTILS/SDFAT"; atftp $1 --put -l rel/apple/SDFAT#FE1000 -r $2/DEMOS/APPLE2/SDUTILS/SDFAT#FE1000
|
||||
echo "DEMOS/APPLE2/SDUTILS/FATCAT"; atftp $1 --put -l rel/apple/FATCAT#FE1000 -r $2/DEMOS/APPLE2/SDUTILS/FATCAT#FE1000
|
||||
echo "DEMOS/APPLE2/SDUTILS/FATGET"; atftp $1 --put -l rel/apple/FATGET#FE1000 -r $2/DEMOS/APPLE2/SDUTILS/FATGET#FE1000
|
||||
echo "DEMOS/APPLE2/SDUTILS/FATPUT"; atftp $1 --put -l rel/apple/FATPUT#FE1000 -r $2/DEMOS/APPLE2/SDUTILS/FATPUT#FE1000
|
||||
echo "DEMOS/APPLE2/SDUTILS/FATREADDSK"; atftp $1 --put -l rel/apple/FATREADDSK#FE1000 -r $2/DEMOS/APPLE2/SDUTILS/FATREADDSK#FE1000
|
||||
echo "DEMOS/APPLE2/SDUTILS/FATWRITEDSK"; atftp $1 --put -l rel/apple/FATWRITEDSK#FE1000 -r $2/DEMOS/APPLE2/SDUTILS/FATWRITEDSK#FE1000
|
||||
|
||||
|
@@ -11,6 +11,7 @@ echo "SYS/JIT16"; atftp $1 --put -l rel/apple/JIT16#FE1000 -r $2/SYS/JIT16#F
|
||||
echo "SYS/JITUNE"; atftp $1 --put -l rel/apple/JITUNE#FE1000 -r $2/SYS/JITUNE#FE1000
|
||||
|
||||
# Core libraries
|
||||
echo "SYS/MATCHFILES"; atftp $1 --put -l rel/apple/MATCHFILES#FE1000 -r $2/SYS/MATCHFILES#FE1000
|
||||
echo "SYS/ARGS"; atftp $1 --put -l rel/ARGS#FE1000 -r $2/SYS/ARGS#FE1000
|
||||
echo "SYS/INT32"; atftp $1 --put -l rel/INT32#FE1000 -r $2/SYS/INT32#FE1000
|
||||
echo "SYS/DHCP"; atftp $1 --put -l rel/DHCP#FE1000 -r $2/SYS/DHCP#FE1000
|
||||
@@ -22,6 +23,8 @@ echo "SYS/LONGJUMP"; atftp $1 --put -l rel/LONGJMP#FE1000 -r $2/SYS/LONGJMP#FE10
|
||||
echo "SYS/MEMMGR"; atftp $1 --put -l rel/MEMMGR#FE1000 -r $2/SYS/MEMMGR#FE1000
|
||||
echo "SYS/LZ4"; atftp $1 --put -l rel/LZ4#FE1000 -r $2/SYS/LZ4#FE1000
|
||||
echo "SYS/CONIO"; atftp $1 --put -l rel/apple/CONIO#FE1000 -r $2/SYS/CONIO#FE1000
|
||||
echo "SYS/HGRTILE"; atftp $1 --put -l rel/apple/HGRTILE#FE1000 -r $2/SYS/HGRTILE#FE1000
|
||||
echo "SYS/HGRFONT"; atftp $1 --put -l rel/apple/HGRFONT#FE1000 -r $2/SYS/HGRFONT#FE1000
|
||||
echo "SYS/HGRSPRITE"; atftp $1 --put -l rel/apple/HGRSPRITE#FE1000 -r $2/SYS/HGRSPRITE#FE1000
|
||||
echo "SYS/LINES"; atftp $1 --put -l rel/LINES#FE1000 -r $2/SYS/LINES#FE1000
|
||||
echo "SYS/HGRLIB"; atftp $1 --put -l rel/apple/HGRLIB#FE1000 -r $2/SYS/HGRLIB#FE1000
|
||||
|
@@ -11,3 +11,4 @@ echo "SYS/NEWDIR"; atftp $1 --put -l rel/apple/NEWDIR#FE1000 -r $2/SYS/NEWDIR#
|
||||
echo "SYS/TYPE"; atftp $1 --put -l rel/apple/TYPE#FE1000 -r $2/SYS/TYPE#FE1000
|
||||
echo "SYS/MON"; atftp $1 --put -l rel/apple/MON#FE1000 -r $2/SYS/MON#FE1000
|
||||
echo "SYS/SOS"; atftp $1 --put -l rel/apple/SOS#FE1000 -r $2/SYS/SOS#FE1000
|
||||
echo "SYS/ZIPCHIP"; atftp $1 --put -l rel/apple/ZIPCHIP#FE1000 -r $2/SYS/ZIPCHIP#FE1000
|
||||
|
@@ -247,7 +247,7 @@ def strpoolalloc(size)
|
||||
end
|
||||
def striplead(strptr, chr)#0
|
||||
byte striplen
|
||||
|
||||
|
||||
for striplen = 1 to ^strptr
|
||||
if ^(strptr + striplen) <> chr
|
||||
break
|
||||
@@ -391,7 +391,7 @@ end
|
||||
def strtonum(strptr)
|
||||
word num, i
|
||||
byte c
|
||||
|
||||
|
||||
num = 0
|
||||
for i = 1 to ^strptr
|
||||
c = ^(strptr + i) & $7F
|
||||
@@ -438,29 +438,38 @@ def readtxt(filename, startline)#0
|
||||
putln
|
||||
end
|
||||
def writetxt(filename)#0
|
||||
word i, strptr
|
||||
byte refnum, j, chr
|
||||
byte txtbuf[MAXLNLEN+2]
|
||||
word i
|
||||
byte refnum, txtbuf[MAXLNLEN+2]
|
||||
|
||||
fileio:destroy(filename)
|
||||
fileio:create(filename, $04, $00) // full access, TXT file
|
||||
refnum = fileio:open(filename)
|
||||
if refnum == 0
|
||||
return
|
||||
fin
|
||||
//
|
||||
// Remove blank lines at end of text.
|
||||
//
|
||||
while numlines > 1 and txtlinbuf=>[numlines - 1] == @nullstr; numlines--; loop
|
||||
//
|
||||
// Write all the text line to the file.
|
||||
// Delete old file and re-create
|
||||
//
|
||||
fileio:destroy(filename)
|
||||
fileio:create(filename, $04, $00) // full access, TXT file
|
||||
refnum = fileio:open(filename)
|
||||
if refnum == 0
|
||||
puts("\nError $"); puth(perr); puts(" opening: "); puts(filename); putln
|
||||
return
|
||||
fin
|
||||
//
|
||||
// Write all the text lines to the file.
|
||||
//
|
||||
for i = 0 to numlines - 1
|
||||
lncpy(@txtbuf, txtlinbuf=>[i])
|
||||
fileio:write(refnum, @txtbuf + 1, txtbuf)
|
||||
if fileio:write(refnum, @txtbuf + 1, txtbuf) <> txtbuf
|
||||
puts("\nError $"); puth(perr); puts(" writing: "); puts(filename); putln
|
||||
fileio:close(refnum)
|
||||
return
|
||||
fin
|
||||
if !(i & $0F); putc('.'); fin
|
||||
next
|
||||
fileio:close(refnum)
|
||||
if fileio:close(refnum) <> FILE_ERR_OK
|
||||
puts("\nError $"); puth(perr); puts(" closing: "); puts(filename)
|
||||
fin
|
||||
putln
|
||||
end
|
||||
//
|
||||
@@ -558,7 +567,7 @@ end
|
||||
def drawscrn(toprow, ofst)#0
|
||||
byte row, numchars, lofst
|
||||
word strptr, scrnptr
|
||||
|
||||
|
||||
lofst = flags & gutter
|
||||
if lofst
|
||||
drawgutter(toprow, ofst)
|
||||
@@ -598,7 +607,7 @@ def drawscrn(toprow, ofst)#0
|
||||
end
|
||||
def cursoff#0
|
||||
word scrnptr
|
||||
|
||||
|
||||
if flags & showcurs
|
||||
^cursptr = underchr
|
||||
if flags & gutter
|
||||
@@ -607,13 +616,13 @@ def cursoff#0
|
||||
^(scrnptr+2) = ^(scrnptr+2) | $80
|
||||
fin
|
||||
flags = flags & ~showcurs
|
||||
|
||||
|
||||
fin
|
||||
end
|
||||
def curson#0
|
||||
byte lofst
|
||||
word scrnptr
|
||||
|
||||
|
||||
if !(flags & showcurs)
|
||||
lofst = flags & gutter
|
||||
if lofst
|
||||
@@ -644,7 +653,7 @@ def redraw#0
|
||||
end
|
||||
def curshpos(hpos)#1
|
||||
byte needredraw
|
||||
|
||||
|
||||
needredraw = TRUE
|
||||
if hpos < 0; hpos = 0; fin
|
||||
if hpos > MAXLNLEN; hpos = MAXLNLEN; fin
|
||||
@@ -777,7 +786,7 @@ def cursleft#0
|
||||
end
|
||||
def pgleft#0
|
||||
word i, strptr
|
||||
|
||||
|
||||
strptr = txtlinbuf=>[cursrow]
|
||||
if curscol > ^strptr
|
||||
i = ^strptr
|
||||
@@ -818,7 +827,7 @@ def cursright#0
|
||||
end
|
||||
def pgright#0
|
||||
word i, strptr
|
||||
|
||||
|
||||
strptr = txtlinbuf=>[cursrow]
|
||||
if curscol >= ^strptr
|
||||
i = curscol + 8
|
||||
@@ -849,7 +858,7 @@ end
|
||||
//
|
||||
def findline(strptr, start)#1
|
||||
byte scan, i, upstr[MAXLNLEN+1]
|
||||
|
||||
|
||||
if ^strptr >= findstr
|
||||
lnupcpy(@upstr, strptr)
|
||||
for scan = start to upstr - findstr + 1
|
||||
@@ -1098,7 +1107,7 @@ def printtxt(slot)#0
|
||||
end
|
||||
def freesel#0
|
||||
word i
|
||||
|
||||
|
||||
for i = 0 to numcliplines - 1
|
||||
if cliplinbuf=>[i] <> @nullstr
|
||||
delstr(cliplinbuf=>[i])
|
||||
@@ -1109,7 +1118,7 @@ def freesel#0
|
||||
end
|
||||
def selrange#2
|
||||
word first, last
|
||||
|
||||
|
||||
if flags & selection
|
||||
if cursrow > selrow
|
||||
first, last = selrow, cursrow
|
||||
@@ -1129,7 +1138,7 @@ def beginsel#0
|
||||
end
|
||||
def copysel#0
|
||||
word firstsel, lastsel
|
||||
|
||||
|
||||
freesel
|
||||
firstsel, lastsel = selrange
|
||||
for numcliplines = 0 to lastsel - firstsel
|
||||
@@ -1140,7 +1149,7 @@ def copysel#0
|
||||
end
|
||||
def cutsel#0
|
||||
word firstsel, lastsel
|
||||
|
||||
|
||||
freesel
|
||||
firstsel, lastsel = selrange
|
||||
if lastsel - firstsel < MAXCLIPLINES
|
||||
@@ -1169,7 +1178,7 @@ def cutsel#0
|
||||
end
|
||||
def pastesel#0
|
||||
word p
|
||||
|
||||
|
||||
if numcliplines and numcliplines + numlines < MAXLINES
|
||||
memcpy(@txtlinbuf=>[cursrow + numcliplines], @txtlinbuf=>[cursrow], (numlines - cursrow) * 2)
|
||||
for p = 0 to numcliplines - 1
|
||||
@@ -1183,9 +1192,9 @@ def pastesel#0
|
||||
fin
|
||||
end
|
||||
def indentsel#0
|
||||
byte indentstr[MAXLNLEN+1], l
|
||||
byte indentstr[MAXLNLEN+1], j, l
|
||||
word firstsel, lastsel, i
|
||||
|
||||
|
||||
freesel
|
||||
firstsel, lastsel = selrange
|
||||
for i = firstsel to lastsel
|
||||
@@ -1195,6 +1204,18 @@ def indentsel#0
|
||||
indentstr[0] = l + 2
|
||||
indentstr[1] = keyspace
|
||||
indentstr[2] = keyspace
|
||||
//
|
||||
// Align indent
|
||||
//
|
||||
for j = 3 to indentstr[0]
|
||||
if indentstr[j] <> keyspace
|
||||
if j & 1 == 0
|
||||
indentstr[0]--
|
||||
memcpy(@indentstr + 1, @indentstr + 2, indentstr[0])
|
||||
fin
|
||||
break
|
||||
fin
|
||||
next
|
||||
delstr(txtlinbuf=>[i])
|
||||
txtlinbuf=>[i] = newstr(@indentstr)
|
||||
flags = flags | changed
|
||||
@@ -1205,7 +1226,7 @@ end
|
||||
def undentsel#0
|
||||
byte undentstr[MAXLNLEN+1], l
|
||||
word firstsel, lastsel, i
|
||||
|
||||
|
||||
freesel
|
||||
firstsel, lastsel = selrange
|
||||
for i = firstsel to lastsel
|
||||
@@ -1230,12 +1251,12 @@ def undentsel#0
|
||||
end
|
||||
def autoindent(strptr)#0
|
||||
byte i
|
||||
|
||||
|
||||
for i = 1 to ^strptr
|
||||
if ^(strptr + i) <> keyspace
|
||||
break
|
||||
fin
|
||||
next
|
||||
next
|
||||
curshpos(i - 1)
|
||||
end
|
||||
def openline(row)
|
||||
@@ -1289,7 +1310,7 @@ def splitline#0
|
||||
memcpy(@splitstr + 2, @splitstr + 1, splitstr)
|
||||
splitstr[1] = keyspace
|
||||
splitstr++
|
||||
next
|
||||
next
|
||||
txtlinbuf=>[cursrow + 1] = newstr(@splitstr)
|
||||
splitstr = curscol
|
||||
memcpy(@splitstr + 1, txtlinbuf=>[cursrow] + 1, splitstr)
|
||||
@@ -1303,7 +1324,7 @@ def splitline#0
|
||||
break
|
||||
fin
|
||||
next
|
||||
curshpos(curscol - 1)
|
||||
curshpos(curscol - 1)
|
||||
fin
|
||||
fin
|
||||
else
|
||||
@@ -1518,7 +1539,7 @@ def prfiles(optpath)
|
||||
byte firstblk
|
||||
byte entrylen, entriesblk
|
||||
byte i, type, len
|
||||
word databuff, entry, filecnt
|
||||
word databuff, entry
|
||||
|
||||
if ^optpath
|
||||
strstripcpy(@path, optpath)
|
||||
@@ -1533,37 +1554,31 @@ def prfiles(optpath)
|
||||
return perr
|
||||
fin
|
||||
firstblk = 1
|
||||
repeat
|
||||
if fileio:read(refnum, databuff, 512) == 512
|
||||
entry = databuff + 4
|
||||
if firstblk
|
||||
entrylen = databuff->$23
|
||||
entriesblk = databuff->$24
|
||||
filecnt = databuff=>$25
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
for i = firstblk to entriesblk
|
||||
type = ^entry
|
||||
if type <> 0
|
||||
len = type & $0F
|
||||
^entry = len
|
||||
puts(entry)
|
||||
if type & $F0 == $D0 // Is it a directory?
|
||||
putc('/')
|
||||
len++
|
||||
fin
|
||||
for len = 20 - len downto 1
|
||||
putc(' ')
|
||||
next
|
||||
filecnt--
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
else
|
||||
filecnt = 0
|
||||
while fileio:read(refnum, databuff, 512) == 512
|
||||
entry = databuff + 4
|
||||
if firstblk
|
||||
entrylen = databuff->$23
|
||||
entriesblk = databuff->$24
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
until filecnt == 0
|
||||
for i = firstblk to entriesblk
|
||||
type = ^entry
|
||||
if type <> 0
|
||||
len = type & $0F
|
||||
^entry = len
|
||||
puts(entry)
|
||||
if type & $F0 == $D0 // Is it a directory?
|
||||
putc('/')
|
||||
len++
|
||||
fin
|
||||
for len = 20 - len downto 1
|
||||
putc(' ')
|
||||
next
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
loop
|
||||
fileio:close(refnum)
|
||||
heaprelease(databuff)
|
||||
putln
|
||||
@@ -1600,7 +1615,7 @@ def cmdmode#0
|
||||
word cmdptr, line
|
||||
|
||||
clrscrn
|
||||
puts("PLASMA Editor, Version 2.0 DP2\n")
|
||||
puts("PLASMA Editor, Version 2.0 DP4\n")
|
||||
while not exit
|
||||
puts(@filename)
|
||||
cmdptr = gets($BA)
|
||||
|
3173
src/toolsrc/forthtran.c
Normal file
3173
src/toolsrc/forthtran.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -685,7 +685,7 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
|
||||
}
|
||||
return (cat_seq(codeseq, valseq));
|
||||
}
|
||||
t_opseq *parse_expr(t_opseq *codeseq, int *stackdepth)
|
||||
t_opseq *parse_subexpr(t_opseq *codeseq, int *stackdepth)
|
||||
{
|
||||
int prevmatch;
|
||||
int matchop = 0;
|
||||
@@ -744,7 +744,7 @@ t_opseq *parse_expr(t_opseq *codeseq, int *stackdepth)
|
||||
parse_error("AND must evaluate to single value");
|
||||
tag_and = tag_new(BRANCH_TYPE);
|
||||
codeseq = gen_brand(codeseq, tag_and);
|
||||
codeseq = parse_expr(codeseq, &stackdepth1);
|
||||
codeseq = parse_subexpr(codeseq, &stackdepth1);
|
||||
if (stackdepth1 != *stackdepth)
|
||||
parse_error("Inconsistent AND value counts");
|
||||
codeseq = gen_codetag(codeseq, tag_and);
|
||||
@@ -761,12 +761,24 @@ t_opseq *parse_expr(t_opseq *codeseq, int *stackdepth)
|
||||
parse_error("OR must evaluate to single value");
|
||||
tag_or = tag_new(BRANCH_TYPE);
|
||||
codeseq = gen_bror(codeseq, tag_or);
|
||||
codeseq = parse_expr(codeseq, &stackdepth1);
|
||||
codeseq = parse_subexpr(codeseq, &stackdepth1);
|
||||
if (stackdepth1 != *stackdepth)
|
||||
parse_error("Inconsistent AND value counts");
|
||||
codeseq = gen_codetag(codeseq, tag_or);
|
||||
}
|
||||
else if (scantoken == TERNARY_TOKEN)
|
||||
return (codeseq);
|
||||
}
|
||||
t_opseq *parse_expr(t_opseq *codeseq, int *stackdepth)
|
||||
{
|
||||
int prevmatch;
|
||||
int matchop = 0;
|
||||
int optos = opsptr;
|
||||
int i, valdepth;
|
||||
int prevtype, type = 0;
|
||||
t_opseq *valseq;
|
||||
|
||||
codeseq = parse_subexpr(codeseq, stackdepth);
|
||||
if (scantoken == TERNARY_TOKEN)
|
||||
{
|
||||
int tag_else, tag_endtri;
|
||||
int stackdepth1;
|
||||
@@ -790,8 +802,7 @@ t_opseq *parse_expr(t_opseq *codeseq, int *stackdepth)
|
||||
codeseq = gen_codetag(codeseq, tag_endtri);
|
||||
}
|
||||
return (codeseq);
|
||||
}
|
||||
t_opseq *parse_set(t_opseq *codeseq)
|
||||
}t_opseq *parse_set(t_opseq *codeseq)
|
||||
{
|
||||
char *setptr = tokenstr;
|
||||
int lparms = 0, rparms = 0;
|
||||
|
@@ -493,7 +493,7 @@ def parse_value(codeseq, r_val)#2
|
||||
fin
|
||||
return cat_seq(codeseq, valseq), stackdepth
|
||||
end
|
||||
def parse_expr(codeseq)#2
|
||||
def parse_subexpr(codeseq)#2
|
||||
byte stackdepth, matchdepth, stkdepth1, prevmatch, matchop, i
|
||||
word optos
|
||||
word tag_else, tag_endop
|
||||
@@ -530,17 +530,25 @@ def parse_expr(codeseq)#2
|
||||
if stackdepth <> 1; exit_err(ERR_OVER|ERR_SYNTAX); fin
|
||||
tag_endop = new_tag(RELATIVE_FIXUP)
|
||||
codeseq = gen_oprel(codeseq, BRAND_CODE, tag_endop)
|
||||
codeseq, stkdepth1 = parse_expr(codeseq)
|
||||
codeseq, stkdepth1 = parse_subexpr(codeseq)
|
||||
if stkdepth1 <> stackdepth; exit_err(ERR_INVAL|ERR_CODE); fin
|
||||
codeseq = gen_ctag(codeseq, tag_endop)
|
||||
elsif token == LOGIC_OR_TKN
|
||||
if stackdepth <> 1; exit_err(ERR_OVER|ERR_SYNTAX); fin
|
||||
tag_endop = new_tag(RELATIVE_FIXUP)
|
||||
codeseq = gen_oprel(codeseq, BROR_CODE, tag_endop)
|
||||
codeseq, stkdepth1 = parse_expr(codeseq)
|
||||
codeseq, stkdepth1 = parse_subexpr(codeseq)
|
||||
if stkdepth1 <> stackdepth; exit_err(ERR_INVAL|ERR_CODE); fin
|
||||
codeseq = gen_ctag(codeseq, tag_endop)
|
||||
elsif token == TERNARY_TKN
|
||||
fin
|
||||
return codeseq, stackdepth
|
||||
end
|
||||
def parse_expr(codeseq)#2
|
||||
byte stackdepth, stkdepth1
|
||||
word tag_else, tag_endop
|
||||
|
||||
codeseq, stackdepth = parse_subexpr(codeseq)
|
||||
if token == TERNARY_TKN
|
||||
if stackdepth <> 1; exit_err(ERR_OVER|ERR_SYNTAX); fin
|
||||
tag_else = new_tag(RELATIVE_FIXUP)
|
||||
tag_endop = new_tag(RELATIVE_FIXUP)
|
||||
|
@@ -507,7 +507,7 @@ include "toolsrc/parse.pla"
|
||||
//
|
||||
// Look at command line arguments and compile module
|
||||
//
|
||||
puts("PLASMA Compiler, Version 2.0 DP2\n")
|
||||
puts("PLASMA Compiler, Version 2.0 DP4\n")
|
||||
arg = argNext(argFirst)
|
||||
if ^arg and ^(arg + 1) == '-'
|
||||
opt = arg + 2
|
||||
|
@@ -1,11 +1,14 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/longjmp.plh"
|
||||
include "inc/args.plh"
|
||||
include "inc/matchfiles.plh"
|
||||
include "inc/fileio.plh"
|
||||
include "inc/int32.plh"
|
||||
|
||||
var arg, refnum, dirbuf
|
||||
var page, firstblk, entrylen, entriesblk, i, entry, filecnt
|
||||
char[64] path, filename
|
||||
predef catalog(pathstr)#0
|
||||
|
||||
var arg, recurse, exit
|
||||
char[64] path, wildname
|
||||
res[t_fileinfo] fileinfo
|
||||
res[t_fileentry] fileentry
|
||||
//
|
||||
@@ -25,17 +28,23 @@ def putb(b)#0
|
||||
fin
|
||||
putc(h)
|
||||
end
|
||||
def strupper(strptr)#0
|
||||
//
|
||||
// Copy string with upper case conversion
|
||||
//
|
||||
def struprcpy(dst, src)#0
|
||||
byte i, chr
|
||||
|
||||
if ^strptr
|
||||
for i = 1 to ^strptr
|
||||
chr = strptr->[i]
|
||||
if ^src
|
||||
for i = 1 to ^src
|
||||
chr = src->[i]
|
||||
if chr >= 'a' and chr <= 'z'
|
||||
strptr->[i] = chr - 'a' + 'A'
|
||||
dst->[i] = chr - 'a' + 'A'
|
||||
else
|
||||
dst->[i] = chr
|
||||
fin
|
||||
next
|
||||
fin
|
||||
^dst = ^src
|
||||
end
|
||||
def filefrompath(filestr, pathstr)#0
|
||||
byte i
|
||||
@@ -82,91 +91,94 @@ def printentry(entryptr)#0
|
||||
puts(@eofstr)
|
||||
putln
|
||||
end
|
||||
//
|
||||
// Check arguments and file types
|
||||
//
|
||||
arg = argNext(argFirst)
|
||||
if ^arg
|
||||
strcpy(@path, arg)
|
||||
strupper(@path)
|
||||
else
|
||||
fileio:getpfx(@path)
|
||||
fin
|
||||
//
|
||||
// Check if file exists
|
||||
//
|
||||
if fileio:getfileinfo(@path, @fileinfo) == FILE_ERR_OK
|
||||
def printentries(pathstr, entries, num)#0
|
||||
byte page
|
||||
|
||||
puts(pathstr); putln
|
||||
puts("=NAME==========TYPE===AUX====LENGTH=\n")
|
||||
//
|
||||
// Check if cataloging a directory
|
||||
//
|
||||
if fileinfo.file_type == $0F
|
||||
fileio:iobufalloc(2) // Reserve two I/O buffers
|
||||
if path[path] <> '/' // Make sure path ends with a '/'
|
||||
path++
|
||||
path[path] = '/'
|
||||
fin
|
||||
page = 21
|
||||
filecnt = 0
|
||||
firstblk = 1
|
||||
dirbuf = heapallocalign(512, 8, 0)
|
||||
refnum = fileio:open(@path)
|
||||
repeat
|
||||
if fileio:read(refnum, dirbuf, 512) == 512
|
||||
//
|
||||
// Skip block pointers
|
||||
//
|
||||
entry = dirbuf + 4
|
||||
if firstblk
|
||||
//
|
||||
// Pull out revelant details from the first block
|
||||
//
|
||||
entrylen = dirbuf->$23
|
||||
entriesblk = dirbuf->$24
|
||||
filecnt = dirbuf=>$25
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
for i = firstblk to entriesblk
|
||||
//
|
||||
// Print directory entry details
|
||||
//
|
||||
^entry = ^entry & $0F
|
||||
if ^entry
|
||||
printentry(entry)
|
||||
filecnt--
|
||||
//
|
||||
// Pause display every screenfull
|
||||
//
|
||||
if not page
|
||||
getc
|
||||
page = 22
|
||||
else
|
||||
page--
|
||||
fin
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
page = 20
|
||||
repeat
|
||||
printentry(entries)
|
||||
entries = entries + t_fileentry
|
||||
//
|
||||
// Pause display every screenfull
|
||||
//
|
||||
if not page
|
||||
if toupper(getc()) == 'Q'
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
until filecnt == 0
|
||||
else
|
||||
//
|
||||
// Create file entry from file info
|
||||
//
|
||||
filefrompath(@fileentry, @path)
|
||||
fileentry.entry_access = fileinfo.file_access
|
||||
fileentry.entry_type = fileinfo.file_type
|
||||
fileentry:entry_create:0 = fileinfo:create_date
|
||||
fileentry:entry_create:2 = fileinfo:create_time
|
||||
fileentry:entry_aux = fileinfo:aux_type
|
||||
fileentry:entry_mod:0 = fileinfo:mod_date
|
||||
fileentry:entry_mod:2 = fileinfo:mod_time
|
||||
refnum = fileio:open(@path)
|
||||
fileentry:entry_EOFL, fileentry.entry_EOFH = fileio:geteof(refnum)#2
|
||||
printentry(@fileentry)
|
||||
page = 22
|
||||
else
|
||||
page--
|
||||
fin
|
||||
num--
|
||||
until not num
|
||||
end
|
||||
def catalog(pathstr)#0
|
||||
char recursepath[64]
|
||||
var entrylist, entryptr, entrycnt
|
||||
|
||||
entrylist, entrycnt = matchList(pathstr, @wildname)
|
||||
if entrylist
|
||||
printentries(pathstr, entrylist, entrycnt)
|
||||
if recurse
|
||||
entryptr = entrylist
|
||||
repeat
|
||||
if entryptr->entry_type == $0F
|
||||
//
|
||||
// A directory, so recurse
|
||||
//
|
||||
strcpy(@recursepath, pathstr)
|
||||
strcat(@recursepath, entryptr)
|
||||
recursepath++
|
||||
recursepath[recursepath] = '/'
|
||||
if toupper(getc()) == 'Q'
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
catalog(@recursepath)
|
||||
fin
|
||||
entryptr = entryptr + t_fileentry
|
||||
entrycnt--
|
||||
until not entrycnt
|
||||
fin
|
||||
heaprelease(entrylist)
|
||||
fin
|
||||
end
|
||||
//
|
||||
// Install error exit
|
||||
//
|
||||
exit = heapalloc(t_except)
|
||||
if not except(exit)
|
||||
//
|
||||
// Check arguments and file types
|
||||
//
|
||||
arg = argNext(argFirst)
|
||||
if ^arg and arg->[1] == '-'
|
||||
if ^arg > 1 and toupper(arg->[2]) == 'R'
|
||||
recurse = TRUE
|
||||
fin
|
||||
arg = argNext(arg)
|
||||
fin
|
||||
if ^arg
|
||||
struprcpy(@path, arg)
|
||||
//
|
||||
// Check if cataloging a directory or volume
|
||||
//
|
||||
if fileio:getfileinfo(@path, @fileinfo) <> FILE_ERR_OK or (fileinfo.storage_type & $0D <> $0D)
|
||||
filefrompath(@wildname, @path)
|
||||
fin
|
||||
path = path - wildname
|
||||
fin
|
||||
if not path
|
||||
fileio:getpfx(@path)
|
||||
fin
|
||||
//
|
||||
// Check if directory exists
|
||||
//
|
||||
if fileio:getfileinfo(@path, @fileinfo) == FILE_ERR_OK
|
||||
catalog(@path)
|
||||
else
|
||||
puts("Unable to open: "); puts(@path); putln
|
||||
fin
|
||||
fileio:close(0)
|
||||
else
|
||||
puts("Unable to open: "); puts(@path); putln
|
||||
fin
|
||||
done
|
||||
|
@@ -1,14 +1,72 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/longjmp.plh"
|
||||
include "inc/args.plh"
|
||||
include "inc/fileio.plh"
|
||||
include "inc/matchfiles.plh"
|
||||
|
||||
const MAXBUFSIZE = 16384
|
||||
var arg, srcref, dstref, copybuff, copysize, copyxfer
|
||||
char[64] srcfilename, dstfilename
|
||||
var arg, exit, srcfilelist, srcfileptr, srccnt
|
||||
var copybuff, copyrel, copysize
|
||||
byte recurse, dstlen
|
||||
char[64] curpath, dstpath
|
||||
char[16] srcdir
|
||||
res[t_fileinfo] srcfileinfo, dstfileinfo
|
||||
//
|
||||
// Handy string functions
|
||||
// Copy path with upper case conversion
|
||||
//
|
||||
def pathcpy(dst, src)#0
|
||||
byte i, chr
|
||||
|
||||
if ^src
|
||||
for i = 1 to ^src
|
||||
chr = src->[i]
|
||||
if chr >= 'a' and chr <= 'z'
|
||||
dst->[i] = chr - 'a' + 'A'
|
||||
else
|
||||
dst->[i] = chr
|
||||
fin
|
||||
next
|
||||
fin
|
||||
^dst = ^src
|
||||
end
|
||||
def abspath(abs, path)#0
|
||||
if ^path == 0 or path->[1] <> '/'
|
||||
//
|
||||
// Append relative path to absolute path
|
||||
//
|
||||
strcpy(abs, @curpath)
|
||||
else
|
||||
//
|
||||
// Absolute path
|
||||
//
|
||||
^abs = 0
|
||||
fin
|
||||
strcat(abs, path)
|
||||
//
|
||||
// Strip trailing path seperator
|
||||
//
|
||||
if abs->[^abs] == '/'
|
||||
^abs--
|
||||
fin
|
||||
end
|
||||
def pathdiff(path1, path2)#1
|
||||
byte i, d
|
||||
char[64] abs1, abs2
|
||||
|
||||
abspath(@abs1, path1)
|
||||
abspath(@abs2, path2)
|
||||
|
||||
if abs1 <> abs2
|
||||
return TRUE
|
||||
fin
|
||||
for i = 1 to abs1
|
||||
d = abs1[i] - abs2[i]
|
||||
if d
|
||||
return d
|
||||
fin
|
||||
next
|
||||
return FALSE
|
||||
end
|
||||
def filefrompath(filestr, pathstr)#0
|
||||
byte i
|
||||
|
||||
@@ -21,126 +79,217 @@ def filefrompath(filestr, pathstr)#0
|
||||
memcpy(filestr + 1, pathstr + 1 + i, ^filestr)
|
||||
end
|
||||
//
|
||||
// Check destination filename
|
||||
// Check destination path
|
||||
//
|
||||
def checkdst
|
||||
char[17] basefile
|
||||
def chkdstpath(dstfile)
|
||||
//
|
||||
// Check if destination exists
|
||||
//
|
||||
if fileio:getfileinfo(@dstfilename, @dstfileinfo) == FILE_ERR_OK
|
||||
if fileio:getfileinfo(dstfile, @dstfileinfo) == FILE_ERR_OK
|
||||
//
|
||||
// Check if copying into a directory
|
||||
//
|
||||
if dstfileinfo.file_type == $0F
|
||||
if dstfilename[dstfilename] <> '/'
|
||||
if dstfileinfo.storage_type & $0D == $0D
|
||||
if dstfile->[^dstfile] <> '/'
|
||||
//
|
||||
// Add path seperator
|
||||
//
|
||||
dstfilename++
|
||||
dstfilename[dstfilename] = '/'
|
||||
^dstfile++
|
||||
dstfile->[^dstfile] = '/'
|
||||
fin
|
||||
filefrompath(@basefile, @srcfilename)
|
||||
strcat(@dstfilename, @basefile)
|
||||
if fileio:getfileinfo(@dstfilename, @dstfileinfo) == FILE_ERR_OK
|
||||
return TRUE
|
||||
fin
|
||||
fin
|
||||
return FALSE
|
||||
end
|
||||
def copyfiles(srcfile, dstfile)#0
|
||||
var entrylist, entry, entrycnt, srcref, dstref, copyxfer
|
||||
char[64] srcpath
|
||||
char[64] srcfilepath
|
||||
char[64] dstfilepath
|
||||
char[16] wildname
|
||||
|
||||
//
|
||||
// Check if copying a directory
|
||||
//
|
||||
strcpy(@srcpath, srcfile)
|
||||
wildname = 0
|
||||
if fileio:getfileinfo(@srcpath, @srcfileinfo) <> FILE_ERR_OK or (srcfileinfo.storage_type & $0D <> $0D)
|
||||
filefrompath(@wildname, @srcpath)
|
||||
srcpath = srcpath - wildname
|
||||
fin
|
||||
entrylist, entrycnt = matchList(@srcpath, @wildname)
|
||||
if not entrylist
|
||||
puts(srcfile); puts(" ???\n")
|
||||
else
|
||||
entry = entrylist
|
||||
while entrycnt
|
||||
strcpy(@srcfilepath, @srcpath)
|
||||
strcat(@srcfilepath, entry)
|
||||
strcpy(@dstfilepath, dstfile)
|
||||
if chkdstpath(@dstfilepath)
|
||||
strcat(@dstfilepath, entry)
|
||||
fin
|
||||
if entry->entry_type == $0F
|
||||
//
|
||||
// Check if *that* is a directory
|
||||
// Source is a directory and not referencing the destination
|
||||
//
|
||||
if dstfileinfo.file_type == $0F
|
||||
puts("Destination is a directory filename\n")
|
||||
return FALSE
|
||||
if pathdiff(@srcfilepath, dstfile)
|
||||
fileio:create(@dstfilepath, $0F, $0000)
|
||||
if not chkdstpath(@dstfilepath)
|
||||
puts("Unable to create directory: "); puts(@dstfilepath); putln
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
if recurse
|
||||
copyfiles(@srcfilepath, @dstfilepath)
|
||||
fin
|
||||
fin
|
||||
else
|
||||
return TRUE
|
||||
fin
|
||||
fin
|
||||
//
|
||||
// Remove existing file
|
||||
//
|
||||
fileio:destroy(@dstfilename)
|
||||
fin
|
||||
return TRUE
|
||||
end
|
||||
//
|
||||
// Check arguments and file types
|
||||
//
|
||||
arg = argNext(argFirst)
|
||||
if ^arg
|
||||
strcpy(@srcfilename, arg)
|
||||
fileio:iobufalloc(2) // Reserve two I/O buffers
|
||||
if fileio:getfileinfo(@srcfilename, @srcfileinfo) == FILE_ERR_OK
|
||||
//
|
||||
// Check that source isn't a directory - can't handle that yet
|
||||
//
|
||||
if srcfileinfo.file_type == $0F
|
||||
puts("Can't copy directories (yet)\n")
|
||||
return
|
||||
fin
|
||||
else
|
||||
//
|
||||
// File not found
|
||||
//
|
||||
puts("File not found: "); puts(@srcfilename); putln
|
||||
return
|
||||
fin
|
||||
srcref = fileio:open(@srcfilename)
|
||||
if srcref
|
||||
arg = argNext(arg)
|
||||
if ^arg
|
||||
strcpy(@dstfilename, arg)
|
||||
if checkdst()
|
||||
puts(@srcfilepath)
|
||||
//
|
||||
// Check if destination file exists
|
||||
//
|
||||
if fileio:getfileinfo(@dstfilepath, @dstfileinfo) == FILE_ERR_OK
|
||||
fileio:destroy(@dstfilepath)
|
||||
fin
|
||||
//
|
||||
// Create the destination file and open for writing
|
||||
//
|
||||
if fileio:create(@dstfilename, srcfileinfo.file_type, srcfileinfo:aux_type) == FILE_ERR_OK
|
||||
dstref = fileio:open(@dstfilename)
|
||||
if dstref
|
||||
if fileio:create(@dstfilepath, entry->entry_type, entry=>entry_aux) <> FILE_ERR_OK
|
||||
puts("\nUnable to create file: "); puts(@dstfilepath); putln
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
srcref = fileio:open(@srcfilepath)
|
||||
if not srcref
|
||||
puts("\nUnable to open file: "); puts(@srcfilepath); putln
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
dstref = fileio:open(@dstfilepath)
|
||||
if not dstref
|
||||
puts("\nUnable to open file: "); puts(@dstfilepath); putln
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
//
|
||||
// Let the copying begin
|
||||
//
|
||||
repeat
|
||||
copyxfer = fileio:read(srcref, copybuff, copysize)
|
||||
if copyxfer
|
||||
if fileio:write(dstref, copybuff, copyxfer) <> copyxfer
|
||||
puts("\nError writing: "); puts(@dstfilepath); putln
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
fin
|
||||
until copyxfer == 0
|
||||
fileio:close(dstref)
|
||||
fileio:close(srcref)
|
||||
puts(" ==> "); puts(@dstfilepath); putln
|
||||
fin
|
||||
entry = entry + t_fileentry
|
||||
entrycnt--
|
||||
loop
|
||||
heaprelease(entrylist)
|
||||
fin
|
||||
end
|
||||
//
|
||||
// Install error exit
|
||||
//
|
||||
exit = heapalloc(t_except)
|
||||
if not except(exit)
|
||||
fileio:getpfx(@curpath)
|
||||
//
|
||||
// Check arguments and file types
|
||||
//
|
||||
arg = argNext(argFirst)
|
||||
if ^arg and arg->[1] == '-'
|
||||
if ^arg > 1 and toupper(arg->[2]) == 'R'
|
||||
recurse = TRUE
|
||||
fin
|
||||
arg = argNext(arg)
|
||||
fin
|
||||
if ^arg
|
||||
srcfilelist = heapalloc(^arg + 1)
|
||||
pathcpy(srcfilelist, arg)
|
||||
srccnt++
|
||||
arg = argNext(arg)
|
||||
if ^arg
|
||||
pathcpy(@dstpath, arg)
|
||||
arg = argNext(arg)
|
||||
while ^arg
|
||||
//
|
||||
// Add to source list
|
||||
//
|
||||
srcfileptr = heapalloc(dstpath + 1)
|
||||
strcpy(srcfileptr, @dstpath)
|
||||
srccnt++
|
||||
//
|
||||
// Set new destination
|
||||
//
|
||||
pathcpy(@dstpath, arg)
|
||||
arg = argNext(arg)
|
||||
loop
|
||||
if not chkdstpath(@dstpath) and (srccnt > 1 or isWildName(srcfilelist))
|
||||
puts("Destination must be a directory: "); puts(@dstpath); putln
|
||||
return
|
||||
fin
|
||||
fileio:iobufalloc(2) // Reserve two I/O buffers
|
||||
copysize = MAXBUFSIZE
|
||||
while isult(heapavail, copysize + 512)
|
||||
copysize = copysize / 2
|
||||
loop
|
||||
copyrel = heapalloc(copysize)
|
||||
if not copyrel
|
||||
puts(" No available memory for copy buffer\n")
|
||||
return
|
||||
fin
|
||||
//
|
||||
// Round buffer to page boundary for faster transfers
|
||||
//
|
||||
copybuff = (copyrel + $FF) & $FF00
|
||||
//
|
||||
// Iterate through all sources
|
||||
//
|
||||
srcfileptr = srcfilelist
|
||||
while srccnt
|
||||
dstlen = dstpath
|
||||
if fileio:getfileinfo(srcfileptr, @srcfileinfo) == FILE_ERR_OK and (srcfileinfo.storage_type & $0D == $0D)
|
||||
if recurse
|
||||
//
|
||||
// Let the copying begin
|
||||
// Copy directory
|
||||
//
|
||||
copysize = MAXBUFSIZE
|
||||
while isult(heapavail, copysize + 512)
|
||||
copysize = copysize / 2
|
||||
loop
|
||||
copybuff = heapalloc(copysize)
|
||||
if copybuff
|
||||
//
|
||||
// Round buffer to page boundary for faster transfers
|
||||
//
|
||||
copybuff = (copybuff + $FF) & $FF00
|
||||
copyxfer = fileio:read(srcref, copybuff, copysize)
|
||||
while copyxfer
|
||||
if fileio:write(dstref, copybuff, copyxfer) <> copyxfer
|
||||
puts("Error writing: "); puts(@dstfilename); putln
|
||||
break
|
||||
fin
|
||||
copyxfer = fileio:read(srcref, copybuff, copysize)
|
||||
loop
|
||||
else
|
||||
puts("No memory available!\n")
|
||||
if dstpath[dstpath] <> '/'
|
||||
dstpath++
|
||||
dstpath[dstpath] = '/'
|
||||
fin
|
||||
filefrompath(@srcdir, srcfileptr)
|
||||
strcat(@dstpath, @srcdir)
|
||||
if fileio:getfileinfo(@dstpath, @dstfileinfo) <> FILE_ERR_OK
|
||||
fileio:create(@dstpath, $0F, $0000)
|
||||
fin
|
||||
if not chkdstpath(@dstpath)
|
||||
puts("Destination must be a directory: "); puts(@dstpath); putln
|
||||
return
|
||||
fin
|
||||
else
|
||||
puts("Unable to open: "); puts(@dstfilename); putln
|
||||
puts("Omitting directory without -r: "); puts(srcfileptr); putln
|
||||
srcfileptr = srcfileptr + ^srcfileptr + 1
|
||||
srccnt--
|
||||
continue
|
||||
fin
|
||||
else
|
||||
puts("Unable to create: "); puts(@dstfilename); putln
|
||||
fin
|
||||
fin
|
||||
fileio:close(0)
|
||||
//
|
||||
// Copy files
|
||||
//
|
||||
copyfiles(srcfileptr, @dstpath)
|
||||
dstpath = dstlen
|
||||
srcfileptr = srcfileptr + ^srcfileptr + 1
|
||||
srccnt--
|
||||
loop
|
||||
heaprelease(copyrel)
|
||||
return
|
||||
fin
|
||||
else
|
||||
//
|
||||
// Unable to open source
|
||||
//
|
||||
puts("Unable to open: "); puts(@srcfilename); putln
|
||||
return
|
||||
fin
|
||||
//
|
||||
// Close all files
|
||||
//
|
||||
fileio:close(0)
|
||||
return
|
||||
puts("Usage: +COPY <SRCFILE>+ <DEST>\n")
|
||||
fin
|
||||
puts("Usage: +COPY SRCFILE DEST\n")
|
||||
fileio:close(0)
|
||||
done
|
||||
|
@@ -1,62 +1,168 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/longjmp.plh"
|
||||
include "inc/args.plh"
|
||||
include "inc/fileio.plh"
|
||||
include "inc/matchfiles.plh"
|
||||
|
||||
char[64] filename
|
||||
var arg
|
||||
var arg, recurse, exit, filelist, fileptr, filecnt
|
||||
char[64] path
|
||||
res[t_fileinfo] fileinfo
|
||||
//
|
||||
// Copy string with upper case conversion
|
||||
//
|
||||
def struprcpy(dst, src)#0
|
||||
byte i, chr
|
||||
|
||||
if ^src
|
||||
for i = 1 to ^src
|
||||
chr = src->[i]
|
||||
if chr >= 'a' and chr <= 'z'
|
||||
dst->[i] = chr - 'a' + 'A'
|
||||
else
|
||||
dst->[i] = chr
|
||||
fin
|
||||
next
|
||||
fin
|
||||
^dst = ^src
|
||||
end
|
||||
def filefrompath(filestr, pathstr)#0
|
||||
byte i
|
||||
|
||||
for i = ^pathstr downto 1
|
||||
if pathstr->[i] == '/'
|
||||
break
|
||||
fin
|
||||
next
|
||||
^filestr = ^pathstr - i
|
||||
memcpy(filestr + 1, pathstr + 1 + i, ^filestr)
|
||||
end
|
||||
//
|
||||
// Check filename
|
||||
//
|
||||
def checkfile
|
||||
var refnum, dirbuf
|
||||
res[t_fileinfo] fileinfo
|
||||
def chkfile(file)#1
|
||||
var refnum, dirbuf, filecnt
|
||||
|
||||
//
|
||||
// Check if file exists
|
||||
//
|
||||
if fileio:getfileinfo(@filename, @fileinfo) == FILE_ERR_OK
|
||||
if fileio:getfileinfo(file, @fileinfo) == FILE_ERR_OK
|
||||
//
|
||||
// Check if deleting a directory
|
||||
//
|
||||
if fileinfo.file_type == $0F
|
||||
refnum = fileio:open(@filename)
|
||||
refnum = fileio:open(file)
|
||||
if refnum
|
||||
//
|
||||
// Check for files inside directory
|
||||
//
|
||||
filecnt = 0
|
||||
dirbuf = heapalloc(512)
|
||||
if fileio:read(refnum, dirbuf, 512) == 512
|
||||
fileio:close(refnum)
|
||||
if dirbuf=>$25 // File count in directory
|
||||
puts("Directory not empty: "); puts(@filename); putln
|
||||
return FALSE
|
||||
fin
|
||||
filecnt = dirbuf=>$25 // File count in directory
|
||||
fin
|
||||
heaprelease(dirbuf)
|
||||
if filecnt
|
||||
puts("Directory not empty: "); puts(file); putln
|
||||
return FALSE
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
return TRUE
|
||||
fin
|
||||
puts("File not found: "); puts(@filename); putln
|
||||
puts("File not found: "); puts(file); putln
|
||||
return FALSE
|
||||
end
|
||||
//
|
||||
// Check arguments and file types
|
||||
//
|
||||
arg = argNext(argFirst)
|
||||
if ^arg
|
||||
strcpy(@filename, arg)
|
||||
if checkfile()
|
||||
//
|
||||
// Remove existing file
|
||||
//
|
||||
fileio:destroy(@filename)
|
||||
def delfiles(delfile)#0
|
||||
var entrylist, entry, entrycnt
|
||||
char[64] delpath
|
||||
char[64] delfilepath
|
||||
char[16] wildname
|
||||
|
||||
strcpy(@delpath, delfile)
|
||||
wildname = 0
|
||||
//if fileio:getfileinfo(@delpath, @fileinfo) <> FILE_ERR_OK or fileinfo.file_type <> $0F
|
||||
if delpath[delpath] <> '/'
|
||||
filefrompath(@wildname, @delpath)
|
||||
delpath = delpath - wildname
|
||||
fin
|
||||
//
|
||||
// Close all files
|
||||
// Check arguments and file types
|
||||
//
|
||||
fileio:close(0)
|
||||
return
|
||||
entrylist, entrycnt = matchList(@delpath, @wildname)
|
||||
if entrylist
|
||||
entry = entrylist
|
||||
while entrycnt
|
||||
strcpy(@delfilepath, @delpath)
|
||||
strcat(@delfilepath, entry)
|
||||
//
|
||||
// Check if file is a directory
|
||||
//
|
||||
if entry->entry_type == $0F
|
||||
if recurse
|
||||
strcat(@delfilepath, "/")
|
||||
strcat(@delfilepath, @wildname)
|
||||
delfiles(@delfilepath)
|
||||
fin
|
||||
strcpy(@delfilepath, @delpath)
|
||||
strcat(@delfilepath, entry)
|
||||
if chkfile(@delfilepath)
|
||||
puts("Removing: "); puts(@delfilepath); putln
|
||||
fileio:destroy(@delfilepath)
|
||||
fin
|
||||
else
|
||||
puts("Removing: "); puts(@delfilepath); putln
|
||||
fileio:destroy(@delfilepath)
|
||||
fin
|
||||
entry = entry + t_fileentry
|
||||
entrycnt--
|
||||
loop
|
||||
elsif not wildname
|
||||
puts("Not found: "); puts(@delpath); puts("/"); puts(@wildname); putln
|
||||
fin
|
||||
end
|
||||
//
|
||||
// Install error exit
|
||||
//
|
||||
exit = heapalloc(t_except)
|
||||
if not except(exit)
|
||||
//
|
||||
// Check arguments and file types
|
||||
//
|
||||
arg = argNext(argFirst)
|
||||
if ^arg and arg->[1] == '-'
|
||||
if ^arg > 1 and toupper(arg->[2]) == 'R'
|
||||
recurse = TRUE
|
||||
fin
|
||||
arg = argNext(arg)
|
||||
fin
|
||||
if ^arg
|
||||
filelist = heapmark()
|
||||
while ^arg
|
||||
//
|
||||
// Add to file list
|
||||
//
|
||||
fileptr = heapalloc(^arg + 1)
|
||||
struprcpy(fileptr, arg)
|
||||
filecnt++
|
||||
arg = argNext(arg)
|
||||
loop
|
||||
fileptr = filelist
|
||||
while filecnt
|
||||
//
|
||||
// Delete files in list
|
||||
//
|
||||
if recurse and fileio:getfileinfo(fileptr, @fileinfo) == FILE_ERR_OK and (fileinfo.storage_type & $0D == $0D)
|
||||
strcpy(@path,fileptr)
|
||||
strcat(@path, "/")
|
||||
delfiles(@path)
|
||||
fin
|
||||
delfiles(fileptr)
|
||||
fileptr = fileptr + ^fileptr + 1
|
||||
filecnt--
|
||||
loop
|
||||
else
|
||||
puts("Usage: +DEL <FILE>+\n")
|
||||
fin
|
||||
fin
|
||||
puts("Usage: +DEL FILE\n")
|
||||
done
|
||||
|
53
src/utilsrc/apple/zipchip.pla
Normal file
53
src/utilsrc/apple/zipchip.pla
Normal file
@@ -0,0 +1,53 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/args.plh"
|
||||
//
|
||||
// ZIP Chip control
|
||||
//
|
||||
var arg, status, slots, clock, state, cache
|
||||
|
||||
byte _unlock[]
|
||||
byte = $A9, $5A // LDA #$5A
|
||||
byte = $8D, $5A, $C0 // STA $C05A
|
||||
byte = $8D, $5A, $C0 // STA $C05A
|
||||
byte = $8D, $5A, $C0 // STA $C05A
|
||||
byte = $8D, $5A, $C0 // STA $C05A
|
||||
byte = $60 // RTS
|
||||
|
||||
def unlock#0
|
||||
(@_unlock)()#0 // Unlock regs (has to be machine code)
|
||||
end
|
||||
def lock#0
|
||||
^$C05A = $A5 // Lock regs
|
||||
end
|
||||
|
||||
arg = argNext(argFirst)
|
||||
if ^arg
|
||||
when toupper(arg->[1])
|
||||
is 'S' // Slow to 1 MHz
|
||||
unlock
|
||||
^$C05A = $00
|
||||
lock
|
||||
puts("Slow speed\n")
|
||||
break
|
||||
is 'F' // Enable acceleration
|
||||
unlock
|
||||
^$C05B = $FF
|
||||
lock
|
||||
puts("Fast speed\n")
|
||||
break
|
||||
wend
|
||||
fin
|
||||
unlock
|
||||
status = ^$C05B
|
||||
slots = ^$C05C
|
||||
clock = ^$C05D
|
||||
state = ^$C05E
|
||||
cache = ^$C05F
|
||||
lock
|
||||
^$C05F // AN3 off
|
||||
puts("Status: $"); puth(status); putln
|
||||
puts("Slots: $"); puth(slots); putln
|
||||
puts("Clock: $"); puth(clock); putln
|
||||
puts("State: $"); puth(state); putln
|
||||
puts("Cache: $"); puth(cache); putln
|
||||
done
|
@@ -369,7 +369,7 @@ def volumes#0
|
||||
next
|
||||
end
|
||||
|
||||
puts("TFTP Server Version 2.0 Dev\n")
|
||||
puts("TFTP Server Version 2.0 DP4\n")
|
||||
if !iNet:initIP()
|
||||
return -1
|
||||
fin
|
||||
|
@@ -52,7 +52,7 @@ byte perr, refauto
|
||||
// String pool.
|
||||
//
|
||||
byte autorun[] = "AUTORUN"
|
||||
byte verstr[] = "\nPLASMA DP2"
|
||||
byte verstr[] = "\nPLASMA DP4"
|
||||
byte freestr[] = "MEM FREE:$"
|
||||
byte errorstr[] = "ERR:$"
|
||||
byte prompt[] = "PLASMA"
|
||||
|
@@ -1172,7 +1172,7 @@ def catalog(path)#0
|
||||
byte firstblk
|
||||
byte entrylen, entriesblk
|
||||
byte i, type, len
|
||||
word entry, filecnt
|
||||
word entry
|
||||
|
||||
if !^path
|
||||
path = @prefix
|
||||
@@ -1182,43 +1182,37 @@ def catalog(path)#0
|
||||
return
|
||||
fin
|
||||
firstblk = 1
|
||||
repeat
|
||||
if read(refnum, heap, 512) == 512
|
||||
entry = heap + 4
|
||||
if firstblk
|
||||
entrylen = heap->$23
|
||||
entriesblk = heap->$24
|
||||
filecnt = heap=>$25
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
for i = firstblk to entriesblk
|
||||
if ^entry
|
||||
^entry = ^entry & $0F
|
||||
prstr(entry)
|
||||
type = ' '
|
||||
when entry->$10
|
||||
is $0F // Is it a directory?
|
||||
type = '/'
|
||||
break
|
||||
is $FF // SYSTEM file
|
||||
type = '-'
|
||||
break
|
||||
is $FE // REL file
|
||||
type = '+'
|
||||
wend
|
||||
cout(type)
|
||||
for len = ^entry to 18
|
||||
cout(' ')
|
||||
next
|
||||
filecnt--
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
else
|
||||
filecnt = 0
|
||||
while read(refnum, heap, 512) == 512
|
||||
entry = heap + 4
|
||||
if firstblk
|
||||
entrylen = heap->$23
|
||||
entriesblk = heap->$24 - 1
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
until !filecnt
|
||||
for i = firstblk to entriesblk
|
||||
if ^entry
|
||||
^entry = ^entry & $0F
|
||||
prstr(entry)
|
||||
type = ' '
|
||||
when entry->$10
|
||||
is $0F // Is it a directory?
|
||||
type = '/'
|
||||
break
|
||||
is $FF // SYSTEM file
|
||||
type = '-'
|
||||
break
|
||||
is $FE // REL file
|
||||
type = '+'
|
||||
wend
|
||||
cout(type)
|
||||
for len = ^entry to 18
|
||||
cout(' ')
|
||||
next
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
loop
|
||||
close(refnum)
|
||||
crout()
|
||||
end
|
||||
@@ -1383,7 +1377,7 @@ heap = @lastdef
|
||||
//
|
||||
// Print PLASMA version
|
||||
//
|
||||
prstr("PLASMA 2.0 DP2 64K\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
prstr("PLASMA 2.0 DP4 64K\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
//
|
||||
// Init symbol table.
|
||||
//
|
||||
|
@@ -1237,7 +1237,7 @@ def catalog(path)#0
|
||||
byte firstblk
|
||||
byte entrylen, entriesblk
|
||||
byte i, type, len
|
||||
word entry, filecnt
|
||||
word entry
|
||||
|
||||
if !^path
|
||||
path = @prefix
|
||||
@@ -1247,43 +1247,37 @@ def catalog(path)#0
|
||||
return
|
||||
fin
|
||||
firstblk = 1
|
||||
repeat
|
||||
if read(refnum, heap, 512) == 512
|
||||
entry = heap + 4
|
||||
if firstblk
|
||||
entrylen = heap->$23
|
||||
entriesblk = heap->$24
|
||||
filecnt = heap=>$25
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
for i = firstblk to entriesblk
|
||||
if ^entry
|
||||
^entry = ^entry & $0F
|
||||
prstr(entry)
|
||||
type = ' '
|
||||
when entry->$10
|
||||
is $0F // Is it a directory?
|
||||
type = '/'
|
||||
break
|
||||
is $FF // SYSTEM file
|
||||
type = '-'
|
||||
break
|
||||
is $FE // REL file
|
||||
type = '+'
|
||||
wend
|
||||
cout(type)
|
||||
for len = ^entry to 18
|
||||
cout(' ')
|
||||
next
|
||||
filecnt--
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
else
|
||||
filecnt = 0
|
||||
while read(refnum, heap, 512) == 512
|
||||
entry = heap + 4
|
||||
if firstblk
|
||||
entrylen = heap->$23
|
||||
entriesblk = heap->$24 - 1
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
until !filecnt
|
||||
for i = firstblk to entriesblk
|
||||
if ^entry
|
||||
^entry = ^entry & $0F
|
||||
prstr(entry)
|
||||
type = ' '
|
||||
when entry->$10
|
||||
is $0F // Is it a directory?
|
||||
type = '/'
|
||||
break
|
||||
is $FF // SYSTEM file
|
||||
type = '-'
|
||||
break
|
||||
is $FE // REL file
|
||||
type = '+'
|
||||
wend
|
||||
cout(type)
|
||||
for len = ^entry to 18
|
||||
cout(' ')
|
||||
next
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
loop
|
||||
close(refnum)
|
||||
crout()
|
||||
end
|
||||
@@ -1460,7 +1454,7 @@ heap = @lastdef
|
||||
//
|
||||
// Print PLASMA version
|
||||
//
|
||||
prstr("PLASMA 2.0 DP2 128K\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
prstr("PLASMA 2.0 DP4 128K\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
//
|
||||
// Init symbol table.
|
||||
//
|
||||
|
@@ -80,7 +80,7 @@ def catalog(path)#0
|
||||
byte firstblk
|
||||
byte entrylen, entriesblk
|
||||
byte i, type, len
|
||||
word entry, filecnt, catptr
|
||||
word entry, catptr
|
||||
|
||||
if !^path
|
||||
getpfx(path)
|
||||
@@ -91,43 +91,37 @@ def catalog(path)#0
|
||||
fin
|
||||
catptr = heapmark
|
||||
firstblk = 1
|
||||
repeat
|
||||
if cmdsys:sysread(refnum, catptr, 512) == 512
|
||||
entry = catptr + 4
|
||||
if firstblk
|
||||
entrylen = catptr->$23
|
||||
entriesblk = catptr->$24
|
||||
filecnt = catptr=>$25
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
for i = firstblk to entriesblk
|
||||
if ^entry
|
||||
^entry = ^entry & $0F
|
||||
puts(entry)
|
||||
type = ' '
|
||||
when entry->$10
|
||||
is $0F // Is it a directory?
|
||||
type = '/'
|
||||
break
|
||||
is $FF // SYSTEM file
|
||||
type = '-'
|
||||
break
|
||||
is $FE // REL file
|
||||
type = '+'
|
||||
wend
|
||||
putc(type)
|
||||
for len = ^entry to 18
|
||||
putc(' ')
|
||||
next
|
||||
filecnt--
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
else
|
||||
filecnt = 0
|
||||
while cmdsys:sysread(refnum, catptr, 512) == 512
|
||||
entry = catptr + 4
|
||||
if firstblk
|
||||
entrylen = catptr->$23
|
||||
entriesblk = catptr->$24 - 1
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
until filecnt == 0
|
||||
for i = firstblk to entriesblk
|
||||
if ^entry
|
||||
^entry = ^entry & $0F
|
||||
puts(entry)
|
||||
type = ' '
|
||||
when entry->$10
|
||||
is $0F // Is it a directory?
|
||||
type = '/'
|
||||
break
|
||||
is $FF // SYSTEM file
|
||||
type = '-'
|
||||
break
|
||||
is $FE // REL file
|
||||
type = '+'
|
||||
wend
|
||||
putc(type)
|
||||
for len = ^entry to 18
|
||||
putc(' ')
|
||||
next
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
loop
|
||||
cmdsys:sysclose(refnum)
|
||||
putln()
|
||||
end
|
||||
|
@@ -155,7 +155,7 @@ def catalog(path)#0
|
||||
byte firstblk
|
||||
byte entrylen, entriesblk
|
||||
byte i, type, len
|
||||
word entry, filecnt, catptr
|
||||
word entry, catptr
|
||||
|
||||
if !^path
|
||||
getpfx(path)
|
||||
@@ -166,43 +166,37 @@ def catalog(path)#0
|
||||
fin
|
||||
catptr = heapmark
|
||||
firstblk = 1
|
||||
repeat
|
||||
if cmdsys:sysread(refnum, catptr, 512) == 512
|
||||
entry = catptr + 4
|
||||
if firstblk
|
||||
entrylen = catptr->$23
|
||||
entriesblk = catptr->$24
|
||||
filecnt = catptr=>$25
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
for i = firstblk to entriesblk
|
||||
if ^entry
|
||||
^entry = ^entry & $0F
|
||||
puts(entry)
|
||||
type = ' '
|
||||
when entry->$10
|
||||
is $0F // Is it a directory?
|
||||
type = '/'
|
||||
break
|
||||
is $FF // SYSTEM file
|
||||
type = '-'
|
||||
break
|
||||
is $FE // REL file
|
||||
type = '+'
|
||||
wend
|
||||
putc(type)
|
||||
for len = ^entry to 18
|
||||
putc(' ')
|
||||
next
|
||||
filecnt--
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
else
|
||||
filecnt = 0
|
||||
while cmdsys:sysread(refnum, catptr, 512) == 512
|
||||
entry = catptr + 4
|
||||
if firstblk
|
||||
entrylen = catptr->$23
|
||||
entriesblk = catptr->$24 - 1
|
||||
entry = entry + entrylen
|
||||
fin
|
||||
until filecnt == 0
|
||||
for i = firstblk to entriesblk
|
||||
if ^entry
|
||||
^entry = ^entry & $0F
|
||||
puts(entry)
|
||||
type = ' '
|
||||
when entry->$10
|
||||
is $0F // Is it a directory?
|
||||
type = '/'
|
||||
break
|
||||
is $FF // SYSTEM file
|
||||
type = '-'
|
||||
break
|
||||
is $FE // REL file
|
||||
type = '+'
|
||||
wend
|
||||
putc(type)
|
||||
for len = ^entry to 18
|
||||
putc(' ')
|
||||
next
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
loop
|
||||
cmdsys:sysclose(refnum)
|
||||
putln()
|
||||
end
|
||||
|
@@ -1263,7 +1263,7 @@ cmdlnptr = @cmdln
|
||||
// Print PLASMA version
|
||||
//
|
||||
init_cons
|
||||
prstr("PLASMA 2.0 DP2\n")//; putb(version.1); putc('.'); putb(version.0); putln
|
||||
prstr("PLASMA 2.0 DP4\n")//; putb(version.1); putc('.'); putb(version.0); putln
|
||||
prstr("MEM:$"); prword(availheap); crout
|
||||
//
|
||||
// Exec command line parser
|
||||
|
@@ -1286,7 +1286,7 @@ cmdlnptr = @cmdln
|
||||
// Print PLASMA version
|
||||
//
|
||||
init_cons
|
||||
prstr("PLASMA 2.0 DP2 JITC\n")//; putb(version.1); putc('.'); putb(version.0); putln
|
||||
prstr("PLASMA 2.0 DP4 JITC\n")//; putb(version.1); putc('.'); putb(version.0); putln
|
||||
prstr("MEM:$"); prword(availheap); crout
|
||||
//
|
||||
// Exec command line parser
|
||||
|
Reference in New Issue
Block a user