092
19.12.2025, 12:59 Uhr
Dresdenboy
|
Mit dem Z80-Disassembler von hier: http://www.brouhaha.com/~eric/software/d52/ kann gut lesbarer BASIC-T-Assemblercode (mit Optionen -c -d) erzeugt werden.
Edit: Da ich den Compreter auch gerade in der Mache hatte, wollte ich mal sehen, wie die Grafik ausgegeben wird. Also ganz stumpf ein kleines Progrämmchen geschrieben:
| Quellcode: | 100 FOR I=1 TO 1000 200 DOT 6,3 300 NEXT I |
Die Schleife dient nur dem ständigen Durchlaufen des Codes, um ihn zu finden.
Um es besser nachvollziehbar zu machen, habe ich im JKCEMU-Debugger die Befehle aufgezeichnet. Der spannende Teil ist:
| Quellcode: | AF=0044 [.Z...P..] BC=0000 DE=0360 HL=0006 IX=4419 IY=420D SP=43A3 PC=3B20 06 01 LD B,01H AF=0044 [.Z...P..] BC=0100 DE=0360 HL=0006 IX=4419 IY=420D SP=43A3 PC=3B22 18 02 JR 3B26H AF=0044 [.Z...P..] BC=0100 DE=0360 HL=0006 IX=4419 IY=420D SP=43A3 PC=3B26 21 00 90 LD HL,9000H AF=0044 [.Z...P..] BC=0100 DE=0360 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B29 3A 02 3B LD A,(3B02H) AF=0344 [.Z...P..] BC=0100 DE=0360 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B2C 2F CPL AF=FC7E [.Z1H1PN.] BC=0100 DE=0360 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B2D CB BF RES 7,A AF=7C7E [.Z1H1PN.] BC=0100 DE=0360 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B2F 16 00 LD D,00H AF=7C7E [.Z1H1PN.] BC=0100 DE=0060 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B31 5F LD E,A AF=7C7E [.Z1H1PN.] BC=0100 DE=007C HL=9000 IX=4419 IY=420D SP=43A3 PC=3B32 CB 23 SLA E AF=7CA8 [S.1.1...] BC=0100 DE=00F8 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B34 CB 23 SLA E AF=7CA5 [S.1..P.C] BC=0100 DE=00F0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B36 30 01 JR NC,3B39H AF=7CA5 [S.1..P.C] BC=0100 DE=00F0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B38 14 INC D AF=7C01 [.......C] BC=0100 DE=01F0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B39 CB 22 SLA D AF=7C00 [........] BC=0100 DE=02F0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B3B CB 23 SLA E AF=7CA1 [S.1....C] BC=0100 DE=02E0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B3D 30 01 JR NC,3B40H AF=7CA1 [S.1....C] BC=0100 DE=02E0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B3F 14 INC D AF=7C01 [.......C] BC=0100 DE=03E0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B40 CB 22 SLA D AF=7C04 [.....P..] BC=0100 DE=06E0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B42 CB 23 SLA E AF=7C85 [S....P.C] BC=0100 DE=06C0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B44 30 01 JR NC,3B47H AF=7C85 [S....P.C] BC=0100 DE=06C0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B46 14 INC D AF=7C01 [.......C] BC=0100 DE=07C0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B47 CB 22 SLA D AF=7C08 [....1...] BC=0100 DE=0EC0 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B49 CB 23 SLA E AF=7C81 [S......C] BC=0100 DE=0E80 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B4B 30 01 JR NC,3B4EH AF=7C81 [S......C] BC=0100 DE=0E80 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B4D 14 INC D AF=7C09 [....1..C] BC=0100 DE=0F80 HL=9000 IX=4419 IY=420D SP=43A3 PC=3B4E 19 ADD HL,DE AF=7C08 [....1...] BC=0100 DE=0F80 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B4F 3A 00 3B LD A,(3B00H) AF=0608 [....1...] BC=0100 DE=0F80 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B52 16 00 LD D,00H AF=0608 [....1...] BC=0100 DE=0080 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B54 5F LD E,A AF=0608 [....1...] BC=0100 DE=0006 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B55 CB 3B SRL E AF=0604 [.....P..] BC=0100 DE=0003 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B57 CB 3B SRL E AF=0601 [.......C] BC=0100 DE=0001 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B59 CB 3B SRL E AF=0645 [.Z...P.C] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B5B 19 ADD HL,DE AF=064C [.Z..1P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B5C E6 07 AND 07H AF=0614 [...H.P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B5E C6 00 ADD A,00H AF=0600 [........] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B60 5F LD E,A AF=0600 [........] BC=0100 DE=0006 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B61 3E 80 LD A,80H AF=8000 [........] BC=0100 DE=0006 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B63 28 04 JR Z,3B69H AF=8000 [........] BC=0100 DE=0006 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B65 0F RRCA AF=4000 [........] BC=0100 DE=0006 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B66 1D DEC E AF=4002 [......N.] BC=0100 DE=0005 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B67 20 FC JR NZ,3B65H AF=4002 [......N.] BC=0100 DE=0005 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B65 0F RRCA AF=2020 [..1.....] BC=0100 DE=0005 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B66 1D DEC E AF=2002 [......N.] BC=0100 DE=0004 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B67 20 FC JR NZ,3B65H AF=2002 [......N.] BC=0100 DE=0004 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B65 0F RRCA AF=1000 [........] BC=0100 DE=0004 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B66 1D DEC E AF=1002 [......N.] BC=0100 DE=0003 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B67 20 FC JR NZ,3B65H AF=1002 [......N.] BC=0100 DE=0003 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B65 0F RRCA AF=0808 [....1...] BC=0100 DE=0003 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B66 1D DEC E AF=0802 [......N.] BC=0100 DE=0002 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B67 20 FC JR NZ,3B65H AF=0802 [......N.] BC=0100 DE=0002 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B65 0F RRCA AF=0400 [........] BC=0100 DE=0002 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B66 1D DEC E AF=0402 [......N.] BC=0100 DE=0001 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B67 20 FC JR NZ,3B65H AF=0402 [......N.] BC=0100 DE=0001 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B65 0F RRCA AF=0200 [........] BC=0100 DE=0001 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B66 1D DEC E AF=0242 [.Z....N.] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B67 20 FC JR NZ,3B65H AF=0242 [.Z....N.] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B69 CB 40 BIT 0,B AF=0210 [...H....] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B6B F3 DI AF=0210 [...H....] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B6C 08 EX AF,AF' AF=8044 [.Z...P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B6D AF XOR A AF=0044 [.Z...P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B6E D3 08 OUT (08H),A AF=0044 [.Z...P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B70 08 EX AF,AF' AF=0210 [...H....] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B71 28 0B JR Z,3B7EH AF=0210 [...H....] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B73 B6 OR (HL) AF=0200 [........] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B74 77 LD (HL),A AF=0200 [........] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B75 08 EX AF,AF' AF=0044 [.Z...P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B76 3E 80 LD A,80H AF=8044 [.Z...P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B78 D3 08 OUT (08H),A AF=8044 [.Z...P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B7A 08 EX AF,AF' AF=0200 [........] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B7B FB EI AF=0200 [........] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B7C AF XOR A AF=0044 [.Z...P..] BC=0100 DE=0000 HL=9F80 IX=4419 IY=420D SP=43A3 PC=3B7D C9 RET |
Das scheint den DOT-Befehl umzusetzen. Man findet weit oben schon ein LD HL, 9000H bei PC=3B26, was ich als Bildspeicher-Basisadresse werte. Dann wird dafür ein Offset 0F80H errechnet (bis PC=3B4E). Hierbei befindet sich BASIC-typisch der Koordinatenursprung unten links, da Y=3 von oben links nicht so einen großen Offset erzeugen würde. Der Punkt wird dann wohl ab PC=3B73 geschrieben, indem erst mit OR (HL) das Byte aus dem BWS verknüpft und dann mit LD (HL),A geschrieben wird. A ist zu dem Zeitpunkt 02H, was von links gezählt das 7. Bit (X=6) wäre.
Mit den Daten ergäbe sich z.B. eine Bitmap im BWS ab 9000H mit Dimensionen 256x128, wo ab Zeilenoffset 127-3=124 mit 32 Bytes pro Zeile (256 Bits) der Offset 124*32=F80H zustande kommt. Natürlich könnte der BWS auch anders angeordnet sein.
Interessant ist auch die Ausgabe auf Port 08H um die Schreiboperation herum. Hier könnte der BWS temporär eingeblendet werden.
Welches System hat diese BWS-Spezifikationen? - 4 kB BWS - 256x128 Pixel monochrom - Basisadresse 9000h - Speicherseitenumschaltung über Port 08h
VG, Matthias -- ___________________________________ Produktionen im Rahmen der "The Computer Art Community" (Demoszene): https://demozoo.org/sceners/64936/, YT-Kanal: https://www.youtube.com/@4lpha0ne/videos Programmierung seit '86 in BASIC: KC85/3, C64, A1200, PC | ASM: LC-80, C64, KC87, A1200, NeoGeo, PC, Mega 65, µC | Turbo Pascal: BIC, PC | C: RS/6000, Alpha, PC, µC | C++, Java, Javascript, Rust, Lua, Perl, PHP u.a. auf PC HW: LC-80, BIC A5105 komplett, KC87, KC85/2-4, KCC, C64s, C16, Plus/4s, A500s, A1200, Mega 65, ESP32s, RasPis, PCs, Laptops, MR 610, ... Dieser Beitrag wurde am 19.12.2025 um 14:59 Uhr von Dresdenboy editiert. |