Aim is to find the main menu text.

1. Use the 'INS' button to single-frame emulate.
   Keep hitting it until the box begins to draw.
   Save state.
   Hit 'INS' until some text shows up.
   Save a BMP shot.

2. Select a target area in the BMP (234,265). This equals
   265*640 + 234 = $2976A / 8 = $52ED. So that's $AD2ED RAM.

3. 'hook_wr1 3 ad2ed ad300' will write the trace file when the vram gets written.
   Load emulator. Hit 'INS'. Load state.
   Hit ',' for memory logging. Hit '/' for tracing.
   Press 'INS' a few times.

It will take you to [1:5587-5588]. Start analyzing the code and you'll find some text.

The important part to note is the OUT/IN PORT commands. This area is the -ONLY- way
to r/w from the system font region. Which gets used to print some pixels on-screen.
So look for these commands when system text is used.



[1:55e5][143b:1235] 55                      push bp             ax=9bb2 bx=0050 cx=0000 dx=004f || bp=9c9a sp=9b9c si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55e6][143b:1236] 8b ec                   mov bp,sp           ax=9bb2 bx=0050 cx=0000 dx=004f || bp=9c9a sp=9b9a si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55e8][143b:1238] 56                      push si             ax=9bb2 bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b9a si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55e9][143b:1239] 57                      push di             ax=9bb2 bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b98 si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55ea][143b:123a] 1e                      push ds             ax=9bb2 bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b96 si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55eb][143b:123b] b0 80                   mov al,80h          ax=9bb2 bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b94 si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55ed][143b:123d] e6 7c                   out 7ch,al          ax=9b80 bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b94 si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55ef][143b:123f] 8b 46 0c                mov ax,ds:[bp+0ch]  ax=9b80 bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b94 si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55f2][143b:1242] a3 52 51                mov ds:[5152h],ax   ax=000f bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b94 si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55f5][143b:1245] 8b 76 0a                mov si,ds:[bp+0ah]  ax=000f bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b94 si=0038 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55f8][143b:1248] 8b 3e cc 51             mov di,ds:[51cch]   ax=000f bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b94 si=9bb2 di=0fa0 || cs=143b ds=3b7c ss=3b7c es=a800
[1:55fc][143b:124c] 83 7e 06 ff             cmp ds:[bp+06h],ffh ax=000f bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b94 si=9bb2 di=0000 || cs=143b ds=3b7c ss=3b7c es=a800
[1:5600][143b:1250] 74 13                   jz 1265h            ax=000f bx=0050 cx=0000 dx=004f || bp=9b9a sp=9b94 si=9bb2 di=0000 || cs=143b ds=3b7c ss=3b7c es=a800

; =====================================================================================
; =====================================================================================

[1:5602][143b:1252] b8 14 00                mov ax,0014h        ax=000f bx=0000 cx=0117 dx=004f || bp=9bf2 sp=9bec si=02d8 di=3885 || cs=143b ds=3b7c ss=3b7c es=a800
[1:5605][143b:1255] f7 26 9c 04             mul ds:[049ch]      ax=0014 bx=0000 cx=0117 dx=004f || bp=9bf2 sp=9bec si=02d8 di=3885 || cs=143b ds=3b7c ss=3b7c es=a800
[1:5609][143b:1259] f7 66 08                mul ds:[bp+08h]     ax=0640 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d8 di=3885 || cs=143b ds=3b7c ss=3b7c es=a800
[1:560c][143b:125c] 03 46 06                add ax,ds:[bp+06h]  ax=5140 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d8 di=3885 || cs=143b ds=3b7c ss=3b7c es=a800
[1:560f][143b:125f] 03 06 9e 04             add ax,ds:[049eh]   ax=515c bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d8 di=3885 || cs=143b ds=3b7c ss=3b7c es=a800

; read script byte

[1:5613][143b:1263] 8b f8                   mov di,ax           ax=515c bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d8 di=3885 || cs=143b ds=3b7c ss=3b7c es=a800
[1:5615][143b:1265] 89 3e cc 51             mov ds:[51cch],di   ax=515c bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d8 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:5619][143b:1269] ac                      lodsb               ax=515c bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d8 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

; ------------------------------------------------------------------------------------

[1:561a][143b:126a] 22 c0                   and al,al           ax=5120 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:561c][143b:126c] 75 03                   jnz 1271h           ax=5120 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
(..)

[1:5621][143b:1271] 3c 2f                   cmp al,2fh          ax=5120 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:5623][143b:1273] 75 20                   jnz 1295h           ax=5120 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
(..)

; check SJIS range

[1:5645][143b:1295] 3c 81                   cmp al,81h          ax=5120 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:5647][143b:1297] 72 3f                   jc 12d8h            ax=5120 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
(..)

; signal 8x16 tile type

[1:5688][143b:12d8] b4 09                   mov ah,09h          ax=5120 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

[1:568a][143b:12da] 3c a0                   cmp al,a0h          ax=0920 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:568c][143b:12dc] 72 03                   jc 12e1h            ax=0920 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
(..)

; ==================================================================================================
; ==================================================================================================

; grab tile from FONT ROM

[1:5691][143b:12e1] 86 e0                   xchg al,ah          ax=0920 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:5693][143b:12e3] 8b d0                   mov dx,ax           ax=2009 bx=0000 cx=0117 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:5695][143b:12e5] e8 fd fe                call 11e5h          ax=2009 bx=0000 cx=0117 dx=2009 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

; -------------------------------------------------------------------------------------------------

; $40914 = RAM tile cache / 20 pixels height

[1:5698][143b:12e8] 56                      push si             ax=100a bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:5699][143b:12e9] be 54 51                mov si,5154h        ax=100a bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:569c][143b:12ec] b9 14 00                mov cx,0014h        ax=100a bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=5154 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

; create border

[1:569f][143b:12ef] 46                      inc si              ax=100a bx=0000 cx=0014 dx=0000 || bp=9bf2 sp=9bea si=5154 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56a0][143b:12f0] 80 24 80                and ds:[si],80h     ax=100a bx=0000 cx=0014 dx=0000 || bp=9bf2 sp=9bea si=5155 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56a3][143b:12f3] 46                      inc si              ax=100a bx=0000 cx=0014 dx=0000 || bp=9bf2 sp=9bea si=5155 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56a4][143b:12f4] c6 04 00                mov ds:[si],00h     ax=100a bx=0000 cx=0014 dx=0000 || bp=9bf2 sp=9bea si=5156 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56a7][143b:12f7] 46                      inc si              ax=100a bx=0000 cx=0014 dx=0000 || bp=9bf2 sp=9bea si=5156 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56a8][143b:12f8] e2 f5                   loop 12efh          ax=100a bx=0000 cx=0014 dx=0000 || bp=9bf2 sp=9bea si=5157 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

[1:56aa][143b:12fa] e8 25 fe                call 1122h          ax=100a bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

; -------------------------------------------------------------------------------------------------

; print shadow (black) chars

[1:56ad][143b:12fd] 33 c0                   xor ax,ax           ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:56af][143b:12ff] e8 a0 fe                call 11a2h          ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:56b2][143b:1302] be 90 51                mov si,5190h        ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:56b5][143b:1305] e8 c6 fe                call 11ceh          ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c

; print solid (white) chars

[1:56b8][143b:1308] a1 52 51                mov ax,ds:[5152h]   ax=a800 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=51cc di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56bb][143b:130b] e8 94 fe                call 11a2h          ax=000f bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=51cc di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56be][143b:130e] be 54 51                mov si,5154h        ax=f0ff bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=51cc di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56c1][143b:1311] e8 ba fe                call 11ceh          ax=f0ff bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=5154 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

; -------------------------------------------------------------------------------------------------

; bump 8 pixel cursor

[1:56c4][143b:1314] 5e                      pop si              ax=a800 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bea si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:56c5][143b:1315] 47                      inc di              ax=a800 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

; scan next script

[1:56c6][143b:1316] e9 4c ff                jmp 1265h           ax=a800 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9bec si=02d9 di=515d || cs=143b ds=3b7c ss=3b7c es=a800

; ====================================================================================================
; ****************************************************************************************************
; ****************************************************************************************************
; ====================================================================================================

[1:54d2][143b:1122] 56                      push si             ax=100a bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:54d3][143b:1123] 57                      push di             ax=100a bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be6 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:54d4][143b:1124] 8c d8                   mov ax,ds           ax=100a bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:54d6][143b:1126] 8e c0                   mov es,ax           ax=3b7c bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:54d8][143b:1128] be 54 51                mov si,5154h        ax=3b7c bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54db][143b:112b] bf 90 51                mov di,5190h        ax=3b7c bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54de][143b:112e] b9 1e 00                mov cx,001eh        ax=3b7c bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54e1][143b:1131] f3 a5                   repe movsw          ax=3b7c bx=0000 cx=001e dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c

; ---------------------------------------------------------------------------------------------------

[1:54e3][143b:1133] be 54 51                mov si,5154h        ax=3b7c bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5190 di=51cc || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54e6][143b:1136] bf 90 51                mov di,5190h        ax=3b7c bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=51cc || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54e9][143b:1139] bb 06 00                mov bx,0006h        ax=3b7c bx=0000 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54ec][143b:113c] b9 30 00                mov cx,0030h        ax=3b7c bx=0006 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c

[1:54ef][143b:113f] 8a 00                   mov al,ds:[bx+si]   ax=3b7c bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54f1][143b:1141] 08 41 fd                or ds:[bx+di+fdh],al ax=3b00 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54f4][143b:1144] 08 41 03                or ds:[bx+di+03h],al ax=3b00 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54f7][143b:1147] d0 e0                   shl al,1            ax=3b00 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54f9][143b:1149] d0 d4                   rcl ah,1            ax=3b00 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54fb][143b:114b] 80 e4 01                and ah,01h          ax=7600 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:54fe][143b:114e] 08 61 ff                or ds:[bx+di+ffh],ah ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5501][143b:1151] 08 01                   or ds:[bx+di],al    ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5503][143b:1153] 8a 00                   mov al,ds:[bx+si]   ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5505][143b:1155] d0 e8                   shr al,1            ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5507][143b:1157] d0 dc                   rcr ah,1            ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5509][143b:1159] 80 e4 80                and ah,80h          ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:550c][143b:115c] 08 61 01                or ds:[bx+di+01h],ah ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:550f][143b:115f] 08 01                   or ds:[bx+di],al    ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5511][143b:1161] 43                      inc bx              ax=0000 bx=0006 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5512][143b:1162] e2 db                   loop 113fh          ax=0000 bx=0007 cx=0030 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c

; ---------------------------------------------------------------------------------------------------

[1:5514][143b:1164] be c8 51                mov si,51c8h        ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5154 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5517][143b:1167] b9 36 00                mov cx,0036h        ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=51c8 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c

[1:551a][143b:116a] 8a 04                   mov al,ds:[si]      ax=0000 bx=0036 cx=0036 dx=0000 || bp=9bf2 sp=9be4 si=51c8 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:551c][143b:116c] d0 e8                   shr al,1            ax=0000 bx=0036 cx=0036 dx=0000 || bp=9bf2 sp=9be4 si=51c8 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:551e][143b:116e] d0 dc                   rcr ah,1            ax=0000 bx=0036 cx=0036 dx=0000 || bp=9bf2 sp=9be4 si=51c8 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5520][143b:1170] 80 e4 80                and ah,80h          ax=0000 bx=0036 cx=0036 dx=0000 || bp=9bf2 sp=9be4 si=51c8 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5523][143b:1173] 08 04                   or ds:[si],al       ax=0000 bx=0036 cx=0036 dx=0000 || bp=9bf2 sp=9be4 si=51c8 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5525][143b:1175] 08 64 01                or ds:[si+01h],ah   ax=0000 bx=0036 cx=0036 dx=0000 || bp=9bf2 sp=9be4 si=51c8 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5528][143b:1178] 4e                      dec si              ax=0000 bx=0036 cx=0036 dx=0000 || bp=9bf2 sp=9be4 si=51c8 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5529][143b:1179] e2 ef                   loop 116ah          ax=0000 bx=0036 cx=0036 dx=0000 || bp=9bf2 sp=9be4 si=51c7 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c

; ---------------------------------------------------------------------------------------------------

[1:552b][143b:117b] 5f                      pop di              ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be4 si=5192 di=5190 || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:552c][143b:117c] 5e                      pop si              ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be6 si=5192 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:552d][143b:117d] c3                      ret                 ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c

; ====================================================================================================
; ****************************************************************************************************
; ****************************************************************************************************
; ====================================================================================================

; GRC write - vram operation

[1:5552][143b:11a2] 8a e0                   mov ah,al           ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5554][143b:11a4] b0 c0                   mov al,c0h          ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5556][143b:11a6] e6 7c                   out 7ch,al          ax=00c0 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5558][143b:11a8] b9 04 00                mov cx,0004h        ax=00c0 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c

; GRC write - vram tiling

[1:555b][143b:11ab] d0 cc                   ror ah,1            ax=00c0 bx=0036 cx=0004 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:555d][143b:11ad] d0 d0                   rcl al,1            ax=00c0 bx=0036 cx=0004 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:555f][143b:11af] 24 01                   and al,01h          ax=0080 bx=0036 cx=0004 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5561][143b:11b1] f6 d8                   neg al              ax=0000 bx=0036 cx=0004 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5563][143b:11b3] e6 7e                   out 7eh,al          ax=0000 bx=0036 cx=0004 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5565][143b:11b5] e2 f4                   loop 11abh          ax=0000 bx=0036 cx=0004 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c

[1:5567][143b:11b7] c3                      ret                 ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c

; ====================================================================================================
; ****************************************************************************************************
; ****************************************************************************************************
; ====================================================================================================

[1:5595][143b:11e5] 06                      push es             ax=5009 bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b92 si=9bb3 di=384b || cs=143b ds=3b7c ss=3b7c es=a800
[1:5596][143b:11e6] 56                      push si             ax=5009 bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b90 si=9bb3 di=384b || cs=143b ds=3b7c ss=3b7c es=a800
[1:5597][143b:11e7] 57                      push di             ax=5009 bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b8e si=9bb3 di=384b || cs=143b ds=3b7c ss=3b7c es=a800

; gdc_o68 = restore akc mode ($0b flag) / no draw?

[1:5598][143b:11e8] bf 5a 51                mov di,515ah        ax=5009 bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=384b || cs=143b ds=3b7c ss=3b7c es=a800
[1:559b][143b:11eb] b0 0b                   mov al,0bh          ax=5009 bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=a800
[1:559d][143b:11ed] e6 68                   out 68h,al          ax=500b bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=a800

[1:559f][143b:11ef] 8c d8                   mov ax,ds           ax=500b bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=a800
[1:55a1][143b:11f1] 8e c0                   mov es,ax           ax=3b7c bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=a800
[1:55a3][143b:11f3] b9 20 00                mov cx,0020h        ax=3b7c bx=0050 cx=0000 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c

; io/cgrom.c
;
; cgrom_oa1 = FONTROM code low-8
; - $00-08 = 16x16 LEFT/RIGHT
; - $09-0c =  8x16 LEFT only
; - $0d-ff = 16x16 LEFT/RIGHT
;
; cgrom_oa3 = FONTROM code high-8
; - $00    = $190000+ FONTROM
; - $01-ff = $110000+ FONTROM
;
; address = (code & 0x7f7f) * $10

; set FONTROM ptr

[1:55a6][143b:11f6] 8a c6                   mov al,dl           ax=3b7c bx=0050 cx=0020 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55a8][143b:11f8] e6 a1                   out a1h,al          ax=3b50 bx=0050 cx=0020 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55aa][143b:11fa] 8a c2                   mov al,dh           ax=3b50 bx=0050 cx=0020 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55ac][143b:11fc] e6 a3                   out a3h,al          ax=3b09 bx=0050 cx=0020 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c

; 16 pixels high

[1:55ae][143b:11fe] 32 e4                   xor ah,ah           ax=3b09 bx=0050 cx=0020 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55b0][143b:1200] b9 10 00                mov cx,0010h        ax=0009 bx=0050 cx=0020 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c

; ---------------------------------------------------------------------------------------------------

; set FONTROM tile row #

[1:55b3][143b:1203] 50                      push ax             ax=0009 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8c si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55b4][143b:1204] 8a c4                   mov al,ah           ax=0009 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c

; cgrom_oa5 = FONTROM ptr line (rows 00-1f) / left-right (bit $20)
; - bit $20 = LEFT 8x16 (on) / RIGHT 8x16 (off)
;
; cgrom_ia9 = read FONTROM data

; read FONT LEFT 8x16 row

[1:55b6][143b:1206] 0c 20                   or al,20h           ax=0000 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55b8][143b:1208] e6 a5                   out a5h,al          ax=0020 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55ba][143b:120a] e4 a9                   in al,a9h           ax=0020 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55bc][143b:120c] 86 c4                   xchg ah,al          ax=0000 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c

; read FONT RIGHT 8x16 row

[1:55be][143b:120e] e6 a5                   out a5h,al          ax=0000 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55c0][143b:1210] e4 a9                   in al,a9h           ax=0000 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55c2][143b:1212] 86 c4                   xchg ah,al          ax=0000 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c

; shift data 1 (shadow pixels)

[1:55c4][143b:1214] 8b d0                   mov dx,ax           ax=0000 bx=0050 cx=0010 dx=5009 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55c6][143b:1216] d0 e6                   shl dl,1            ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55c8][143b:1218] d0 d2                   rcl dl,1            ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55ca][143b:121a] 0b c2                   or ax,dx            ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c

; store 16 pixel

[1:55cc][143b:121c] d0 e8                   shr al,1            ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55ce][143b:121e] d0 dc                   rcr ah,1            ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55d0][143b:1220] ab                      stosw               ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515a || cs=143b ds=3b7c ss=3b7c es=3b7c

; store 8-pixel overflow

[1:55d1][143b:1221] b0 00                   mov al,00h          ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55d3][143b:1223] d0 d8                   rcr al,1            ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55d5][143b:1225] aa                      stosb               ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c

; bump pixel row

[1:55d6][143b:1226] 58                      pop ax              ax=0000 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8a si=9bb3 di=515d || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55d7][143b:1227] fe c4                   inc ah              ax=0009 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8c si=9bb3 di=515d || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55d9][143b:1229] 32 ed                   xor ch,ch           ax=0109 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8c si=9bb3 di=515d || cs=143b ds=3b7c ss=3b7c es=3b7c

; read next pixel data

[1:55db][143b:122b] e2 d6                   loop 1203h          ax=0109 bx=0050 cx=0010 dx=0000 || bp=9b9a sp=9b8c si=9bb3 di=515d || cs=143b ds=3b7c ss=3b7c es=3b7c

; ---------------------------------------------------------------------------------------------------

; gdc_o68 = draw mode ($0a flag)

[1:55dd][143b:122d] b0 0a                   mov al,0ah          ax=1009 bx=0050 cx=0000 dx=0000 || bp=9b9a sp=9b8c si=9bb3 di=518a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55df][143b:122f] e6 68                   out 68h,al          ax=100a bx=0050 cx=0000 dx=0000 || bp=9b9a sp=9b8c si=9bb3 di=518a || cs=143b ds=3b7c ss=3b7c es=3b7c

[1:55e1][143b:1231] 5f                      pop di              ax=100a bx=0050 cx=0000 dx=0000 || bp=9b9a sp=9b8c si=9bb3 di=518a || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55e2][143b:1232] 5e                      pop si              ax=100a bx=0050 cx=0000 dx=0000 || bp=9b9a sp=9b8e si=9bb3 di=384b || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55e3][143b:1233] 07                      pop es              ax=100a bx=0050 cx=0000 dx=0000 || bp=9b9a sp=9b90 si=9bb3 di=384b || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:55e4][143b:1234] c3                      ret                 ax=100a bx=0050 cx=0000 dx=0000 || bp=9b9a sp=9b92 si=9bb3 di=384b || cs=143b ds=3b7c ss=3b7c es=a800

; ====================================================================================================
; ****************************************************************************************************
; ****************************************************************************************************
; ====================================================================================================

[1:557e][143b:11ce] 57                      push di             ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c

; to vram (BLUE)

[1:557f][143b:11cf] b8 00 a8                mov ax,a800h        ax=0000 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be6 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c
[1:5582][143b:11d2] 8e c0                   mov es,ax           ax=a800 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be6 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=3b7c

; 20 pixels high

[1:5584][143b:11d4] b9 14 00                mov cx,0014h        ax=a800 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be6 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=a800

; -----------------------------------------------------------------------------------------------

; write 8*2 pixels to vram (ds:si -> es:di)

[1:5587][143b:11d7] a4                      movsb               ax=a800 bx=0036 cx=0014 dx=0000 || bp=9bf2 sp=9be6 si=5190 di=515c || cs=143b ds=3b7c ss=3b7c es=a800
[1:5588][143b:11d8] a4                      movsb               ax=a800 bx=0036 cx=0014 dx=0000 || bp=9bf2 sp=9be6 si=5191 di=515d || cs=143b ds=3b7c ss=3b7c es=a800
[1:5589][143b:11d9] 46                      inc si              ax=a800 bx=0036 cx=0014 dx=0000 || bp=9bf2 sp=9be6 si=5192 di=515e || cs=143b ds=3b7c ss=3b7c es=a800

; skip pixel row (80*8 = 640) and rewind cursor

[1:558a][143b:11da] 03 3e 9c 04             add di,ds:[049ch]   ax=a800 bx=0036 cx=0014 dx=0000 || bp=9bf2 sp=9be6 si=5193 di=515e || cs=143b ds=3b7c ss=3b7c es=a800
[1:558e][143b:11de] 83 ef 02                sub di,02h          ax=a800 bx=0036 cx=0014 dx=0000 || bp=9bf2 sp=9be6 si=5193 di=51ae || cs=143b ds=3b7c ss=3b7c es=a800
[1:5591][143b:11e1] e2 f4                   loop 11d7h          ax=a800 bx=0036 cx=0014 dx=0000 || bp=9bf2 sp=9be6 si=5193 di=51ac || cs=143b ds=3b7c ss=3b7c es=a800

; -----------------------------------------------------------------------------------------------

[1:5593][143b:11e3] 5f                      pop di              ax=a800 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be6 si=51cc di=579c || cs=143b ds=3b7c ss=3b7c es=a800
[1:5594][143b:11e4] c3                      ret                 ax=a800 bx=0036 cx=0000 dx=0000 || bp=9bf2 sp=9be8 si=51cc di=515c || cs=143b ds=3b7c ss=3b7c es=a800
