1K lowres games in machinecode on a Lambda
1K lowres games in machinecode on a Lambda
Perhaps not too difficult to do. The dfile is fixed at 407Dh, so that's a main change to a game that allows it to run on the Lambda
But what about using the maximum RAM by coding over the System Variables? Devilishly tricky
Here is Game1 of Dr. Beeps gamecoding course Well, kind of running. At least it found the BASIC line and creates a display
The first challenge is that the "next basic line" System Variable is changed on the Lambda to be where E_PPC is on a ZX81. Looks like the next challenge is to debug it. Does it not like the abbreviated dfile ending with E9? Or is just a simple typo somewhere?
But what about using the maximum RAM by coding over the System Variables? Devilishly tricky
Here is Game1 of Dr. Beeps gamecoding course Well, kind of running. At least it found the BASIC line and creates a display
The first challenge is that the "next basic line" System Variable is changed on the Lambda to be where E_PPC is on a ZX81. Looks like the next challenge is to debug it. Does it not like the abbreviated dfile ending with E9? Or is just a simple typo somewhere?
Re: 1K lowres games in machinecode on a Lambda
The most complex documentation I've found for the Lambda 8300 is in German:
https://airtable.com/shrXP65XwdIFSDVn3/ ... UoME2mOckk
https://airtable.com/shrXP65XwdIFSDVn3/ ... UoME2mOckk
Re: 1K lowres games in machinecode on a Lambda
If you are interested in getting the real hardware, one just showed up on eBay:
https://www.ebay.de/itm/334468975000
https://www.ebay.de/itm/334468975000
Re: 1K lowres games in machinecode on a Lambda
wow, quite a book
These are necessary porting changes, similar to what I used on the Tasword port:
1. DFILE_ADDR is hardcoded to 407Dh (16393)
2. update critical System Variables. For the 1K game specifically:
PROGRAM (where D_FILE is on ZX81)
NXTLINE (where E_PPC is on ZX81)
3. keyword translation. The one BASIC line here only uses GOTO (no change) and USR (bytecode differs)
USR token = 212 (ZX81) 208 (Lambda)
4. the usual Lambda characters changes (most importantly colon and question mark characters), which are not used by the 1K game
5. ROM calls. 07BDh is called. This is DECODE which works totally different in the Lambda.rom
The DECODE routine can be copied from ZX81 ROM, but the KEY TABLES are fairly sizeable
DECODE appears to be at $1489 (1489h) in Lambda.rom, but no success in calling it
These are necessary porting changes, similar to what I used on the Tasword port:
1. DFILE_ADDR is hardcoded to 407Dh (16393)
2. update critical System Variables. For the 1K game specifically:
PROGRAM (where D_FILE is on ZX81)
NXTLINE (where E_PPC is on ZX81)
3. keyword translation. The one BASIC line here only uses GOTO (no change) and USR (bytecode differs)
USR token = 212 (ZX81) 208 (Lambda)
4. the usual Lambda characters changes (most importantly colon and question mark characters), which are not used by the 1K game
5. ROM calls. 07BDh is called. This is DECODE which works totally different in the Lambda.rom
The DECODE routine can be copied from ZX81 ROM, but the KEY TABLES are fairly sizeable
Code: Select all
DECODE:
LD D,0
SRA B
SBC A,A
OR $26
LD L,5
SUB L
KEY_LINE:
ADD A,L
SCF
RR C
JR C,KEY_LINE
INC C
RET NZ
LD C,B
DEC L
LD L,1
JR NZ,KEY_LINE
LD HL,KEY_TABLES-1
LD E,A
ADD HL,DE
SCF
RET
KEY_TABLES: ;only unshifted keys are tabled here to save space
;Unshifted 007E-00A4
; Z X C V
db $3F,$3D,$28,$3B
; A S D F G
db $26,$38,$29,$2B,$2C
; Q W E R T
db $36,$3C,$2A,$37,$39
; 1 2 3 4 5
db $1D,$1E,$1F,$20,$21
; 0 9 8 7 6
db $1C,$25,$24,$23,$22
; P O I U Y
db $35,$34,$2E,$3A,$3E
;N/L L K J H
db $76,$31,$30,$2F,$2D
;[ ] . M N B
db $00,$1B,$32,$33,$27
Re: 1K lowres games in machinecode on a Lambda
the Lambda does not like the dfile "jp (hl)" method of ending a partial dfile. Even worse, as far as i can tell, it doesn't like partial lines, or a collapsed display file whatsoever
Which means many of the advanced 1K games won't fit in 1K on the Lambda
but is that a problem? The Lambda comes standard with 2K so all 1K games should run!
Which means many of the advanced 1K games won't fit in 1K on the Lambda
but is that a problem? The Lambda comes standard with 2K so all 1K games should run!
Re: 1K lowres games in machinecode on a Lambda
Yep. Updating dfile to use full-size works. Only had to modify the Up and Down routines to add/subtract 33 instead of 21
P file execution TESTED ON
P file execution TESTED ON
- NO$ZX v2.0 for Windows EMULATOR using setting 'LAMBDA 8300 (ZX81 revision)' with 2K
(NO$ZX = nocash ZX emulator by Martin Korth)
- EightyOne emulator 'Lambda 8300' with 32K & "Lambda.rom"
This emulator doesn't boot with less than 32K
- Attachments
-
- Game1_010_Lambda_2K.p
- (1.17 KiB) Downloaded 140 times
Re: 1K lowres games in machinecode on a Lambda
How does the Lambda react on "executable" opcodes on the screen, like LD B,BDavid G wrote: ↑Sat Jun 11, 2022 4:56 am the Lambda does not like the dfile "jp (hl)" method of ending a partial dfile. Even worse, as far as i can tell, it doesn't like partial lines, or a collapsed display file whatsoever
Which means many of the advanced 1K games won't fit in 1K on the Lambda
but is that a problem? The Lambda comes standard with 2K so all 1K games should run!
These hidden commands are part of my games, like in SNAKEBINGO where these opcodes hide the direction the tail moves in. On MINESWEEPER with these opcodes information of the minefield is stored on the screen.
PATHMAZE has the whole maze hidden, just like HIDDEN PICTURE 1,2 and 3
Re: 1K lowres games in machinecode on a Lambda
I will test. Can you provide sample code?
Re: 1K lowres games in machinecode on a Lambda
Maybe the tests should be on real hardware, as most emulators for Lambda 8300 reuse ZX81 code, and change a few things to compensate for Lambda, maybe not knowing how the Lambda 8300 really works.
Re: 1K lowres games in machinecode on a Lambda
I’ve previously tested how executing code above 32k works. It works fine without M1NOT modification. So here the ULAs are quite different.