Major issues for M100 Basic to NEC PC-8201 Basic Conversion

1. Convert all 'PRINT @nn,' statements to 'LOCATE X,Y : PRINT' statements.
X is equivalent to (nn MOD 40) Y is equivalent to (nn \ 40)

2. LINE(X,Y)-(X1,Y1) statements require that LINE.CO is installed.

3. Any use of CHR$(131)-CHR$(255) requires CHR100.CO or LAPTOP.CO.

4. ON KEY GOSUB, and the counterparts KEYON and KEYOFF, are not supported N82 Basic features. There isn't a way to automatically interrupt & call a subroutine based on a keystroke. What you have to do instead is poll the keyboard using INKEY$ and check for the key value, and branch manually to the subroutines desired. You could make a subroutine that does this that you simply call at various places in the main program loop.

5. VARPTR isn't a supported N82 Basic statement, but can be implemented through a routine like this:
    40000 H=0:L=0:TY=0
    40010 POKE64448,205:POKE64449,175:POKE64450,73:POKE64451,235
    40020 POKE64452,58:POKE64453,139:POKE64454,250:POKE64456,201
    40030 IFVY$=""THENPRINT"VY$ not defined!":STOP
    40040 FORH=64457TO64463:POKEH,ASC(MID$(VY$,H,1)+CHR$(0)):NEXT:POKE64464,0
    40050 POKE63912,201:POKE63913,251:EXEC64448
    40060 L=PEEK(63912!):H=PEEK(63913!):TY=PEEK(63911!)
    40070 RETURN
    40080 ' VARPTR by Gary Weber
    40090 ' Entry: VY$ must contain the name of variable of interest
    40100 ' Exit: H & L contain variable's address, TY contains type
    40110 ' Example:
    40120 '   100 A$="This is a sample string."
    40130 '   110 VY$="A$":GOSUB 40000
    40140 '   120 PRINT "VARPTR of ";VY$;" is ";L+(H*256)
6. CALL statements require special conversion to EXEC with appropriately converted ROM address (using memory maps). Also, the M100's CALL syntax allows passing of values to place in the HL and A registers. The NEC's EXEC statement only takes one parameter, which is the entry address. However, there are special locations in the upper memory "bookkeeping" area which are used to pass HL and A register values to EXEC, and you simply POKE the values to those locations. More info can be found on this in the NEC PC-8201/8300 Memory Map.

7. Any embedded machine language would need to be disassembled, have the ROM & bookkeeping RAM address converted, and recompiled/embedded into the program.

8. POKE & PEEK addresses require special conversion (using memory maps).

9. MID$ as an assignment is not supported in N82 basic. You can only use the MID$ statement to extract characters from a string. However, you can simulate the function of a MID$ assignment with a routine like this:
    30000 ZO=LEN(OX$):TX$=OX$:OX$=LEFT$(TX$,NX-1)+NX$
    30010 IFZO-LEN(OX$)>0THENOX$=OX$+RIGHT$(TX$,ZO-LEN(OX$))
    30020 OX$=LEFT$(OX$,ZO):RETURN
    30030 ' MID$ by Gary Weber
    30040 ' Entry: OX$=String to modify, NX=Target position, NX$=Target text
    30050 ' Exit: OX$ contains modified string