4 ms·
Didn't it use the 80 column screen? It was my experience that the C128's 80 column screen was an absolute dog. I was pretty handy with 6502 assembly language bu
by greenbit 4y ago
Didn't it use the 80 column screen? It was my experience that the C128's 80 column screen was an absolute dog. I was pretty handy with 6502 assembly language but trying to get anything onto that screen was just disappointingly slow. Maybe I was doing it wrong, but it seemed like you had to put every last screen address into that display controller, and that controller itself required you to select register numbers before putting the values in.
So just to write one character onto the actual screen required six writes into the controller chip. Adress-low-register-number into D600, screen address LSB into D601. Then address-high-register-number into D600, then screen address MSB into D601. Now you're ready to write 'A' into the actual screen buffer! So, write-data-register-number into D600 and 0x41 into D601!
Do you want to put a 'B' on the screen right after that 'A'? Repeat the above - six more writes to get the 'B' showing! Why they didn't embed an auto-incrementing screen address counter in the controller is beyond reckoning. At least that way you'd only have need to set the address once, and could then leave the select register (D600) parked on the write-and-increment register, and merrily stuffed your display string into D601 with a relatively tight loop.
Presumably the Z80 had to put up with the same annoying 80 column controller. That can't have helped.
- deleted 4y ago[deleted]
- dzdt 4y agoThe hardware designer of the C128 (Bil Herd) had lots of choice things to say about the designer of that 80 column (MOS 8563) chip. The chip and machine were designed in parallel but the 8563 was originally intended for a different application and its designer had little consideration for making it work well in the system it ended up in. Though to be honest the weaknesses of the 8563 seem like they would make it pretty poor in any design.
- peterfirefly 4y ago> Why they didn't embed an auto-incrementing screen address counter in the controller is beyond reckoning. They did. Page 361 of the Commodore 128 Programmer's Reference Guide (halfway down the page): > At this point, the 8563 hardware takes over. It automatically increments the address contained in the update register pair (R18, R19). You as the programmer do not increment the update register pair's contents; the 8563 chip does this for you automatically. You can say that the update register pair is auto-incrementing. You can get the ProgRef here: https://www.pagetable.com/docs/Commodore%20128%20Programmer's%20Reference%20Guide.pdf https://www.pagetable.com/docs/Commodore%20128%20Programmer'...
- deleted 4y ago[deleted]
- greenbit 4y agoIn the PDF at the link you provided, I found what you're referring to at page 311 (in-document numbering) which is page 321 per my pdf viewer. So, yes, it did auto increment. I think what happened is that after 35 years, I just recalled my initial aggravation with addressing the 8563's RAM through that keyhole of R18, R19, R31. But .. looking around in the ol PRG, and finding some of Mr Herd's "choice comments" out on the web, I'd still say the 8563 was a dog. Case in point, having to poll D600 for bit 7 to become set just to make sure the 8563 had cottoned onto your request to set a register. That bottleneck to get to the 8563's RAM was not fun. The bottleneck to get into the 8563s own registers was even goofy. Why not just map them to D600-D61F ?
- peterfirefly 4y agoI have no idea how that ended up as 361.