TI-99/4A Corcomp Floppy Disk Controller
There are 2 ROM sets available for this floppy controller. The original ROMs shipped with the controller completely replaced the TI title screen. This interfered with some other systems or software on the TI-99/4A. Consequently Miller Graphics released an updated set of ROMs that provided a substantially more neutral experience, while still including some of the BASIC subroutine enhancements.
But still pisses on the TI title screen
The Miller Graphics ROMs still overwrite part of the stock TI title screen with their own branding. I find this distasteful. So I set about to eliminate this from the ROMs I have.
To start I disassembled the ROM header to find the POWER entry in the power-up link list. Luckily it was in the bank 1 ROM that I started with.
A subset of ROM 1 disassembly
POWER MOV r11,r7 ; pc:>4126 w:>c1cb ; stash return addr
CLR @L2UNIT ; pc:>4128 w:>04e0
LI r1,>001e ; pc:>412c w:>0201 ; specify subroutine in bank 2 to call
BL @CBANK ; pc:>4130 w:>06a0 ; trampoline
STWP r9 ; pc:>4134 w:>02a9 ; get GPLWS addr
AI r9,>ff20 ; pc:>4136 w:>0229 ; subtract e0 for base of scratchpad addr
MOV @>8370,r0 ; pc:>413a w:>c020 ; copy screen address
MOV r0,r2 ; pc:>413e w:>c080
AI r0,>f7d8 ; pc:>4140 w:>0220 ; subtract 2088 bytes
MOV r0,@>8370 ; pc:>4144 w:>c800 ; stash this new addr
INC r0 ; pc:>4148 w:>0580 ; erase some buffers ??
BL @SETVWA ; pc:>414a w:>06a0
LI r1,>0828 ; pc:>414e w:>0201
LI r4,VDPWD ; pc:>4152 w:>0204
LZERO CLR *r4 ; pc:>4156 w:>04d4 ; write 0 to VDP
DEC r1 ; pc:>4158 w:>0601
JNE LZERO ; pc:>415a w:>16fd
BL @SETVWA ; pc:>415c w:>06a0
LI r3,>aa03 ; pc:>4160 w:>0203
MOVB r3,*r4 ; pc:>4164 w:>d503
JMP >4168 ; pc:>4166 w:>1000 ; NOP
MOVB r2,*r4 ; pc:>4168 w:>d502
SWPB r2 ; pc:>416a w:>06c2
MOVB r2,*r4 ; pc:>416c w:>d502
JMP >4170 ; pc:>416e w:>1000 ; NOP
MOVB r12,*r4 ; pc:>4170 w:>d50c
SWPB r3 ; pc:>4172 w:>06c3
MOVB r3,*r4 ; pc:>4174 w:>d503
BL @>43cc ; pc:>4176 w:>06a0
AI r12,>0008 ; pc:>417a w:>022c
LDCR @>426a,5 ; pc:>417e w:>3160
AI r12,>fff8 ; pc:>4182 w:>022c
SBZ 1 ; pc:>4186 w:>1e01
SBO 1 ; pc:>4188 w:>1d01
MOVB @>426c,@>5ff8 ; pc:>418a w:>d820
BL @>5c26 ; pc:>4190 w:>06a0
SZC *r12+,r10 ; pc:>4194 w:>42bc
LI r0,>0020 ; pc:>4196 w:>0200 ; set VDP write address to 2nd line of screen : OR replace this with JMP @>41c4 a.k.a. >1016
BL @SETVWA ; pc:>419a w:>06a0
LI r0,>2000 ; pc:>419e w:>0200 ; load SPACE into r0
LI r1,>0020 ; pc:>41a2 w:>0201 ; r1 count with 32 characters
LSPAC MOVB r0,@>fffe(r15) ; pc:>41a6 w:>dbc0 ; write a SPACE to indirect WD address
DEC r1 ; pc:>41aa w:>0601
JNE LSPAC ; pc:>41ac w:>16fc
CLR r0 ; pc:>41ae w:>04c0 ; set address to beginning of screen
BL @SETVWA ; pc:>41b0 w:>06a0
LI r0,>43aa ; pc:>41b4 w:>0200 ; copy 32 bytes from ROM 43AA to screen
LI r1,>0020 ; pc:>41b8 w:>0201
LBANR MOVB *r0+,@>fffe(r15) ; pc:>41bc w:>dbf0
DEC r1 ; pc:>41c0 w:>0601
JNE LBANR ; pc:>41c2 w:>16fc ; can NOP down to here to avoid the loop entirely
SBZ 1 ; pc:>41c4 w:>1e01
From this I determined that the title screen VDP memory area was being overwritten at PC 0x4196. It starts on the second line of the title screen. Then clears 32 (1 line) characters. Then it goes back to the beginning of that second line and copies 32 characters from the ROM onto the screen.
Note: Clearing the line first is completely wasteful. While the powerup routine is running the screen is ‘off’ only showing the background color.
It is done copying the new text onto the screen at PC 41c4 where it begins to initialize the state of the controller card.
So, simply jumping over the 2 loops will eliminate the title screen change and leave it the pristine, nostalgic image that I am used to from my youth.
To do this, simply replace the LI r0,>0020
instruction >0200
at address 0x4196 with forward jump of 22 words, >1016
in machine code.
This is at offset 0x0196 in an eprom programmer memory editor, as the ROMs base address is 0x4000.
These instructions apply to a bank 1 (1 of 2) ROM that has an original md5sum of 444886597c3c8002808751688f90dcd7
. If the change is performed
correctly, the new md5sum will be 395eade664216a8b320fd0f02c421de8
.