1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-08-12 04:25:07 +00:00

44 Commits
DP2 ... DP3

Author SHA1 Message Date
David Schmenk
ea3c73ac15 2.0 DP3 release 2020-01-10 17:25:32 -08:00
Dave Schmenk
1f42523014 Fix some Apple /// differences 2020-01-10 13:55:05 -08:00
David Schmenk
6b1123a95b Update images 2020-01-10 11:57:39 -08:00
David Schmenk
fb3a4964c8 Match patterns with ending wildcard 2020-01-10 11:23:25 -08:00
David Schmenk
12f8cf8053 Tile blitter improvements from Brendan (BluRry) 2020-01-09 16:45:17 -08:00
David Schmenk
5e0053569e Formatting (which editor keeps messing up the tabs vs spaces?) 2020-01-08 17:27:08 -08:00
Dave Schmenk
d92d5dd6cd A wee'er bit faster 2020-01-08 14:33:49 -08:00
Dave Schmenk
206e7ae3f4 A wee bit faster and smaller 2020-01-08 14:30:37 -08:00
David Schmenk
8d9a0889a6 HGR tile and font libraries 2020-01-08 12:11:55 -08:00
David Schmenk
31f4fbfbec Slight API change 2020-01-08 05:51:19 -08:00
David Schmenk
6f620e194d Add JIT compiler to image 2020-01-08 05:43:26 -08:00
David Schmenk
4ee7c8c049 Auto-play Spiders from Mars 2020-01-07 18:51:06 -08:00
Dave Schmenk
9e31fbd1da Replay game 2020-01-07 18:18:18 -08:00
Dave Schmenk
1da0bdf610 Tweak 2020-01-07 17:22:44 -08:00
Dave Schmenk
360be4c709 Tweak sprite update and laser hit 2020-01-07 17:07:26 -08:00
David Schmenk
b13fb204a2 Spider sprite compiler 2020-01-07 16:12:40 -08:00
David Schmenk
0c57570d4a Pre-compile sprites and more animations and audio 2020-01-07 16:08:48 -08:00
David Schmenk
09d861e5a5 Quick updates 2020-01-06 22:15:59 -08:00
David Schmenk
f5416c2d82 Fix hgrHLin colors and tidy up game locations 2020-01-06 20:18:40 -08:00
Dave Schmenk
10cc631b0a More or less operational game 2020-01-06 16:09:25 -08:00
David Schmenk
e9a1311764 Shooting spiderwebs 2020-01-05 20:30:02 -08:00
David Schmenk
42888ed95a When spiders attack 2020-01-05 14:43:58 -08:00
David Schmenk
1fe6191343 More pixmaps 2020-01-04 19:51:39 -08:00
Dave Schmenk
b006e18d26 Fun with the graphics libraries 2020-01-04 16:58:51 -08:00
Dave Schmenk
69733fd37f Fix XORing of BLT with ORing. Better COPY message and add ZIP Chip
utility
2020-01-04 12:52:31 -08:00
Dave Schmenk
c1b6741cfd Fix commented out data and rect parameters 2020-01-04 09:36:54 -08:00
Dave Schmenk
41071de12f New HGR sprite shoot-em up demo 2020-01-04 08:45:23 -08:00
David Schmenk
b6a7b72fe1 Set inituial mask to WHITE(7) instead of WHITE(3) to reduce artifacting in blank areas 2020-01-04 07:45:39 -08:00
Dave Schmenk
426b662481 Lose examples from TFTP BLD 2020-01-03 14:24:41 -08:00
Dave Schmenk
18543c8363 Fix copy directory destination 2020-01-03 14:19:38 -08:00
David Schmenk
b2eaa867eb Add explicit undrawList calls 2020-01-03 07:57:26 -08:00
David Schmenk
d74ccc22fb Merge pull request #56 from peterferrie/master
notes on IIc VBL
2020-01-02 21:34:24 -08:00
Dave Schmenk
c4c3f4d9b3 Avoid infinite copy recursion 2020-01-02 20:49:32 -08:00
Dave Schmenk
ecb61ccddd Fix too many buffers allocated 2020-01-02 19:49:18 -08:00
David Schmenk
7c3dfe2b2e Wildcard names for file utilities 2020-01-01 13:50:57 -08:00
Dave Schmenk
438ab01254 Wildcard filename matching 2019-12-31 17:20:20 -08:00
Peter Ferrie
397dbdbb99 cut some bytes 2019-12-31 13:21:14 -08:00
Peter Ferrie
8b0a35e453 notes on IIc VBL 2019-12-31 13:19:42 -08:00
David Schmenk
81ad97e0bd Fix HGRTEST.PLA sample 2019-12-31 08:04:48 -08:00
David Schmenk
484aefb08c More error reporting when writing files 2019-12-31 07:53:41 -08:00
David Schmenk
c743ace42b Trying to track down file write corruption 2019-12-30 22:34:35 -08:00
David Schmenk
de29742841 Missed JIT16 dependency 2019-12-29 22:04:04 -08:00
David Schmenk
835b90e636 Update README.md 2019-12-29 08:44:32 -08:00
David Schmenk
c86d3349df Update Version 2.0.md 2019-12-29 08:43:24 -08:00
54 changed files with 2999 additions and 725 deletions

View File

@@ -1,7 +1,7 @@
# 12/28/2019 PLASMA 2.0 Developer Preview 2 Available! # 11/10/2020 PLASMA 2.0 Developer Preview 3 Available!
[Download and read the Release Notes](https://github.com/dschmenk/PLASMA/blob/master/doc/Version%202.0.md) [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! # 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) [Download and read the Release Notes](https://github.com/dschmenk/PLASMA/blob/master/doc/Version%201.2.md)

View File

@@ -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 ///. 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 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 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): 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 SANE files => /HARDISK/PLASMA/SYS
INET files => /HARDDISK/PLASMA/SYS
Use the System Utilities to copy the floppy images into the above mentioned directories. Use the System Utilities to copy the floppy images into the above mentioned directories.
## Apple 1 ## Apple 1
@@ -71,6 +75,15 @@ PLASMA comes with many library modules used by the tools, demos and sample code.
``` ```
+ED [TEXT FILE] +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 ## Compiler Modules
@@ -82,7 +95,7 @@ Compiler warnings are enabled with `-W`. The optional optimizer is enabled with
## Demos ## 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 ## 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... - 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 # Changes in PLASMA for 2.0 DP 2
1. Many file manipulaition utilities (COPY, REName, NEWDIRectory, DELete, CATalog, TYPE) 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

Binary file not shown.

View File

@@ -7,8 +7,7 @@ import dgrlib
predef dgrTileStr(x, y, tilestr, strlen, tilebuff)#0 predef dgrTileStr(x, y, tilestr, strlen, tilebuff)#0
predef dgrFill(x, y, tile)#0 predef dgrFill(x, y, tile)#0
predef dgrClear(clr)#0 predef dgrClear(clr)#0
predef dgrMode#1 predef dgrMode(mode)#1
predef txtMode#0
predef dgrShow(page)#1 predef dgrShow(page)#1
predef dgrSwap#0 predef dgrSwap#0
predef dgrDrawBuf(page)#0 predef dgrDrawBuf(page)#0

View File

@@ -33,7 +33,7 @@ import fileio
byte entry_minver byte entry_minver
byte entry_access byte entry_access
word entry_aux word entry_aux
word entry_mod word entry_mod[2]
word entry_headptr word entry_headptr
end end
// //

View File

@@ -7,8 +7,7 @@ import grlib
predef grTileStr(x, y, tilestr, strlen, tilebuff)#0 predef grTileStr(x, y, tilestr, strlen, tilebuff)#0
predef grFill(x, y, tile)#0 predef grFill(x, y, tile)#0
predef grClear(clr)#0 predef grClear(clr)#0
predef grMode#1 predef grMode(mode)#1
predef txtMode#0
predef grShow(page)#1 predef grShow(page)#1
predef grSwap#0 predef grSwap#0
predef grDrawBuf(page)#0 predef grDrawBuf(page)#0

3
src/inc/hgrfont.plh Normal file
View File

@@ -0,0 +1,3 @@
import hgrfont
predef hgrPutStr(x, y, strptr)#0
end

View File

@@ -1,18 +1,21 @@
import hgrlib import hgrlib
predef divmod7(x)#2 predef divmod7(x)#2
predef hgrPlot(x, y)#0 predef hgrPlot(x, y)#0
predef hgrOrPlot(x, y)#0
predef hgrXorPlot(x, y)#0 predef hgrXorPlot(x, y)#0
predef hgrHLin(x1, x2, y)#0 predef hgrHLin(x1, x2, y)#0
predef hgrVLin(y1, y2, x)#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 hgrBLT(x, y, width, height, srcptr)#0
predef hgrCopySrc(ofst, y, w, h, srcptr)#0 predef hgrCopySrc(ofst, y, w, h, srcptr)#0
predef hgrAndSrc(ofst, y, w, h, srcptr)#0 predef hgrAndSrc(ofst, y, w, h, srcptr)#0
predef hgrXorSrc(ofst, y, w, h, srcptr)#0 predef hgrXorSrc(ofst, y, w, h, srcptr)#0
predef hgrOrSrc(ofst, y, w, h, srcptr)#0 predef hgrOrSrc(ofst, y, w, h, srcptr)#0
predef hgrCopyDst(ofst, y, w, h, dstptr)#0 predef hgrCopyDst(ofst, y, w, h, dstptr)#0
predef hgrMode#1 predef hgrMode(mode)#1
predef txtMode#0
predef hgrClear#0 predef hgrClear#0
predef hgrShow(page)#1 predef hgrShow(page)#1
predef hgrSwap#1 predef hgrSwap#1

View File

@@ -9,9 +9,11 @@ import hgrsprite
predef spriteUnDrawXor(sprtptr)#0 predef spriteUnDrawXor(sprtptr)#0
predef spritePos(x, y, sprtptr)#0 predef spritePos(x, y, sprtptr)#0
predef spritePosIndex(x, y, i)#0 predef spritePosIndex(x, y, i)#0
predef spriteUnDrawList#0
predef spriteUnDrawXorList#0
predef spriteDrawList#0 predef spriteDrawList#0
predef spriteDrawXorList#0 predef spriteDrawXorList#0
predef spriteAdd(i, sprtptr)#1 predef spriteAdd(i, sprtptr)#1
predef spriteDel(i)#1 predef spriteDel(i)#1
predef spriteDrawBuf(page)#0 predef spriteDrawBuf(page)#1
end end

13
src/inc/hgrtile.plh Normal file
View 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
View File

@@ -0,0 +1,5 @@
import matchfiles
predef matchName(src, exp)#1
predef matchList(pathptr, exp)#2
predef isWildName(exp)#1
end

View File

@@ -196,9 +196,8 @@ export asm dgrBLT(x, y, width, height, src)#0
CLC CLC
ADC ESTKL+2,X ; WIDTH ADC ESTKL+2,X ; WIDTH
STA SRCL STA SRCL
LDA SRCH BCC +++
ADC #$00 INC SRCH
STA SRCH
BNE +++ BNE +++
+ AND #$FE + AND #$FE
TAY TAY
@@ -356,9 +355,8 @@ export asm dgrTile(x, y, src)#0
LDA SRCL ; SKIP TO NEXT ROW LDA SRCL ; SKIP TO NEXT ROW
ADC #$07 ; CARRY = 1 ADC #$07 ; CARRY = 1
STA SRCL STA SRCL
LDA SRCH BCC +++
ADC #$00 INC SRCH
STA SRCH
BNE +++ BNE +++
+ AND #$FE + AND #$FE
TAY TAY
@@ -494,7 +492,7 @@ asm _dgrFillTile
RTS RTS
end end
// //
// Wait for VLB - Shouldn't work on //c, but seems to. // Wait for VLB - Only IIe/IIGS.
// //
asm vlbWait#0 asm vlbWait#0
- LDA $C019 - LDA $C019
@@ -503,6 +501,30 @@ asm vlbWait#0
BPL - BPL -
RTS RTS
end 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 // Clear the buffer
// //
@@ -513,10 +535,11 @@ export def dgrClear(clr)#0
memset(@clrtile, clr, 32) memset(@clrtile, clr, 32)
dgrFill(0, 0, @clrtile) dgrFill(0, 0, @clrtile)
end end
export def dgrMode(mode)#1
if mode
// //
// Set double lores graphics, return draw buffer // Set double lores graphics, return draw buffer
// //
export def dgrMode#1
^showlores ^showlores
^showfull ^showfull
^showgraphics ^showgraphics
@@ -527,11 +550,10 @@ export def dgrMode#1
drawpage = 1 drawpage = 1
drawbuff = dgrbuff[1] drawbuff = dgrbuff[1]
return 1 return 1
end fin
// //
// Set text mode // Set text mode
// //
export def txtMode#0
^showtext ^showtext
^showpage1 ^showpage1
^ena80 = 0 ^ena80 = 0
@@ -539,6 +561,7 @@ export def txtMode#0
^mapmain = 0 ^mapmain = 0
^an3off ^an3off
call($FC58, 0, 0, 0, 0) // home() call($FC58, 0, 0, 0, 0) // home()
return 0
end end
// //
// Set display page, return other page // Set display page, return other page

View File

@@ -298,7 +298,7 @@ def a3write(refnum, buff, len)
params:2 = buff params:2 = buff
params:4 = len params:4 = len
perr = syscall($CB, @params) perr = syscall($CB, @params)
return perr return perr ?? 0 :: len
end end
def a1create(path, type, aux) def a1create(path, type, aux)
return perr return perr

View File

@@ -420,7 +420,11 @@ end
// //
// Set lores graphics, return draw buffer // Set lores graphics, return draw buffer
// //
export def grMode#1 export def grMode(mode)#1
if mode
//
// Set GR mode
//
^showlores ^showlores
^showfull ^showfull
^showgraphics ^showgraphics
@@ -432,11 +436,10 @@ export def grMode#1
drawpage = 1 drawpage = 1
drawbuff = grbuff[1] drawbuff = grbuff[1]
return 1 return 1
end fin
// //
// Set text mode // Set text mode
// //
export def txtMode#0
^showtext ^showtext
^showpage1 ^showpage1
^ena80 = 0 ^ena80 = 0
@@ -444,6 +447,7 @@ export def txtMode#0
^mapmain = 0 ^mapmain = 0
^an3off ^an3off
call($FC58, 0, 0, 0, 0) // home() call($FC58, 0, 0, 0, 0) // home()
return 0
end end
// //
// Set display page, return other page // Set display page, return other page

View 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

View File

@@ -17,6 +17,32 @@ const hgr2 = $4000
const page1 = 0 const page1 = 0
const page2 = 1 const page2 = 1
word hgrbuff[] = hgr1, hgr2 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 hgrscanl[]= $00,$00,$00,$00,$00,$00,$00,$00
byte = $80,$80,$80,$80,$80,$80,$80,$80 byte = $80,$80,$80,$80,$80,$80,$80,$80
byte = $00,$00,$00,$00,$00,$00,$00,$00 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 = $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
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 hbmask = $81,$82,$84,$88,$90,$A0,$C0
byte hlmask = $FF,$FE,$FC,$F8,$F0,$E0,$C0 byte hlmask = $FF,$FE,$FC,$F8,$F0,$E0,$C0
byte hrmask = $81,$83,$87,$8F,$9F,$BF,$FF byte hrmask = $81,$83,$87,$8F,$9F,$BF,$FF
word hcolor[] = $0000,$552A,$2A55,$7F7F,$8080,$D5AA,$AAD5,$FFFF
word curhclr word curhclr
byte drawpage = 1 byte drawpage = 1
word drawbuff = hgr2 word drawbuff = hgr2
@@ -543,8 +543,6 @@ end
asm _hgrPlotC asm _hgrPlotC
LDA $1000,Y ; HBMASK LDA $1000,Y ; HBMASK
STA TMPL STA TMPL
EOR #$FF
STA TMPH
LDA ESTKL+1,X ; HORIZ OFFSET LDA ESTKL+1,X ; HORIZ OFFSET
CMP #40 CMP #40
BCS + BCS +
@@ -553,12 +551,10 @@ asm _hgrPlotC
end end
asm _hgrPlotD asm _hgrPlotD
LDA $2000,Y ; CURHCLR LDA $2000,Y ; CURHCLR
AND TMPL
STA TMPL
LDY ESTKL+1,X ; HORIZ OFFSET LDY ESTKL+1,X ; HORIZ OFFSET
LDA (DST),Y EOR (DST),Y
AND TMPH AND TMPL
ORA TMPL EOR (DST),Y
STA (DST),Y STA (DST),Y
+ INX + INX
INX INX
@@ -601,14 +597,59 @@ asm _hgrXorPlotC
end end
asm _hgrXorPlotD asm _hgrXorPlotD
LDA $2000,Y ; CURHCLR LDA $2000,Y ; CURHCLR
AND TMPL
LDY ESTKL+1,X ; HORIZ OFFSET LDY ESTKL+1,X ; HORIZ OFFSET
AND TMPL
EOR (DST),Y EOR (DST),Y
STA (DST),Y STA (DST),Y
+ INX + INX
INX INX
RTS RTS
end 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 //export def hgrHLin(x1, x2, y)#0
// word pixptr, x // word pixptr, x
// byte lofst, lpixofst, lpmask // byte lofst, lpixofst, lpmask
@@ -668,6 +709,8 @@ end
asm _hgrHLinD asm _hgrHLinD
LDA $1000,Y ; HRMASK LDA $1000,Y ; HRMASK
STA TMPH STA TMPH
LDY ESTKL+1,X ; RIGHT HORIZ OFFSET
STY IPY ; STEAL THIS ZP FOR A MOMENT
INX INX
INX INX
INX INX
@@ -679,62 +722,163 @@ end
asm _hgrHLinF asm _hgrHLinF
LDA $1000,Y ; HLMASK LDA $1000,Y ; HLMASK
STA TMPL STA TMPL
LDA ESTKL+1,X ; LEFT HORIZ OFFSET LDY ESTKL+1,X ; LEFT HORIZ OFFSET
TAY TYA
LSR LSR
BCS + BCS +
end end
asm _hgrHLinG asm _hgrHLinG
LDA $2000 ; CURHCLRL
STA SRCL
LDA $2001 ; CURHCLRH LDA $2001 ; CURHCLRH
STA SRCH STA SRCH
LDA $2000 ; CURHCLRL
STA SRCL
BCC ++ BCC ++
+ LDA $2000 ; CURHCLRL + LDA $2000 ; CURHCLRL
STA SRCH STA SRCH
LDA $2001 ; CURHCLRH LDA $2001 ; CURHCLRH
STA SRCL STA SRCL
++ TYA ++ CPY IPY ; RIGHT HORIZ OFFSET
CMP ESTKL-1,X ; RIGHT HORIZ OFFSET
BNE + BNE +
LDA TMPL EOR (DST),Y
AND TMPL
AND TMPH AND TMPH
STA TMPL EOR (DST),Y
AND SRCL
STA TMPH
LDA TMPL
EOR #$FF
AND (DST),Y
ORA TMPH
STA (DST),Y STA (DST),Y
INX INX
INX INX
RTS RTS
+ LDA SRCL ; CURHCLR + EOR (DST),Y
AND TMPL AND TMPL
STA ESTKL+0,X EOR (DST),Y
LDA TMPL
EOR #$FF
AND (DST),Y
ORA ESTKL+0,X
- STA (DST),Y - STA (DST),Y
INY
TYA
CMP ESTKL-1,X ; RIGHT HORIZ OFFSET
LDA SRCH LDA SRCH
INY
CPY IPY ; RIGHT HORIZ OFFSET
BCS + BCS +
STA (DST),Y STA (DST),Y
INY
TYA
CMP ESTKL-1,X ; RIGHT HORIZ OFFSET
LDA SRCL 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 - BCC -
+ AND TMPH + AND TMPH
STA ESTKL+0,X EOR (DST),Y
LDA TMPH
EOR #$FF
AND (DST),Y
ORA ESTKL+0,X
STA (DST),Y STA (DST),Y
INX INX
INX INX
@@ -800,8 +944,67 @@ asm _hgrVLinC
INX INX
RTS RTS
end 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 asm scanBLT(x, y, w, srcptr)#0
LDA ESTKL+0,X ; SRC PTR LDA ESTKL+0,X ; SRC PTR
@@ -841,7 +1044,7 @@ asm _scanBLTB
JSR $D000 ; HPLOT JSR $D000 ; HPLOT
BEQ ++ BEQ ++
BNE ++ BNE ++
+ JSR $E000 ; HPLOTX + JSR $E000 ; HPLOTOR
++ INC ESTKL+3,X ; X COORDL ++ INC ESTKL+3,X ; X COORDL
BNE + BNE +
INC ESTKH+3,X ; X COORDH INC ESTKH+3,X ; X COORDH
@@ -878,7 +1081,7 @@ asm _scanBLTD
JSR $D000 ; HPLOT JSR $D000 ; HPLOT
BEQ ++ BEQ ++
BNE ++ BNE ++
+ JSR $E000 ; HPLOTX + JSR $E000 ; HPLOTOR
++ INC ESTKL+3,X ; X COORDL ++ INC ESTKL+3,X ; X COORDL
BNE + BNE +
INC ESTKH+3,X ; X COORDH INC ESTKH+3,X ; X COORDH
@@ -893,7 +1096,7 @@ BLTDONE INX
INX INX
RTS RTS
end end
export def hgrRect(x1, x2, y1, y2)#0 export def hgrRect(x1, y1, x2, y2)#0
word y word y
if x1 == x2 if x1 == x2
@@ -904,6 +1107,17 @@ export def hgrRect(x1, x2, y1, y2)#0
next next
fin fin
end 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 export def hgrBLT(x, y, w, h, srcptr)#0
word i, j word i, j
word saveclr word saveclr
@@ -917,7 +1131,7 @@ export def hgrBLT(x, y, w, h, srcptr)#0
// if i & 1 // if i & 1
// hgrColor(c) // hgrColor(c)
// if c & $08 // if c & $08
// hgrXorPlot(x + i, j) // hgrOrPlot(x + i, j)
// else // else
// hgrPlot(x + i, j) // hgrPlot(x + i, j)
// fin // fin
@@ -934,7 +1148,11 @@ export def hgrBLT(x, y, w, h, srcptr)#0
next next
curhclr = saveclr curhclr = saveclr
end end
export def hgrMode#1 export def hgrMode(mode)#1
if mode
//
// Set HGR mode
//
memset(hgr1, 0, $2000) // Clear HGR page 1 memset(hgr1, 0, $2000) // Clear HGR page 1
^showpage1 ^showpage1
^showfull ^showfull
@@ -943,13 +1161,16 @@ export def hgrMode#1
drawpage = 1 drawpage = 1
drawbuff = hgrbuff[1] drawbuff = hgrbuff[1]
return 1 return 1
end fin
export def txtMode#0 //
// Show text mode
//
^showpage1 ^showpage1
^showtext ^showtext
return 0
end end
export def hgrClear#0 export def hgrClear#0
memset(drawbuff, curhclr, $2000) // Clear HGR page 1 memset(drawbuff, curhclr, drawbuff) // Clear current HGR page
end end
// //
// Set display page, return other page // Set display page, return other page
@@ -1005,6 +1226,12 @@ _hgrXorPlotA:9 = @hgrscanh
_hgrXorPlotB:1 = @divmod7 _hgrXorPlotB:1 = @divmod7
_hgrXorPlotC:1 = @hbmask _hgrXorPlotC:1 = @hbmask
_hgrXorPlotD:1 = @curhclr _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 _hgrHLinA:1 = @hgrPlot
_hgrHLinB:1 = @hgrscanl _hgrHLinB:1 = @hgrscanl
_hgrHLinB:6 = @drawbuff.1 _hgrHLinB:6 = @drawbuff.1
@@ -1013,24 +1240,42 @@ _hgrHLinC:1 = @divmod7
_hgrHLinD:1 = @hrmask _hgrHLinD:1 = @hrmask
_hgrHLinE:1 = @divmod7 _hgrHLinE:1 = @divmod7
_hgrHLinF:1 = @hlmask _hgrHLinF:1 = @hlmask
_hgrHLinG:1 = @curhclr _hgrHLinG:1 = @curhclr.1
_hgrHLinG:6 = @curhclr.1 _hgrHLinG:6 = @curhclr
_hgrHLinG:13 = @curhclr.1 _hgrHLinG:13 = @curhclr
_hgrHLinG:18 = @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 hgrVLin:1 = @divmod7
_hgrVLinA:1 = @hbmask _hgrVLinA:1 = @hbmask
_hgrVLinB:1 = @curhclr _hgrVLinB:1 = @curhclr
_hgrVLinC:1 = @hgrscanl _hgrVLinC:1 = @hgrscanl
_hgrVLinC:6 = @drawbuff.1 _hgrVLinC:6 = @drawbuff.1
_hgrVLinC:9 = @hgrscanh _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:7 = @hcolor
hgrColor:10 = @curhclr hgrColor:10 = @curhclr
hgrColor:13 = @hcolor.1 hgrColor:13 = @hcolor.1
hgrColor:16 = @curhclr.1 hgrColor:16 = @curhclr.1
_scanBLTA:1 = @hgrColor _scanBLTA:1 = @hgrColor
_scanBLTB:1 = @hgrPlot _scanBLTB:1 = @hgrPlot
_scanBLTB:8 = @hgrXorPlot _scanBLTB:8 = @hgrOrPlot
_scanBLTC:1 = @hgrColor _scanBLTC:1 = @hgrColor
_scanBLTD:1 = @hgrPlot _scanBLTD:1 = @hgrPlot
_scanBLTD:8 = @hgrXorPlot _scanBLTD:8 = @hgrOrPlot
done done

View File

@@ -107,8 +107,10 @@ BLTDONE INX
end end
def spriteBLTMask(x, y, w, h, srcptr)#0 def spriteBLTMask(x, y, w, h, srcptr)#0
word i, j word i, j
byte pitch
byte c byte c
pitch = (w + 1) / 2
for j = y to y + h - 1 for j = y to y + h - 1
scanMask(x, j, w, srcptr) scanMask(x, j, w, srcptr)
// for i = 0 to w - 1 // for i = 0 to w - 1
@@ -120,71 +122,72 @@ def spriteBLTMask(x, y, w, h, srcptr)#0
// fin // fin
// hgrPlot(x + i, j) // hgrPlot(x + i, j)
// next // next
srcptr = srcptr + (w + 1) / 2 srcptr = srcptr + pitch
next next
end end
export def spriteCompile(w, h, xcenter, ycenter, srcptr)#1 export def spriteCompile(w, h, xcenter, ycenter, srcptr)#1
var sprtptr, bytewidth, spritesize, i var sprtptr, bytewidth, spritesize, i
sprtptr = heapalloc(t_sprite) sprtptr = heapalloc(t_sprite)
bytewidth = (w + 7) / 7 + 1 if not sprtptr; return 0; fin
bytewidth = (w + 13) / 7
sprtptr->s_pitch = bytewidth sprtptr->s_pitch = bytewidth
spritesize = bytewidth * h spritesize = bytewidth * h
sprtptr=>s_size = spritesize sprtptr=>s_size = spritesize
sprtptr->s_height = h sprtptr->s_height = h
sprtptr->s_xcenter = xcenter sprtptr->s_xcenter = xcenter
sprtptr->s_ycenter = ycenter sprtptr->s_ycenter = ycenter
sprtptr=>s_under[0] = heapalloc(spritesize) sprtptr=>s_under[0] = 0
sprtptr=>s_under[1] = heapalloc(spritesize) sprtptr=>s_under[1] = 0
for i = 0 to 13 for i = 0 to 13
sprtptr=>s_map[i] = heapalloc(spritesize) sprtptr=>s_map[i] = heapalloc(spritesize)
sprtptr=>s_mask[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) hgrColor(0)
hgrRect(0, w + 21, 0, h - 1) hgrRect(0, h, w + 21, h * 2 - 1)
hgrBLT(i, 0, w, h, srcptr) hgrBLT(i, h, w, h, srcptr)
hgrCopyDst(i > 6 ?? 1 :: 0, 0, bytewidth, h, sprtptr=>s_map[i]) hgrCopyDst(i > 6 ?? 1 :: 0, h, 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])
next next
return sprtptr return sprtptr
end end
export def spriteDup(sprtsrc)#1 export def spriteDup(sprtsrc)#1
var sprtdup, spritesize var sprtdup
byte i byte i
sprtdup = heapalloc(t_sprite) sprtdup = heapalloc(t_sprite)
spritesize = sprtsrc=>s_size if not sprtdup; return 0; fin
sprtdup=>s_size = spritesize memcpy(sprtdup, sprtsrc, t_sprite)
sprtdup->s_pitch = sprtsrc->s_pitch sprtdup=>s_under[0] = 0
sprtdup->s_height = sprtsrc->s_height sprtdup=>s_under[1] = 0
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
return sprtdup return sprtdup
end end
export def spriteRead(filestr)#1 export def spriteRead(filestr)#1
var sprtptr, spritesize var sprtptr, spritesize
byte refnum, i byte refnum, i
sprtptr = 0
refnum = fileio:open(@filestr)
if refnum
sprtptr = heapalloc(t_sprite) 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 if fileio:read(refnum, sprtptr, t_sprite) == t_sprite
spritesize = sprtptr=>s_size spritesize = sprtptr=>s_size
sprtptr=>s_under[0] = heapalloc(spritesize) sprtptr=>s_under[0] = 0
sprtptr=>s_under[1] = heapalloc(spritesize) sprtptr=>s_under[1] = 0
for i = 0 to 13 for i = 0 to 13
sprtptr=>s_map[i] = heapalloc(spritesize) sprtptr=>s_map[i] = heapalloc(spritesize)
sprtptr=>s_mask[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_map[i], spritesize)
fileio:read(refnum, sprtptr=>s_mask[i], spritesize) fileio:read(refnum, sprtptr=>s_mask[i], spritesize)
next next
@@ -193,6 +196,9 @@ export def spriteRead(filestr)#1
sprtptr = 0 sprtptr = 0
fin fin
fileio:close(refnum) fileio:close(refnum)
else
heaprelease(sprtptr)
sprtptr = 0
fin fin
return sprtptr return sprtptr
end end
@@ -200,9 +206,9 @@ export def spriteSave(filestr, sprtptr)#1
var spritesize var spritesize
byte refnum, i byte refnum, i
fileio:destroy(@filestr) fileio:destroy(filestr)
if fileio:create(@filestr, $06, $0000) == FILE_ERR_OK if fileio:create(filestr, $06, $0000) == FILE_ERR_OK
refnum = fileio:open(@filestr) refnum = fileio:open(filestr)
if refnum if refnum
if fileio:write(refnum, sprtptr, t_sprite) == t_sprite if fileio:write(refnum, sprtptr, t_sprite) == t_sprite
spritesize = sprtptr=>s_size spritesize = sprtptr=>s_size
@@ -230,12 +236,18 @@ export def spriteDraw(sprtptr)#0
sprtptr=>s_undery[drawpage] = y sprtptr=>s_undery[drawpage] = y
pitch = sprtptr->s_pitch pitch = sprtptr->s_pitch
height = sprtptr->s_height 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]) hgrCopyDst(ofst, y, pitch, height, sprtptr=>s_under[drawpage])
hgrAndSrc( ofst, y, pitch, height, sprtptr=>s_mask[map]) hgrAndSrc( ofst, y, pitch, height, sprtptr=>s_mask[map])
hgrXorSrc( ofst, y, pitch, height, sprtptr=>s_map[map]) hgrXorSrc( ofst, y, pitch, height, sprtptr=>s_map[map])
end end
export def spriteUnDraw(sprtptr)#0 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]) hgrCopySrc(sprtptr=>s_underofst[drawpage], sprtptr=>s_undery[drawpage], sprtptr->s_pitch, sprtptr->s_height, sprtptr=>s_under[drawpage])
fin
end end
export def spriteDrawXor(sprtptr)#0 export def spriteDrawXor(sprtptr)#0
byte map, pitch, height byte map, pitch, height
@@ -267,6 +279,18 @@ export def spritePosIndex(x, y, i)#0
drawList[i]=>s_xpos = x - drawList[i]->s_xcenter drawList[i]=>s_xpos = x - drawList[i]->s_xcenter
fin fin
end 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 export def spriteDrawList#0
byte i byte i
var undrawptr var undrawptr
@@ -284,6 +308,18 @@ export def spriteDrawList#0
next next
memcpy(undrawptr, @drawList, 16*2) memcpy(undrawptr, @drawList, 16*2)
end 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 export def spriteDrawXorList#0
byte i byte i
var undrawptr var undrawptr
@@ -315,8 +351,9 @@ export def spriteDel(i)#1
drawList[i] = 0 drawList[i] = 0
return sprtprev return sprtprev
end end
export def spriteDrawBuf(page)#0 export def spriteDrawBuf(page)#1
drawpage = page & 1 drawpage = page & 1
return drawpage
end end
// //
// Assembly fixups // Assembly fixups

View 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

View 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

View File

@@ -270,7 +270,7 @@ CHKSIG: LDY #$05
LDA (TMPTR),Y LDA (TMPTR),Y
CMP #$01 CMP #$01
BNE :+ BNE :+
LDY #$0C INY
TXA ; LOOK FOR MATCHING ID TXA ; LOOK FOR MATCHING ID
CMP (TMPTR),Y CMP (TMPTR),Y
BNE :+ BNE :+
@@ -283,7 +283,6 @@ CHKSIG: LDY #$05
LDA TMPTR+1 LDA TMPTR+1
CMP #$C8 CMP #$C8
BCC CHKSIG BCC CHKSIG
SEC
RTS RTS
;* ;*

View File

@@ -305,7 +305,7 @@ TONELP SBC #$01 ; 2
;+4 = 11 (from BNE above) ;+4 = 11 (from BNE above)
+++ BIT $C000 ; 4 +++ BIT $C000 ; 4
BMI TONEXIT ; 2 NOP ; 2
BPL TONELP ; 3 BPL TONELP ; 3
;--- ;---
;+9 = 20 ;+9 = 20

View File

@@ -10,7 +10,7 @@ var err, shorterr, shortlen, longerr, longlen
//def nopLin(a, b, c)#0 //def nopLin(a, b, c)#0
//end //end
//def majorline(majorstart, major, majorend, minor, dir, majorspan)#0 //def majorspans(majorstart, major, majorend, minor, dir, majorspan)#0
// // // //
// // Initial half-span step // // Initial half-span step
// // // //
@@ -32,7 +32,7 @@ var err, shorterr, shortlen, longerr, longlen
// // // //
// majorspan(majorstart, majorend, minor)#0 // majorspan(majorstart, majorend, minor)#0
//end //end
asm majorline(majorstart, major, majorend, minor, dir, majorspan)#0 asm majorspans(majorstart, major, majorend, minor, dir, majorspan)#0
!SOURCE "vmsrc/plvmzp.inc" !SOURCE "vmsrc/plvmzp.inc"
LDA $1000 ; ERRL LDA $1000 ; ERRL
CLC CLC
@@ -48,7 +48,7 @@ asm majorline(majorstart, major, majorend, minor, dir, majorspan)#0
STA $A001 STA $A001
STA $B001 STA $B001
end end
asm _majorlineA asm _majorspansA
- DEX - DEX
DEX DEX
DEX DEX
@@ -82,11 +82,11 @@ asm _majorlineA
ADC #$00 ADC #$00
STA ESTKH+5,X ; MAJORSTARTH STA ESTKH+5,X ; MAJORSTARTH
end end
asm _majorlineB asm _majorspansB
LDY $1001 ; ERRH LDY $1001 ; ERRH
BMI + BMI +
end end
asm _majorlineC asm _majorspansC
LDA $1000 ; ERRL LDA $1000 ; ERRL
CLC CLC
ADC $2000 ; SHORTERRL ADC $2000 ; SHORTERRL
@@ -101,10 +101,14 @@ asm _majorlineC
LDA ESTKH+4,X ; MAJORH LDA ESTKH+4,X ; MAJORH
ADC $3001 ; SHORTLENH ADC $3001 ; SHORTLENH
STA ESTKH+4,X 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 ++ BCS ++
end end
asm _majorlineD asm _majorspansD
+ LDA $1000 ; ERRL + LDA $1000 ; ERRL
CLC CLC
ADC $4000 ; LONGERRL ADC $4000 ; LONGERRL
@@ -119,16 +123,15 @@ asm _majorlineD
LDA ESTKH+4,X ; MAJORH LDA ESTKH+4,X ; MAJORH
ADC $5001 ; LONGLENH ADC $5001 ; LONGLENH
STA ESTKH+4,X STA ESTKH+4,X
LDA ESTKL+4,X ; MAJORL
++ LDA ESTKL+4,X ; MAJORL
CMP ESTKL+3,X ; MAJORENDL CMP ESTKL+3,X ; MAJORENDL
LDA ESTKH+4,X ; MAJORH LDA ESTKH+4,X ; MAJORH
SBC ESTKH+3,X ; MAJORENDH SBC ESTKH+3,X ; MAJORENDH
BCS + BCS ++
end end
asm _majorlineE asm _majorspansE
JMP $6000 JMP $6000
+ DEX ++ DEX
DEX DEX
DEX DEX
LDA ESTKL+8,X ; MAJORSTARTL LDA ESTKL+8,X ; MAJORSTARTL
@@ -335,6 +338,52 @@ export def setlinespans(h, v)#0
hspan = h hspan = h
vspan = v vspan = v
end 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 export def linespans(x1, y1, x2, y2)#0
var dx, dy, dx2, dy2, halflen, rem, sx, sy 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 hspan(x1, x2, y1)#0; return
fin fin
// //
// Half-span length and error // JIT optimize setup
// //
dy2 = dy * 2 hmajorspans(x1, y1, x2, y2, dx, dy, sy)
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)
else else
if sy < 0 if sy < 0
x1, x2 = x2, x1 x1, x2 = x2, x1
@@ -391,26 +420,9 @@ export def linespans(x1, y1, x2, y2)#0
vspan(y1, y2, x1)#0; return vspan(y1, y2, x1)#0; return
fin fin
// //
// Half-span length and error // JIT optimize inner setup
// //
dx2 = dx * 2 vmajorspans(x1, y1, x2, y2, dx, dy, sx)
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)
fin fin
end end
export def setlineplot(p)#0 export def setlineplot(p)#0
@@ -449,32 +461,32 @@ export def line(x1, y1, x2, y2)#0
// //
// Assembly fixups // Assembly fixups
// //
majorline:1 = @err majorspans:1 = @err
majorline:5 = @shorterr majorspans:5 = @shorterr
majorline:8 = @err majorspans:8 = @err
majorline:11 = @err.1 majorspans:11 = @err.1
majorline:14 = @shorterr.1 majorspans:14 = @shorterr.1
majorline:17 = @err.1 majorspans:17 = @err.1
majorline:22 = @_majorlineA.28 majorspans:22 = @_majorspansA.28
majorline:25 = @_majorlineE.31 majorspans:25 = @_majorspansE.31
majorline:30 = @_majorlineA.29 majorspans:30 = @_majorspansA.29
majorline:33 = @_majorlineE.32 majorspans:33 = @_majorspansE.32
_majorlineB:1 = @err.1 _majorspansB:1 = @err.1
_majorlineC:1 = @err _majorspansC:1 = @err
_majorlineC:5 = @shorterr _majorspansC:5 = @shorterr
_majorlineC:8 = @err _majorspansC:8 = @err
_majorlineC:12 = @shorterr.1 _majorspansC:12 = @shorterr.1
_majorlineC:15 = @err.1 _majorspansC:15 = @err.1
_majorlineC:21 = @shortlen _majorspansC:21 = @shortlen
_majorlineC:28 = @shortlen.1 _majorspansC:28 = @shortlen.1
_majorlineD:1 = @err _majorspansD:1 = @err
_majorlineD:5 = @longerr _majorspansD:5 = @longerr
_majorlineD:8 = @err _majorspansD:8 = @err
_majorlineD:12 = @longerr.1 _majorspansD:12 = @longerr.1
_majorlineD:15 = @err.1 _majorspansD:15 = @err.1
_majorlineD:21 = @longlen _majorspansD:21 = @longlen
_majorlineD:28 = @longlen.1 _majorspansD:28 = @longlen.1
_majorlineE:1 = @_majorlineA _majorspansE:1 = @_majorspansA
hline:16 = @err hline:16 = @err
hline:23 = @err.1 hline:23 = @err.1
_hlineA:1 = @jmpplot _hlineA:1 = @jmpplot

View File

@@ -15,6 +15,7 @@ CMDJIT = rel/apple/CMD128\#061000
PLVMZP_C64 = vmsrc/c64/plvmzp.inc PLVMZP_C64 = vmsrc/c64/plvmzp.inc
PLVMC64 = rel/c64/PLASMA PLVMC64 = rel/c64/PLASMA
ED = rel/ED\#FE1000 ED = rel/ED\#FE1000
ZIP = rel/apple/ZIP\#FE1000
JIT = rel/apple/JIT\#FE1000 JIT = rel/apple/JIT\#FE1000
JIT16 = rel/apple/JIT16\#FE1000 JIT16 = rel/apple/JIT16\#FE1000
JITUNE = rel/apple/JITUNE\#FE1000 JITUNE = rel/apple/JITUNE\#FE1000
@@ -29,6 +30,7 @@ TYPE = rel/apple/TYPE\#FE1000
SIEVE = rel/SIEVE\#FE1000 SIEVE = rel/SIEVE\#FE1000
PRIMEGAP = rel/PRIMEGAP\#FE1000 PRIMEGAP = rel/PRIMEGAP\#FE1000
ARGS = rel/ARGS\#FE1000 ARGS = rel/ARGS\#FE1000
MATCHFILES = rel/apple/MATCHFILES\#FE1000
SPIPORT = rel/apple/SPIPORT\#FE1000 SPIPORT = rel/apple/SPIPORT\#FE1000
SDFAT = rel/apple/SDFAT\#FE1000 SDFAT = rel/apple/SDFAT\#FE1000
FATCAT = rel/apple/FATCAT\#FE1000 FATCAT = rel/apple/FATCAT\#FE1000
@@ -61,8 +63,12 @@ HGRLIB = rel/apple/HGRLIB\#FE1000
GRLIB = rel/apple/GRLIB\#FE1000 GRLIB = rel/apple/GRLIB\#FE1000
DGRLIB = rel/apple/DGRLIB\#FE1000 DGRLIB = rel/apple/DGRLIB\#FE1000
HGRSPRITE = rel/apple/HGRSPRITE\#FE1000 HGRSPRITE = rel/apple/HGRSPRITE\#FE1000
HGRTILE = rel/apple/HGRTILE\#FE1000
HGRFONT = rel/apple/HGRFONT\#FE1000
LINES = rel/LINES\#FE1000 LINES = rel/LINES\#FE1000
GRAFIX = rel/apple/GRAFIX\#FE1000 GRAFIX = rel/apple/GRAFIX\#FE1000
SFM = rel/apple/SFM\#FE1000
SFMSPRT = rel/apple/SFMSPRT\#FE1000
GFXDEMO = rel/apple/GFXDEMO\#FE1000 GFXDEMO = rel/apple/GFXDEMO\#FE1000
JOYBUZZ = rel/apple/JOYBUZZ\#FE1000 JOYBUZZ = rel/apple/JOYBUZZ\#FE1000
PORTIO = rel/apple/PORTIO\#FE1000 PORTIO = rel/apple/PORTIO\#FE1000
@@ -70,6 +76,7 @@ ROGUE = rel/ROGUE\#FE1000
ROGUEMAP = rel/ROGUEMAP\#FE1000 ROGUEMAP = rel/ROGUEMAP\#FE1000
ROGUECOMBAT= rel/ROGUECOMBAT\#FE1000 ROGUECOMBAT= rel/ROGUECOMBAT\#FE1000
MON = rel/apple/MON\#FE1000 MON = rel/apple/MON\#FE1000
TILETEST = rel/apple/TILETEST\#FE1000
HGRTEST = rel/apple/HGRTEST\#FE1000 HGRTEST = rel/apple/HGRTEST\#FE1000
GRTEST = rel/apple/GRTEST\#FE1000 GRTEST = rel/apple/GRTEST\#FE1000
DGRTEST = rel/apple/DGRTEST\#FE1000 DGRTEST = rel/apple/DGRTEST\#FE1000
@@ -102,7 +109,7 @@ TXTTYPE = .TXT
#SYSTYPE = \#FF2000 #SYSTYPE = \#FF2000
#TXTTYPE = \#040000 #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 -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 ./$(PLASM) -AMOW < toolsrc/ed.pla > toolsrc/ed.a
acme --setpc 4094 -o $(ED) 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) $(ARGS): libsrc/args.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < libsrc/args.pla > libsrc/args.a ./$(PLASM) -AMOW < libsrc/args.pla > libsrc/args.a
acme --setpc 4094 -o $(ARGS) 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 ./$(PLASM) -AMOW < libsrc/longjmp.pla > libsrc/longjmp.a
acme --setpc 4094 -o $(LONGJMP) 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) $(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a ./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a
acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a
@@ -428,47 +447,59 @@ $(DGRLIB): libsrc/apple/dgrlib.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < libsrc/apple/dgrlib.pla > libsrc/apple/dgrlib.a ./$(PLASM) -AMOW < libsrc/apple/dgrlib.pla > libsrc/apple/dgrlib.a
acme --setpc 4094 -o $(DGRLIB) 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) $(HGRSPRITE): libsrc/apple/hgrsprite.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < libsrc/apple/hgrsprite.pla > libsrc/apple/hgrsprite.a ./$(PLASM) -AMOW < libsrc/apple/hgrsprite.pla > libsrc/apple/hgrsprite.a
acme --setpc 4094 -o $(HGRSPRITE) 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 ./$(PLASM) -AMOW < samplesrc/hgrtest.pla > samplesrc/hgrtest.a
acme --setpc 4094 -o $(HGRTEST) 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 ./$(PLASM) -AMOW < samplesrc/grtest.pla > samplesrc/grtest.a
acme --setpc 4094 -o $(GRTEST) 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 ./$(PLASM) -AMOW < samplesrc/dgrtest.pla > samplesrc/dgrtest.a
acme --setpc 4094 -o $(DGRTEST) 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 ./$(PLASM) -AMOW < utilsrc/apple/mon.pla > utilsrc/apple/mon.a
acme --setpc 4094 -o $(MON) 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 ./$(PLASM) -AMOW < utilsrc/apple/copy.pla > utilsrc/apple/copy.a
acme --setpc 4094 -o $(COPY) 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 ./$(PLASM) -AMOW < utilsrc/apple/del.pla > utilsrc/apple/del.a
acme --setpc 4094 -o $(DEL) 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 ./$(PLASM) -AMOW < utilsrc/apple/ren.pla > utilsrc/apple/ren.a
acme --setpc 4094 -o $(REN) 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 ./$(PLASM) -AMOW < utilsrc/apple/cat.pla > utilsrc/apple/cat.a
acme --setpc 4094 -o $(CAT) 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 ./$(PLASM) -AMOW < utilsrc/apple/newdir.pla > utilsrc/apple/newdir.a
acme --setpc 4094 -o $(NEWDIR) 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 ./$(PLASM) -AMOW < utilsrc/apple/type.pla > utilsrc/apple/type.a
acme --setpc 4094 -o $(TYPE) 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 ./$(PLASM) -AMOW < utilsrc/apple/sos.pla > utilsrc/apple/sos.a
acme --setpc 4094 -o $(SOS) 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) $(JIT): libsrc/apple/jit.pla libsrc/jitcore.pla $(PLVMJIT) $(PLASM)
./$(PLASM) -AMOW < libsrc/apple/jit.pla > libsrc/apple/jit.a ./$(PLASM) -AMOW < libsrc/apple/jit.pla > libsrc/apple/jit.a
acme --setpc 4094 -o $(JIT) libsrc/apple/jit.a acme --setpc 4094 -o $(JIT) libsrc/apple/jit.a

View File

@@ -10,6 +10,8 @@ mkdir prodos/sys
cp rel/apple/FILEIO#FE1000 prodos/sys/FILEIO.REL cp rel/apple/FILEIO#FE1000 prodos/sys/FILEIO.REL
cp rel/apple/CONIO#FE1000 prodos/sys/CONIO.REL cp rel/apple/CONIO#FE1000 prodos/sys/CONIO.REL
cp rel/LINES#FE1000 prodos/sys/LINES.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/HGRSPRITE#FE1000 prodos/sys/HGRSPRITE.REL
cp rel/apple/HGRLIB#FE1000 prodos/sys/HGRLIB.REL cp rel/apple/HGRLIB#FE1000 prodos/sys/HGRLIB.REL
cp rel/apple/GRLIB#FE1000 prodos/sys/GRLIB.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/CAT#FE1000 prodos/sys/CAT.REL
cp rel/apple/NEWDIR#FE1000 prodos/sys/NEWDIR.REL cp rel/apple/NEWDIR#FE1000 prodos/sys/NEWDIR.REL
cp rel/apple/TYPE#FE1000 prodos/sys/TYPE.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/ARGS#FE1000 prodos/sys/ARGS.REL
cp rel/ED#FE1000 prodos/sys/ED.REL cp rel/ED#FE1000 prodos/sys/ED.REL
cp rel/FIBER#FE1000 prodos/sys/FIBER.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/JIT#FE1000 prodos/sys/JIT.REL
cp rel/apple/JIT16#FE1000 prodos/sys/JIT16.REL cp rel/apple/JIT16#FE1000 prodos/sys/JIT16.REL
cp rel/apple/JITUNE#FE1000 prodos/sys/JITUNE.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/LZ4#FE1000 prodos/sys/LZ4.REL
cp rel/TFTPD#FE1000 prodos/sys/TFTPD.REL cp rel/TFTPD#FE1000 prodos/sys/TFTPD.REL
cp rel/INT32#FE1000 prodos/sys/INT32.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 rm -rf prodos/demos
mkdir prodos/demos mkdir prodos/demos
cp rel/INT32TEST#FE1000 prodos/demos/INT32TEST.REL 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/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
cp rel/apple/GRTEST#FE1000 prodos/demos/GRTEST.REL cp rel/apple/GRTEST#FE1000 prodos/demos/GRTEST.REL
cp rel/apple/DGRTEST#FE1000 prodos/demos/DGRTEST.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/LZ4CAT#FE1000 prodos/demos/LZ4CAT.REL
cp rel/PRIMEGAP#FE1000 prodos/demos/PRIMEGAP.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 mkdir prodos/demos/rogue
cp rel/ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL cp rel/ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL
cp rel/ROGUECOMBAT#FE1000 prodos/demos/rogue/ROGUECOMBAT.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/grtest.pla prodos/bld/samples/GRTEST.PLA.TXT
cp samplesrc/dgrtest.pla prodos/bld/samples/DGRTEST.PLA.TXT cp samplesrc/dgrtest.pla prodos/bld/samples/DGRTEST.PLA.TXT
cp samplesrc/hgrtest.pla prodos/bld/samples/HGRTEST.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/fibertest.pla prodos/bld/samples/FIBERTEST.PLA.TXT
cp samplesrc/mousetest.pla prodos/bld/samples/MOUSETEST.PLA.TXT cp samplesrc/mousetest.pla prodos/bld/samples/MOUSETEST.PLA.TXT
cp samplesrc/memtest.pla prodos/bld/samples/MEMTEST.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/fatcat.pla prodos/bld/samples/FATCAT.PLA.TXT
cp samplesrc/gfxdemo.pla prodos/bld/samples/GFXDEMO.PLA.TXT cp samplesrc/gfxdemo.pla prodos/bld/samples/GFXDEMO.PLA.TXT
cp samplesrc/lz4cat.pla prodos/bld/samples/Z4CAT.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 #mkdir prodos/bld/examples
#cp samplesrc/examples/ex.1.pla prodos/bld/examples/EX.1.PLA.TXT #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 mkdir prodos/bld/inc
cp inc/args.plh prodos/bld/inc/ARGS.PLH.TXT 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/cmdsys.plh prodos/bld/inc/CMDSYS.PLH.TXT
cp inc/conio.plh prodos/bld/inc/CONIO.PLH.TXT cp inc/conio.plh prodos/bld/inc/CONIO.PLH.TXT
cp inc/lines.plh prodos/bld/inc/LINES.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/hgrsprite.plh prodos/bld/inc/HGRSPRITE.PLH.TXT
cp inc/hgrlib.plh prodos/bld/inc/HGRLIB.PLH.TXT cp inc/hgrlib.plh prodos/bld/inc/HGRLIB.PLH.TXT
cp inc/grlib.plh prodos/bld/inc/GRLIB.PLH.TXT cp inc/grlib.plh prodos/bld/inc/GRLIB.PLH.TXT

View File

@@ -24,7 +24,7 @@ def dgrTest#0
byte b, l, k byte b, l, k
word i, j, ii, ij word i, j, ii, ij
b = dgrMode() b = dgrMode(TRUE)
dgrDrawBuf(0) dgrDrawBuf(0)
for k = 15 downto 0 for k = 15 downto 0
dgrClear(k) dgrClear(k)
@@ -59,7 +59,7 @@ def dgrTest#0
fin fin
loop loop
^$C010 ^$C010
txtMode dgrMode(FALSE)
end end
dgrTest dgrTest

View File

@@ -24,7 +24,7 @@ def grTest#0
byte b, l, k byte b, l, k
word i, j, ii, ij word i, j, ii, ij
b = grMode() b = grMode(TRUE)
grDrawBuf(0) grDrawBuf(0)
for k = 15 downto 0 for k = 15 downto 0
grClear(k) grClear(k)
@@ -59,7 +59,7 @@ def grTest#0
fin fin
loop loop
^$C010 ^$C010
txtMode grMode(FALSE)
end end
grTest grTest

View File

@@ -42,6 +42,7 @@ def testblt(sprtnum)#0
jj[0] = -1 jj[0] = -1
if sprtnum if sprtnum
for k = 1 to sprtnum for k = 1 to sprtnum
spriteAdd(k, spriteDup(sprtBall))
i[k] = ((i[k - 1] ^ 37) + 97) % 270 i[k] = ((i[k - 1] ^ 37) + 97) % 270
ii[k] = -ii[k - 1] ii[k] = -ii[k - 1]
j[k] = ((j[k - 1] ^ 29) + 53) % 180 j[k] = ((j[k - 1] ^ 29) + 53) % 180
@@ -65,7 +66,7 @@ def testblt(sprtnum)#0
loop loop
end end
hgrMode hgrMode(TRUE)
spriteDrawBuf(hgrDrawBuf(0)) // So we can see the compile process spriteDrawBuf(hgrDrawBuf(0)) // So we can see the compile process
sprtBall = spriteCompile(10, 10, 5, 5, @ball) sprtBall = spriteCompile(10, 10, 5, 5, @ball)
hgrColor(0) hgrColor(0)
@@ -74,22 +75,7 @@ testline
memcpy($4000, $2000, $2000) // Copy to both buffers memcpy($4000, $2000, $2000) // Copy to both buffers
spriteDrawBuf(hgrDrawBuf(1)) spriteDrawBuf(hgrDrawBuf(1))
spriteAdd(0, sprtBall) 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) testblt(16)
getc getc
txtMode hgrMode(FALSE)
done done

637
src/samplesrc/sfm.pla Normal file
View 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
View 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

View 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

View File

@@ -6,9 +6,12 @@ echo "BLD/CODEOPT"; atftp $1 --put -l rel/CODEOPT#FE1000 -r $2/BLD/CODEOPT#FE10
#Build incs #Build incs
echo "BLD/INC/ARGS.PLH"; atftp $1 --put -l inc/args.plh -r $2/BLD/INC/ARGS.PLH#040000 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/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/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/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/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/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 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/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/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/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/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/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/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/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/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/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/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 echo "BLD/SAMPLES/LZ4CAT.PLA"; atftp $1 --put -l samplesrc/lz4cat.pla -r $2/BLD/SAMPLES/LZ4CAT.PLA#040000
echo "BLD/SAMPLES/SFM.PLA"; atftp $1 --put -l samplesrc/sfm.pla -r $2/BLD/SAMPLES/SFM.PLA#040000
# Examples from video series echo "BLD/SAMPLES/SFMSPRT.PLA"; atftp $1 --put -l samplesrc/sfmsprt.pla -r $2/BLD/SAMPLES/SFMSPRT.PLA#040000
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/SAMPLES/MON.PLA"; atftp $1 --put -l utilsrc/apple/mon.pla -r $2/BLD/SAMPLES/MON.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

View File

@@ -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/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/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/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/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/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/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 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 # Music demo
echo "DEMOS/MUSIC/PLAYSEQ"; atftp $1 --put -l rel/apple/PLAYSEQ#FE1000 -r $2/DEMOS/MUSIC/PLAYSEQ#FE1000 echo "DEMOS/MUSIC/PLAYSEQ"; atftp $1 --put -l rel/apple/PLAYSEQ#FE1000 -r $2/DEMOS/MUSIC/PLAYSEQ#FE1000
atftp $1 --put -l mockingboard/ultima3.seq -r $2/DEMOS/MUSIC/ULTIMA3.SEQ#060000 atftp $1 --put -l mockingboard/ultima3.seq -r $2/DEMOS/MUSIC/ULTIMA3.SEQ#060000

View File

@@ -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 echo "SYS/JITUNE"; atftp $1 --put -l rel/apple/JITUNE#FE1000 -r $2/SYS/JITUNE#FE1000
# Core libraries # 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/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/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 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/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/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/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/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/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 echo "SYS/HGRLIB"; atftp $1 --put -l rel/apple/HGRLIB#FE1000 -r $2/SYS/HGRLIB#FE1000

View File

@@ -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/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/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/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

View File

@@ -438,29 +438,38 @@ def readtxt(filename, startline)#0
putln putln
end end
def writetxt(filename)#0 def writetxt(filename)#0
word i, strptr word i
byte refnum, j, chr byte refnum, txtbuf[MAXLNLEN+2]
byte 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. // Remove blank lines at end of text.
// //
while numlines > 1 and txtlinbuf=>[numlines - 1] == @nullstr; numlines--; loop 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 for i = 0 to numlines - 1
lncpy(@txtbuf, txtlinbuf=>[i]) 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 if !(i & $0F); putc('.'); fin
next next
fileio:close(refnum) if fileio:close(refnum) <> FILE_ERR_OK
puts("\nError $"); puth(perr); puts(" closing: "); puts(filename)
fin
putln putln
end end
// //

View File

@@ -507,7 +507,7 @@ include "toolsrc/parse.pla"
// //
// Look at command line arguments and compile module // 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) arg = argNext(argFirst)
if ^arg and ^(arg + 1) == '-' if ^arg and ^(arg + 1) == '-'
opt = arg + 2 opt = arg + 2

View File

@@ -1,11 +1,14 @@
include "inc/cmdsys.plh" include "inc/cmdsys.plh"
include "inc/longjmp.plh"
include "inc/args.plh" include "inc/args.plh"
include "inc/matchfiles.plh"
include "inc/fileio.plh" include "inc/fileio.plh"
include "inc/int32.plh" include "inc/int32.plh"
var arg, refnum, dirbuf predef catalog(pathstr)#0
var page, firstblk, entrylen, entriesblk, i, entry, filecnt
char[64] path, filename var arg, recurse, exit
char[64] path, wildname
res[t_fileinfo] fileinfo res[t_fileinfo] fileinfo
res[t_fileentry] fileentry res[t_fileentry] fileentry
// //
@@ -25,17 +28,23 @@ def putb(b)#0
fin fin
putc(h) putc(h)
end end
def strupper(strptr)#0 //
// Copy string with upper case conversion
//
def struprcpy(dst, src)#0
byte i, chr byte i, chr
if ^strptr if ^src
for i = 1 to ^strptr for i = 1 to ^src
chr = strptr->[i] chr = src->[i]
if chr >= 'a' and chr <= 'z' if chr >= 'a' and chr <= 'z'
strptr->[i] = chr - 'a' + 'A' dst->[i] = chr - 'a' + 'A'
else
dst->[i] = chr
fin fin
next next
fin fin
^dst = ^src
end end
def filefrompath(filestr, pathstr)#0 def filefrompath(filestr, pathstr)#0
byte i byte i
@@ -82,91 +91,94 @@ def printentry(entryptr)#0
puts(@eofstr) puts(@eofstr)
putln putln
end end
// def printentries(pathstr, entries, num)#0
// Check arguments and file types byte page
//
arg = argNext(argFirst) puts(pathstr); putln
if ^arg
strcpy(@path, arg)
strupper(@path)
else
fileio:getpfx(@path)
fin
//
// Check if file exists
//
if fileio:getfileinfo(@path, @fileinfo) == FILE_ERR_OK
puts("=NAME==========TYPE===AUX====LENGTH=\n") puts("=NAME==========TYPE===AUX====LENGTH=\n")
// page = 20
// Check if cataloging a directory
//
if fileinfo.file_type == $0F
fileio:iobufalloc(2) // Reserve two I/O buffers
if path[path] <> '/' // Make sure path ends with a '/'
path++
path[path] = '/'
fin
page = 21
filecnt = 0
firstblk = 1
dirbuf = heapallocalign(512, 8, 0)
refnum = fileio:open(@path)
repeat repeat
if fileio:read(refnum, dirbuf, 512) == 512 printentry(entries)
// entries = entries + t_fileentry
// Skip block pointers
//
entry = dirbuf + 4
if firstblk
//
// Pull out revelant details from the first block
//
entrylen = dirbuf->$23
entriesblk = dirbuf->$24
filecnt = dirbuf=>$25
entry = entry + entrylen
fin
for i = firstblk to entriesblk
//
// Print directory entry details
//
^entry = ^entry & $0F
if ^entry
printentry(entry)
filecnt--
// //
// Pause display every screenfull // Pause display every screenfull
// //
if not page if not page
getc if toupper(getc()) == 'Q'
throw(exit, TRUE)
fin
page = 22 page = 22
else else
page-- page--
fin fin
fin num--
entry = entry + entrylen until not num
next end
firstblk = 0 def catalog(pathstr)#0
fin char recursepath[64]
until filecnt == 0 var entrylist, entryptr, entrycnt
else
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) strcpy(@recursepath, pathstr)
fileentry.entry_access = fileinfo.file_access strcat(@recursepath, entryptr)
fileentry.entry_type = fileinfo.file_type recursepath++
fileentry:entry_create:0 = fileinfo:create_date recursepath[recursepath] = '/'
fileentry:entry_create:2 = fileinfo:create_time if toupper(getc()) == 'Q'
fileentry:entry_aux = fileinfo:aux_type throw(exit, TRUE)
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)
fin 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 else
puts("Unable to open: "); puts(@path); putln puts("Unable to open: "); puts(@path); putln
fin fin
fin
done done

View File

@@ -1,14 +1,72 @@
include "inc/cmdsys.plh" include "inc/cmdsys.plh"
include "inc/longjmp.plh"
include "inc/args.plh" include "inc/args.plh"
include "inc/fileio.plh" include "inc/fileio.plh"
include "inc/matchfiles.plh"
const MAXBUFSIZE = 16384 const MAXBUFSIZE = 16384
var arg, srcref, dstref, copybuff, copysize, copyxfer var arg, exit, srcfilelist, srcfileptr, srccnt
char[64] srcfilename, dstfilename var copybuff, copyrel, copysize
byte recurse, dstlen
char[64] curpath, dstpath
char[16] srcdir
res[t_fileinfo] srcfileinfo, dstfileinfo 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 def filefrompath(filestr, pathstr)#0
byte i byte i
@@ -21,126 +79,217 @@ def filefrompath(filestr, pathstr)#0
memcpy(filestr + 1, pathstr + 1 + i, ^filestr) memcpy(filestr + 1, pathstr + 1 + i, ^filestr)
end end
// //
// Check destination filename // Check destination path
// //
def checkdst def chkdstpath(dstfile)
char[17] basefile
// //
// Check if destination exists // 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 // Check if copying into a directory
// //
if dstfileinfo.file_type == $0F if dstfileinfo.file_type == $0F
if dstfilename[dstfilename] <> '/' if dstfile->[^dstfile] <> '/'
// //
// Add path seperator // Add path seperator
// //
dstfilename++ ^dstfile++
dstfilename[dstfilename] = '/' dstfile->[^dstfile] = '/'
fin
return TRUE
fin
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 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 fin
else else
return TRUE puts(@srcfilepath)
fin //
// Check if destination file exists
//
if fileio:getfileinfo(@dstfilepath, @dstfileinfo) == FILE_ERR_OK
fileio:destroy(@dstfilepath)
fin 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 fin
return TRUE
end end
// //
// Install error exit
//
exit = heapalloc(t_except)
if not except(exit)
fileio:getpfx(@curpath)
//
// Check arguments and file types // Check arguments and file types
// //
arg = argNext(argFirst) 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 if ^arg
strcpy(@srcfilename, arg) srcfilelist = heapalloc(^arg + 1)
fileio:iobufalloc(2) // Reserve two I/O buffers pathcpy(srcfilelist, arg)
if fileio:getfileinfo(@srcfilename, @srcfileinfo) == FILE_ERR_OK srccnt++
//
// Check that source isn't a directory - can't handle that yet
//
if srcfileinfo.file_type == $0F
puts("Can't copy directories (yet)\n")
return
fin
else
//
// File not found
//
puts("File not found: "); puts(@srcfilename); putln
return
fin
srcref = fileio:open(@srcfilename)
if srcref
arg = argNext(arg) arg = argNext(arg)
if ^arg if ^arg
strcpy(@dstfilename, arg) pathcpy(@dstpath, arg)
if checkdst() 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 srcfileptr = heapalloc(dstpath + 1)
dstref = fileio:open(@dstfilename) strcpy(srcfileptr, @dstpath)
if dstref 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 copysize = MAXBUFSIZE
while isult(heapavail, copysize + 512) while isult(heapavail, copysize + 512)
copysize = copysize / 2 copysize = copysize / 2
loop loop
copybuff = heapalloc(copysize) copyrel = heapalloc(copysize)
if copybuff if not copyrel
puts(" No available memory for copy buffer\n")
return
fin
// //
// Round buffer to page boundary for faster transfers // Round buffer to page boundary for faster transfers
// //
copybuff = (copybuff + $FF) & $FF00 copybuff = (copyrel + $FF) & $FF00
copyxfer = fileio:read(srcref, copybuff, copysize) //
while copyxfer // Iterate through all sources
if fileio:write(dstref, copybuff, copyxfer) <> copyxfer //
puts("Error writing: "); puts(@dstfilename); putln srcfileptr = srcfilelist
break 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 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 loop
else heaprelease(copyrel)
puts("No memory available!\n") return
fin fin
else
puts("Unable to open: "); puts(@dstfilename); putln
fin
else
puts("Unable to create: "); puts(@dstfilename); putln
fin fin
puts("Usage: +COPY <SRCFILE>+ <DEST>\n")
fin fin
fileio:close(0) 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 done

View File

@@ -1,62 +1,168 @@
include "inc/cmdsys.plh" include "inc/cmdsys.plh"
include "inc/longjmp.plh"
include "inc/args.plh" include "inc/args.plh"
include "inc/fileio.plh" include "inc/fileio.plh"
include "inc/matchfiles.plh"
char[64] filename var arg, recurse, exit, filelist, fileptr, filecnt
var arg 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 // Check filename
// //
def checkfile def chkfile(file)#1
var refnum, dirbuf var refnum, dirbuf, filecnt
res[t_fileinfo] fileinfo
// //
// Check if file exists // 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 // Check if deleting a directory
// //
if fileinfo.file_type == $0F if fileinfo.file_type == $0F
refnum = fileio:open(@filename) refnum = fileio:open(file)
if refnum if refnum
// //
// Check for files inside directory // Check for files inside directory
// //
filecnt = 0
dirbuf = heapalloc(512) dirbuf = heapalloc(512)
if fileio:read(refnum, dirbuf, 512) == 512 if fileio:read(refnum, dirbuf, 512) == 512
fileio:close(refnum) fileio:close(refnum)
if dirbuf=>$25 // File count in directory filecnt = dirbuf=>$25 // File count in directory
puts("Directory not empty: "); puts(@filename); putln
return FALSE
fin fin
heaprelease(dirbuf)
if filecnt
puts("Directory not empty: "); puts(file); putln
return FALSE
fin fin
fin fin
fin fin
return TRUE return TRUE
fin fin
puts("File not found: "); puts(@filename); putln puts("File not found: "); puts(file); putln
return FALSE return FALSE
end 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 // Check arguments and file types
// //
arg = argNext(argFirst) 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 if ^arg
strcpy(@filename, arg) filelist = heapmark()
if checkfile() 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 fin
//
// Close all files
//
fileio:close(0)
return
fin fin
puts("Usage: +DEL FILE\n")
done done

51
src/utilsrc/apple/zip.pla Normal file
View 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

View File

@@ -369,7 +369,7 @@ def volumes#0
next next
end end
puts("TFTP Server Version 2.0 Dev\n") puts("TFTP Server Version 2.0 DP3\n")
if !iNet:initIP() if !iNet:initIP()
return -1 return -1
fin fin

View File

@@ -52,7 +52,7 @@ byte perr, refauto
// String pool. // String pool.
// //
byte autorun[] = "AUTORUN" byte autorun[] = "AUTORUN"
byte verstr[] = "\nPLASMA DP2" byte verstr[] = "\nPLASMA DP3"
byte freestr[] = "MEM FREE:$" byte freestr[] = "MEM FREE:$"
byte errorstr[] = "ERR:$" byte errorstr[] = "ERR:$"
byte prompt[] = "PLASMA" byte prompt[] = "PLASMA"

View File

@@ -1383,7 +1383,7 @@ heap = @lastdef
// //
// Print PLASMA version // 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. // Init symbol table.
// //

View File

@@ -1460,7 +1460,7 @@ heap = @lastdef
// //
// Print PLASMA version // 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. // Init symbol table.
// //

View File

@@ -1263,7 +1263,7 @@ cmdlnptr = @cmdln
// Print PLASMA version // Print PLASMA version
// //
init_cons 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 prstr("MEM:$"); prword(availheap); crout
// //
// Exec command line parser // Exec command line parser

View File

@@ -1286,7 +1286,7 @@ cmdlnptr = @cmdln
// Print PLASMA version // Print PLASMA version
// //
init_cons 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 prstr("MEM:$"); prword(availheap); crout
// //
// Exec command line parser // Exec command line parser