TomHarte / CLK

A latency-hating emulator of: the Acorn Electron and Archimedes, Amstrad CPC, Apple II/II+/IIe and early Macintosh, Atari 2600 and ST, ColecoVision, Enterprise 64/128, Commodore Vic-20 and Amiga, MSX 1/2, Oric 1/Atmos, early PC compatibles, Sega Master System, Sinclair ZX80/81 and ZX Spectrum.
MIT License
911 stars 50 forks source link

Apple II series inverse text problems #1294

Closed ryandesign closed 6 months ago

ryandesign commented 6 months ago

There are some errors in the way that Clock Signal handles inverse text on the Apple II series which I wrote a program to demonstrate. Here are screenshots of this program showing the problem in Clock Signal and a corresponding screenshot from MAME showing how it should look.


On the Apple II and II plus, Clock Signal draws characters $00–$3F (rows 0–3 in my program) in "normal" but they should be drawn in inverse. Clock Signal correctly draws these characters in inverse when emulating the IIe.

Clock Signal MAME
clk-apple2p mame-apple2p

In the alternate character set on the unenhanced Apple IIe, Clock Signal draws characters $40–$7F (rows 4–7 in my program) in "normal" but they should be drawn in inverse.

Clock Signal MAME
clk-apple2e-alt mame-apple2e-alt

In the alternate character set on the enhanced Apple IIe, Clock Signal draws characters $40–$5F (the MouseText characters, rows 4–5 in my program) in inverse but they should be drawn in "normal", and it draws characters $60-$7F (rows 6-7 in my program) in "normal" but they should be drawn in inverse.

Clock Signal MAME
clk-apple2ee-alt mame-apple2ee-alt
Instructions for running my program You can poke my program into memory by entering the monitor from BASIC: ``` CALL -151 ``` And then pasting in: ``` C00:20 84 FE 20 2F FB 20 93 FE 20 89 :FE 20 58 FC AD 58 C0 AD 5A C0 AD 5D :C0 AD 5F C0 20 C3 0C 20 8E FD 20 8E :FD A0 0C 84 24 A2 00 8A 20 E3 FD E8 :E0 10 D0 F7 88 84 20 20 8E FD A9 AB :20 F0 FD A9 AD 20 F0 FD CA D0 FA 86 :3C 88 84 20 20 8E FD 8A 20 E3 FD A9 :A7 20 F0 FD A5 3C A0 02 91 28 69 01 :C8 C0 12 D0 F7 85 3C 20 8E FD E8 E0 :10 D0 E0 A2 00 86 20 20 8E FD 20 D3 :0C 20 8F 0D AD B3 FB C9 06 F0 0E A9 :5D 8D A9 0C A9 5C 8D B0 0C A0 00 F0 :03 AC 1E C0 84 D7 20 DB 0D 8D 10 C0 :AD 00 C0 10 FB C9 8D D0 12 24 D7 10 :07 8D 0E C0 A0 00 10 E4 8D 0F C0 A0 :FF 30 DD C9 9B D0 DE 8D 10 C0 20 58 :FC 6C FC FF A2 00 A9 45 85 3C A9 0E :85 3D 20 C2 0D 4C 17 0E A2 00 A9 56 :85 3C A9 0E 85 3D 20 C2 0D AD 1F FE :C9 60 D0 2F AD B3 FB C9 06 D0 5B AD :C0 FB F0 37 A9 67 85 3C A9 0E 85 3D :20 C2 0D AD C0 FB C9 EA F0 5B AD DD :FB C9 02 F0 14 A9 6A 85 3C A9 0E 85 :3D D0 73 A9 7B 85 3C A9 0E 85 3D D0 :69 A9 73 85 3C A9 0E 85 3D D0 5F A9 :78 85 3C A9 0E 85 3D 20 C2 0D AD BF :FB C9 05 D0 50 20 BA 0D A9 60 85 3C :A9 0E 85 3D D0 40 AD 1E FB C9 8A F0 :31 A9 5C 85 3C A9 0E 85 3D 20 C2 0D :AD B3 FB C9 38 F0 2A 20 BA 0D AD B3 :FB C9 C9 D0 0B A9 5E 85 3C A9 0E 85 :3D 20 C2 0D A9 60 85 3C A9 0E 85 3D :D0 08 A9 64 85 3C A9 0E 85 3D 20 C2 :0D 4C 17 0E A9 17 20 5B FB A2 00 AD :B3 FB C9 06 F0 04 C9 C9 D0 0B A9 9E :85 3C A9 0E 85 3D 20 C2 0D A9 B7 85 :3C A9 0E 85 3D 20 C2 0D 4C 17 0E A9 :5B 85 3C A9 0E 85 3D A0 00 F0 05 9D :00 02 C8 E8 B1 3C 30 F7 09 80 9D 00 :02 E8 A9 00 9D 00 02 60 A9 16 20 5B :FB A2 00 20 BA 0D AD B3 FB C9 06 F0 :04 C9 C9 D0 19 24 D7 30 0A A9 7F 85 :3C A9 0E 85 3D D0 08 A9 87 85 3C A9 :0E 85 3D 20 C2 0D A9 91 85 3C A9 0E :85 3D 20 C2 0D 20 BA 0D 8A 49 FF 38 :65 21 4A 18 65 20 85 24 A2 00 F0 04 :20 31 0E E8 BD 00 02 D0 F7 60 AC B3 :FB C0 06 F0 0A C9 E1 90 06 C9 FB B0 :02 29 DF 4C F0 FD C3 C8 C1 D2 D3 C5 :D4 A0 C9 CE D3 D0 C5 C3 DD DB 52 C1 :F0 F0 EC E5 20 DD 5B EA 2D F0 EC F5 :73 AF AF 2F AF AF 65 A0 E5 EE E8 E1 :EE E3 E5 64 A0 E3 E1 F2 64 AF AF 63 :C9 C9 C7 53 D0 F2 E9 ED E1 F2 F9 20 :C1 EC F4 E5 F2 EE E1 F4 E5 20 E3 E8 :E1 F2 E1 E3 F4 E5 F2 A0 F3 E5 74 D2 :E5 F4 F5 F2 EE A0 BD A0 E3 E8 E1 EE :E7 E5 A0 E3 E8 E1 F2 F3 E5 F4 BB 20 :C5 F3 E3 A0 BD A0 E5 F8 E9 74 ``` Run it from the monitor with: ``` C00G ``` Or from BASIC with: ``` CALL 3072 ```