Here's the patch I wrote after applying your base patch. I must be making a silly mistake here, since it doesn't seem to work correcly. Semi-colon is no longer shifted as expected, but it's not catching the `o' for some reason.
.org 0722CH MOV A,C ; unchanged JMP extra ; go to patch [C3 AB 75] back(7230): MVI E,2CH ; unchanged RET ; unchanged .org 075ABH extra: CPI 1BH ; check for `o' [FE 1B] RZ ; [C8] CPI 19H ; > 25 ? [FE 19] RNC ; [D0] JMP back ; [C3 30 72] On Sat, Nov 25, 2023 at 04:48:40PM -0500, Stephen Adolph wrote: > here is a file "base_patch" that describes 4 changes to the Main ROM to > create a hole from > 75AB to 7640 > which is free to use. > > "... Base patch, which provides about 150 free bytes to use for > modifications to the M100 ROM. The basis of this patch is the > observation that the PIO data table could be reduced from 240 bytes to > 80 bytes. This change forces a rewrite of a short section of a > routine." > > Good luck with it; I used it to implement the hardware scroll patch for > the M100. > The hardware scroll patch document has a section that details how the > base patch works. > cheers > Steve > > On Sat, Nov 25, 2023 at 1:05 PM runrin <run....@rin.run> wrote: > > Wow, Stephen! Of course you know exactly where it is! > > Thanks so much! If you could share your character printing patch I'd > appreciate it. > > Looks like the simplest way to get `o' to work with caps lock would > be > to just accept that `;' and `[' will also be shifted, and change the > 27 > to a 29. > > It'll be fun to rewrite the routine though. It looks like there are > 5 or > 6 bytes free at the end of the ROM, so being able to squeeze the > patch > in there would be pretty nice. > > On Sat, Nov 25, 2023 at 08:34:30AM -0500, Stephen Adolph wrote: > > Since you are modifying the ROM, you may find to get what you > want you > > need more space. > > > > I have a patch that rewrites some routines for character > printing that > > frees up about 180 bytes if I recall correctly. I've used this > to fix > > things I don't like in the Main ROM. > > > > I'm happy to share that patch, should your hacking require some > bytes. > > > > to your question. > > > > 722CH (79H) MOV A,C Handle CAPS LOCK key during key decoding > > 722DH (FEH) CPI 1AH > > 722FH (D0H) RNC > > 7230H (1EH) MVI E,2CH > > 7232H (C9H) RET > > > > if the "regular key" is > 26 the key is not modified. > > because the key # for o is 27, no upper case. > > > > So you need a more complicated routine at 722Ch > > > > On Sat, Nov 25, 2023 at 1:08 AM runrin <run....@rin.run> wrote: > > > > Hey all! > > > > I just finished building my FlexROM and patching the system > rom for > > my > > keyboard layout of choice (colemak). I'm super excited about > it > > because > > it will make my m100 much more usable for me. > > > > Here are the relevant lines of the rom that were patched if > anyone > > is > > interested: > > > > 00007BF0 AA 7A 78 63 76 62 6B 6D 69 61 72 73 74 64 68 6E > > .zxcvbkmiarstdhn > > 00007C00 65 71 77 66 70 67 6A 6C 75 79 3B 5B 6F 27 2C 2E > > eqwfpgjluy;[o',. > > 00007C10 2F 31 32 33 34 35 36 37 38 39 30 2D 3D 5A 58 43 > > /1234567890-=ZXC > > 00007C20 56 42 4B 4D 49 41 52 53 54 44 48 4E 45 51 57 46 > > VBKMIARSTDHNEQWF > > 00007C30 50 47 4A 4C 55 59 3A 5D 4F 22 3C 3E 3F 21 40 23 > > PGJLUY:]O"<>?!@# > > ... > > 00007CF0 00 00 00 D4 D2 D3 A6 A7 A8 6D 30 6E 31 65 32 69 > > .........m0n1e2i > > 00007D00 33 6C 34 75 35 79 36 01 06 14 02 20 7F 09 1B 8B > > 3l4u5y6.... .... > > > > The last two lines makes the number pad work correctly (an > extremely > > easy fix!) > > > > There is just one small bug with my patch, and that is caps > lock not > > working correctly. When caps lock is enabled, `o' remains > lowercase > > and > > `;' types a `:'. I presume this is due to the way caps lock > works > > with > > the keyboard matrix. The letter `o' has been moved out of the > letter > > rows of the keyboard matrix, and is now in one of the symbol > > rows. The opposite is true of the semi-colon, now being part > of the > > letter matrix replacing `p'. > > > > Does anyone know if caps lock is done in software, or if it's > > modifying > > which characters are being selected by pulling a bit high or > > something? > > > > This is a really small issue, but I would like to get it > working > > correctly. I'll dive into the schematic when I have some time > and > > see if > > I can find a hint about how caps lock works. If not I'll > start > > messing > > around with Virtual-T and see what I can find there. > > > > If I dig anything interesting up, I'll update this thread > with what > > I > > learn. > ; patch #1 for M100/T102 rom > ; this patch reduced the amount of space needed in the LCD patterns table, > enabling room for future changes > > ; blocks: > > ; 7467 - 746E checked > ; 74BB - 74EA checked > ; 7551 - 75AA checked > ; 75AB - 763F hole created > > > > > ;-------------------------------------------------------------------------------------- > > ;PATCH2 > ; Proposed replacement code 7467 to 746E > ;checked > > .org 07467H > > p2: LXI H,7643H > CALL p5 > NOP > NOP > > > ;-------------------------------------------------------------------------------------- > ;PATCH3 > ; Proposed replacement code 74BB to 74EA > ; checked > > .org 074BBH > > p3: RLC > MOV C,A > MVI B,00H > LXI H,7551H > DAD B > MOV C,M > INX H > MOV A,M > PUSH PSW > LDA 0FFF4H > RAR > RAR > RAR > LXI H,7643H > CALL p5 > CALL 753BH > SHLD 0FFF6H > POP PSW > ORA B > MOV B,A > POP H > DCR D > CALL 74F7H > INR D > MVI A,06H > SUB E > RZ > MOV E,A > PUSH H > LHLD 0FFF6H > > > ;-------------------------------------------------------------------------------------- > ;PATCH4 > ; this is the corrected LCD table 7551 to 75A0 240 bytes > ; 75A1 to 7640 is free to use, 160 bytes total > ; checked > > .org 07551H ; 80 bytes > p4: .db 00H,00H,00H,06H,00H,0CH,00H,12H,00H,18H,00H,1EH,00H,24H,00H,2AH > .db 00H,30H > .db 02H,04H,02H,0AH,02H,10H,02H,16H,02H,1CH,02H,22H,02H,28H,02H,2EH > .db 04H,02H,04H,08H,04H,0EH,04H,14H,04H,1AH,04H,20H,04H,26H,04H,2CH > .db 06H,00H,06H,06H,06H,0CH,06H,12H,06H,18H,06H,1EH,06H,24H,06H,2AH > .db 06H,30H > .db 08H,04H,08H,0AH,08H,10H,08H,16H,08H,1CH,08H,22H > > > > > ;-------------------------------------------------------------------------------------- > ;PATCH5 > ; Proposed subroutine at 75A1H to 75AA > ; checked > .org 075A1H > > p5: JNC ahead1 > MVI L,4DH > ahead1: MVI B,00H > DAD B > MOV B,A > RET > > > ; 75A1 to 75AA is used > ; 75AB to 7640 free to use > > ;-------------------------------------------------------------------------------------- > > .org 075ABh > .db 00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00,00,00,00,00,00,00,00 > .db 00 > > .end > > > >