mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-08-11 13:25:02 +00:00
Compare commits
44 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
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)
|
||||
# 11/10/2020 PLASMA 2.0 Developer Preview 3 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,4 +1,4 @@
|
||||
# PLASMA Version 2.0 Developer Preview 2
|
||||
# PLASMA Version 2.0 Developer Preview 3
|
||||
|
||||
Welcome to PLASMA: the Grand Unifying Platform for the Apple 1, ][, and ///.
|
||||
|
||||
@@ -12,6 +12,8 @@ Download the four disk images (three if you don't plan to boot an Apple ///):
|
||||
|
||||
[PLASMA 2.0 DP Demos](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-DEM.PO?raw=true)
|
||||
|
||||
[PLASMA 2.0 TCP/IP modules](https://github.com/dschmenk/PLASMA/blob/master/images/apple/PLASMA2-INET.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 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,15 @@ 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]]
|
||||
```
|
||||
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 +95,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 +115,14 @@ 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 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,10 +535,11 @@ export def dgrClear(clr)#0
|
||||
memset(@clrtile, clr, 32)
|
||||
dgrFill(0, 0, @clrtile)
|
||||
end
|
||||
export def dgrMode(mode)#1
|
||||
if mode
|
||||
//
|
||||
// Set double lores graphics, return draw buffer
|
||||
//
|
||||
export def dgrMode#1
|
||||
^showlores
|
||||
^showfull
|
||||
^showgraphics
|
||||
@@ -527,11 +550,10 @@ export def dgrMode#1
|
||||
drawpage = 1
|
||||
drawbuff = dgrbuff[1]
|
||||
return 1
|
||||
end
|
||||
fin
|
||||
//
|
||||
// Set text mode
|
||||
//
|
||||
export def txtMode#0
|
||||
^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,7 +420,11 @@ end
|
||||
//
|
||||
// Set lores graphics, return draw buffer
|
||||
//
|
||||
export def grMode#1
|
||||
export def grMode(mode)#1
|
||||
if mode
|
||||
//
|
||||
// Set GR mode
|
||||
//
|
||||
^showlores
|
||||
^showfull
|
||||
^showgraphics
|
||||
@@ -432,11 +436,10 @@ export def grMode#1
|
||||
drawpage = 1
|
||||
drawbuff = grbuff[1]
|
||||
return 1
|
||||
end
|
||||
fin
|
||||
//
|
||||
// Set text mode
|
||||
//
|
||||
export def txtMode#0
|
||||
^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
|
@@ -17,6 +17,32 @@ const hgr2 = $4000
|
||||
const page1 = 0
|
||||
const page2 = 1
|
||||
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 +91,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 +543,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 +551,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 +597,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 +709,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 +722,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 +944,67 @@ asm _hgrVLinC
|
||||
INX
|
||||
RTS
|
||||
end
|
||||
//export def hgrXVlin(y1, y2, x)#0
|
||||
// word pixptr, y, ofst
|
||||
// byte pixofst, pmask, cmask
|
||||
//
|
||||
// BLT scanline of pixmap
|
||||
// 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
|
||||
//
|
||||
// Masked BLT scanline of pixmap
|
||||
//
|
||||
asm scanBLT(x, y, w, srcptr)#0
|
||||
LDA ESTKL+0,X ; SRC PTR
|
||||
@@ -841,7 +1044,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 +1081,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 +1096,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 +1107,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 +1131,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,7 +1148,11 @@ export def hgrBLT(x, y, w, h, srcptr)#0
|
||||
next
|
||||
curhclr = saveclr
|
||||
end
|
||||
export def hgrMode#1
|
||||
export def hgrMode(mode)#1
|
||||
if mode
|
||||
//
|
||||
// Set HGR mode
|
||||
//
|
||||
memset(hgr1, 0, $2000) // Clear HGR page 1
|
||||
^showpage1
|
||||
^showfull
|
||||
@@ -943,13 +1161,16 @@ export def hgrMode#1
|
||||
drawpage = 1
|
||||
drawbuff = hgrbuff[1]
|
||||
return 1
|
||||
end
|
||||
export def txtMode#0
|
||||
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
|
||||
@@ -1005,6 +1226,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 +1240,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
|
||||
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)
|
||||
if refnum
|
||||
sprtptr = heapalloc(t_sprite)
|
||||
if not sprtptr; return 0; fin
|
||||
refnum = fileio:open(filestr)
|
||||
if refnum
|
||||
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
|
||||
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
|
||||
|
122
src/libsrc/apple/matchfiles.pla
Normal file
122
src/libsrc/apple/matchfiles.pla
Normal file
@@ -0,0 +1,122 @@
|
||||
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, filecnt, 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
|
||||
filecnt = 0
|
||||
firstblk = 1
|
||||
refnum = fileio:open(pathstr)
|
||||
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
|
||||
//
|
||||
// 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
|
||||
filecnt--
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
fin
|
||||
until filecnt == 0
|
||||
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
|
||||
|
||||
;*
|
||||
|
@@ -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,32 +461,32 @@ 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
|
||||
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
|
||||
|
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
|
||||
ZIP = rel/apple/ZIP\#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) $(ZIP) $(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
|
||||
|
||||
$(ZIP): utilsrc/apple/zip.pla $(PLASM)
|
||||
./$(PLASM) -AMOW < utilsrc/apple/zip.pla > utilsrc/apple/zip.a
|
||||
acme --setpc 4094 -o $(ZIP) utilsrc/apple/zip.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
|
||||
|
15
src/mkrel
15
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/ZIP#FE1000 prodos/sys/ZIP.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,6 +73,7 @@ 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/TILETEST#FE1000 prodos/demos/TILETEST.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
|
||||
@@ -78,6 +83,10 @@ cp rel/RPNCALC#FE1000 prodos/demos/RPNCALC.REL
|
||||
cp rel/LZ4CAT#FE1000 prodos/demos/LZ4CAT.REL
|
||||
cp rel/PRIMEGAP#FE1000 prodos/demos/PRIMEGAP.REL
|
||||
|
||||
mkdir prodos/demos/spiders
|
||||
cp rel/apple/SFM#FE1000 prodos/demos/spiders/SFM.REL
|
||||
cp rel/apple/SFMSPRT#FE1000 prodos/demos/spiders/SFMSPRT.REL
|
||||
|
||||
mkdir prodos/demos/rogue
|
||||
cp rel/ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL
|
||||
cp rel/ROGUECOMBAT#FE1000 prodos/demos/rogue/ROGUECOMBAT.REL
|
||||
@@ -118,6 +127,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 +140,8 @@ 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
|
||||
|
||||
#mkdir prodos/bld/examples
|
||||
#cp samplesrc/examples/ex.1.pla prodos/bld/examples/EX.1.PLA.TXT
|
||||
@@ -152,9 +164,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
|
||||
|
@@ -42,6 +42,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 +66,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 +75,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
|
||||
|
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,11 +5,16 @@ 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/TILETEST"; atftp $1 --put -l rel/apple/TILETEST#FE1000 -r $2/DEMOS/TILETEST#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
|
||||
|
||||
# Spiders from Mars
|
||||
echo "DEMOS/SPIDERS/SFM"; atftp $1 --put -l rel/apple/SFM#FE1000 -r $2/DEMOS/SPIDERS/SFM#FE1000
|
||||
echo "DEMOS/SPIDERS/SFMSPRT"; atftp $1 --put -l rel/apple/SFMSPRT#FE1000 -r $2/DEMOS/SPIDERS/SFMSPRT#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
|
||||
|
@@ -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/ZIP"; atftp $1 --put -l rel/apple/ZIP#FE1000 -r $2/SYS/ZIP#FE1000
|
||||
|
@@ -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
|
||||
//
|
||||
|
@@ -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 DP3\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)
|
||||
page = 20
|
||||
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--
|
||||
printentry(entries)
|
||||
entries = entries + t_fileentry
|
||||
//
|
||||
// Pause display every screenfull
|
||||
//
|
||||
if not page
|
||||
getc
|
||||
if toupper(getc()) == 'Q'
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
page = 22
|
||||
else
|
||||
page--
|
||||
fin
|
||||
fin
|
||||
entry = entry + entrylen
|
||||
next
|
||||
firstblk = 0
|
||||
fin
|
||||
until filecnt == 0
|
||||
else
|
||||
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
|
||||
//
|
||||
// Create file entry from file info
|
||||
// A directory, so recurse
|
||||
//
|
||||
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)
|
||||
strcpy(@recursepath, pathstr)
|
||||
strcat(@recursepath, entryptr)
|
||||
recursepath++
|
||||
recursepath[recursepath] = '/'
|
||||
if toupper(getc()) == 'Q'
|
||||
throw(exit, TRUE)
|
||||
fin
|
||||
fileio:close(0)
|
||||
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
|
||||
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 dstfile->[^dstfile] <> '/'
|
||||
//
|
||||
// Add path seperator
|
||||
//
|
||||
dstfilename++
|
||||
dstfilename[dstfilename] = '/'
|
||||
^dstfile++
|
||||
dstfile->[^dstfile] = '/'
|
||||
fin
|
||||
return TRUE
|
||||
fin
|
||||
fin
|
||||
filefrompath(@basefile, @srcfilename)
|
||||
strcat(@dstfilename, @basefile)
|
||||
if fileio:getfileinfo(@dstfilename, @dstfileinfo) == FILE_ERR_OK
|
||||
//
|
||||
// Check if *that* is a directory
|
||||
//
|
||||
if dstfileinfo.file_type == $0F
|
||||
puts("Destination is a directory filename\n")
|
||||
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.file_type <> $0F
|
||||
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
|
||||
//
|
||||
// Source is a directory and not referencing the destination
|
||||
//
|
||||
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
|
||||
puts(@srcfilepath)
|
||||
//
|
||||
// Check if destination file exists
|
||||
//
|
||||
if fileio:getfileinfo(@dstfilepath, @dstfileinfo) == FILE_ERR_OK
|
||||
fileio:destroy(@dstfilepath)
|
||||
fin
|
||||
//
|
||||
// Remove existing file
|
||||
// Create the destination file and open for writing
|
||||
//
|
||||
fileio:destroy(@dstfilename)
|
||||
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
|
||||
return TRUE
|
||||
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
|
||||
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
|
||||
srcfilelist = heapalloc(^arg + 1)
|
||||
pathcpy(srcfilelist, arg)
|
||||
srccnt++
|
||||
arg = argNext(arg)
|
||||
if ^arg
|
||||
strcpy(@dstfilename, arg)
|
||||
if checkdst()
|
||||
pathcpy(@dstpath, arg)
|
||||
arg = argNext(arg)
|
||||
while ^arg
|
||||
//
|
||||
// Create the destination file and open for writing
|
||||
// Add to source list
|
||||
//
|
||||
if fileio:create(@dstfilename, srcfileinfo.file_type, srcfileinfo:aux_type) == FILE_ERR_OK
|
||||
dstref = fileio:open(@dstfilename)
|
||||
if dstref
|
||||
srcfileptr = heapalloc(dstpath + 1)
|
||||
strcpy(srcfileptr, @dstpath)
|
||||
srccnt++
|
||||
//
|
||||
// Let the copying begin
|
||||
// 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
|
||||
copybuff = heapalloc(copysize)
|
||||
if copybuff
|
||||
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 = (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
|
||||
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
|
||||
//
|
||||
// Copy directory
|
||||
//
|
||||
if dstpath[dstpath] <> '/'
|
||||
dstpath++
|
||||
dstpath[dstpath] = '/'
|
||||
fin
|
||||
copyxfer = fileio:read(srcref, copybuff, copysize)
|
||||
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("Omitting directory without -r: "); puts(srcfileptr); putln
|
||||
srcfileptr = srcfileptr + ^srcfileptr + 1
|
||||
srccnt--
|
||||
continue
|
||||
fin
|
||||
fin
|
||||
//
|
||||
// Copy files
|
||||
//
|
||||
copyfiles(srcfileptr, @dstpath)
|
||||
dstpath = dstlen
|
||||
srcfileptr = srcfileptr + ^srcfileptr + 1
|
||||
srccnt--
|
||||
loop
|
||||
else
|
||||
puts("No memory available!\n")
|
||||
heaprelease(copyrel)
|
||||
return
|
||||
fin
|
||||
else
|
||||
puts("Unable to open: "); puts(@dstfilename); putln
|
||||
fin
|
||||
else
|
||||
puts("Unable to create: "); puts(@dstfilename); putln
|
||||
fin
|
||||
puts("Usage: +COPY <SRCFILE>+ <DEST>\n")
|
||||
fin
|
||||
fileio:close(0)
|
||||
return
|
||||
fin
|
||||
else
|
||||
//
|
||||
// Unable to open source
|
||||
//
|
||||
puts("Unable to open: "); puts(@srcfilename); putln
|
||||
return
|
||||
fin
|
||||
//
|
||||
// Close all files
|
||||
//
|
||||
fileio:close(0)
|
||||
return
|
||||
fin
|
||||
puts("Usage: +COPY SRCFILE DEST\n")
|
||||
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
|
||||
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
|
||||
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
|
||||
//
|
||||
// Check arguments and file types
|
||||
//
|
||||
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
|
||||
strcpy(@filename, arg)
|
||||
if checkfile()
|
||||
filelist = heapmark()
|
||||
while ^arg
|
||||
//
|
||||
// Remove existing file
|
||||
// Add to file list
|
||||
//
|
||||
fileio:destroy(@filename)
|
||||
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
|
||||
//
|
||||
// Close all files
|
||||
//
|
||||
fileio:close(0)
|
||||
return
|
||||
fin
|
||||
puts("Usage: +DEL FILE\n")
|
||||
done
|
||||
|
51
src/utilsrc/apple/zip.pla
Normal file
51
src/utilsrc/apple/zip.pla
Normal file
@@ -0,0 +1,51 @@
|
||||
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
|
||||
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 DP3\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 DP3"
|
||||
byte freestr[] = "MEM FREE:$"
|
||||
byte errorstr[] = "ERR:$"
|
||||
byte prompt[] = "PLASMA"
|
||||
|
@@ -1383,7 +1383,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 DP3 64K\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
//
|
||||
// Init symbol table.
|
||||
//
|
||||
|
@@ -1460,7 +1460,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 DP3 128K\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
//
|
||||
// Init symbol table.
|
||||
//
|
||||
|
@@ -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 DP3\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 DP3 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