Well this is actually a great find for me as I am trying to use the other two 
multiplexed ports. Seeing as the routines to turn them on are already there, I 
can use them.

Kurt

On Fri, Apr 10, 2026, at 4:05 PM, Kenneth Pettit wrote:
> A better disassembly would look like:
> 
> ; ======================================================
> ; Initialize RS232 or modem
> ; ======================================================
> 6F52H  (3EH) MVI A,01H
> 6F54H DB 01H    ; Make next opcocde look like LXI B,023Eh
> 6F55H  (3EH) MVI A,02H
> 6F57H DB 01H    ; Make next opcode look like LXI B,033Eh
> 6F58H  (3EH) MVI A,03H
> 6F5AH  (E5H) PUSH H
> 
> Ken
> 
> 
> On 4/10/26 1:59 PM, Kenneth Pettit wrote:
>> Hi Kurt,
>> 
>> Oh, I okay, I see.  Yeah, this took me a minute to figure out back in my 
>> days of disassembling lots of M100 ROM code.
>> 
>> Good old Mr. Gates found a way to really squeeze instructions into the ROM.  
>> This is an example of a multi-entry point function.  If you write code to 
>> JMP 6F52H, then you get
>> 
>> MVI A,01H
>> LXI B,023EH
>> LXI B,033EH
>> PUSH H
>> 
>> This results in A being loaded with 1
>> 
>> But entering at 6F55H looks like:
>> 
>> MVI A,02H
>> LXI B,033EH
>> PUSH H
>> 
>> (i.e. A is loaded with 2)
>> 
>> And entering at 6F58H looks like:
>> 
>> MVI A,03H
>> PUSH H
>> 
>> So this routine can be entered from 3 different locations to perform 3 
>> different functions (loaded into A as 01H, 02H or 03H) and it only costs a 
>> couple of extra bytes.  It uses dummy LXI B,#### opcodes (which only cost 1 
>> byte for the 01H) to "hide" the "MVI A,02" (3EH,02H) and "MVI A,03" 
>> (3EH,03H) opcodes and make them look like the LXI B opcodes, loading B with 
>> dummy values of 023EH and 033Eh).
>> 
>> Ken
>> On 4/10/26 1:35 PM, Kurt McCullum wrote:
>>> Thanks Ken,
>>> 
>>> I do have an example.
>>> 
>>> 1. Put a breakpoint at 6F58
>>> 2. Go to TELCOM and type TERM
>>> 3. Look at the Instruction Trace. It will say 6F58s MVI A, 03H
>>> 
>>> 4. Go to the ROM source listing.
>>> You will notice there is no command at 6F58H. Instead it says 
>>> ; ======================================================
>>> ; Initialize RS232 or modem
>>> ; ======================================================
>>> 6F52H  (3EH) MVI A,01H
>>> 6F54H  (01H) LXI B,023EH
>>> 6F57H  (01H) LXI B,033EH
>>> 6F5AH  (E5H) PUSH H
>>> 
>>> To me it looks like the debugger got off track at the bottom of the ROM.
>>> 
>>> Kurt
>>> 
>>> 
>>> On Fri, Apr 10, 2026, at 3:06 PM, Kenneth Pettit wrote:
>>>> Hi Kurt,
>>>> 
>>>> Umm, I believe the disassembler *should* be looking at the ROM if I 
>>>> remember correctly.  Could just be a latent bug.  Do you have examples of 
>>>> discrepancies?
>>>> 
>>>> Ken
>>>> On 4/10/26 12:35 PM, Kurt McCullum wrote:
>>>>> I am running into a problem with the disassembler for the main ROM in 
>>>>> Virtual-T for the NEC 8201a.
>>>>> 
>>>>> In particular, the RS232 initialize routines don't match what the ROM and 
>>>>> debugger show as far as code.
>>>>> 
>>>>> For the main ROM, is the disassembler actually looking at the ROM, or 
>>>>> something else?
>>>>> 
>>>>> Kurt
>>> 

Reply via email to