GophHub - zajo/appler/src/DEBUG.ASM


Raw File

    1	;  _____________________________________________
    2	; |                                             |
    3	; |  Project:   APPLER                          |
    4	; |  File:      DEBUG.ASM                       |
    5	; |  Compiler:  16-bit TASM (2.5)               |
    6	; |                                             |
    7	; |  Subject:   Appler Debugger                 |
    8	; |                                             |
    9	; |  Author:    Emil Dotchevski                 |
   10	; |_____________________________________________|
   11	
   12	                include GLOBALS.INC
   13	                include INTERFAC.INC
   14	                include CONIO.INC
   15	                include FM.INC
   16	
   17	G_COMMAND_ENTRY =       00h
   18	G_NewA          =       01h
   19	G_NewX          =       02h
   20	G_NewY          =       03h
   21	G_NewS          =       04h
   22	G_NewP          =       05h
   23	G_NewPC         =       06h
   24	G_Registers     =       07h
   25	G_MiniAsm       =       08h
   26	G_EditB         =       09h
   27	G_EditA         =       0Ah
   28	G_Disasm        =       0Bh
   29	G_DumpB         =       0Ch
   30	G_DumpA         =       0Dh
   31	G_Limits        =       0Eh
   32	G_Find          =       0Fh
   33	G_Copy          =       10h
   34	G_Compare       =       11h
   35	G_Breaks        =       12h
   36	G_Go            =       13h
   37	G_LoadLab       =       14h
   38	G_SaveLab       =       15h
   39	G_DefineLab     =       16h
   40	G_LabList       =       17h
   41	G_DelLab        =       18h
   42	G_LabOnOff      =       19h
   43	G_SwapOnOff     =       1Ah
   44	G_Calculate     =       1Bh
   45	G_ResetApple    =       1Ch
   46	G_MoveHelp      =       1Dh
   47	G_PrintDump     =       1Eh
   48	G_PrintAssembler =      1Fh
   49	
   50	Debug           segment public
   51	                assume  DS:Apple,ES:Emulate,CS:Debug,SS:Data
   52	
   53	GetLineBuf      db      100 dup (0)
   54	
   55	GetLineParams   GL_ParamStruc  <GetLineBuf,0,0,0,0,0,0,2,4,0,?,?,0,1,1,GetLineUser,?,?,?,?>
   56	ScreenIOParams  SIO_ParamStruc <1,Debug,0,0,offset Screen,seg Screen,1,0,1,1>
   57	GetKeyParams    RK_ParamStruc  <1,GK_Fkey,1,Alt_Key,0,T_WaitKey,ShowAll,offset FirstMsg>
   58	
   59	DebugOutInit    proc    far
   60	                cli
   61	                push    ax ds es
   62	                mov     ax,Apple
   63	                mov     ds,ax
   64	                mov     ax,Emulate
   65	                mov     es,ax
   66	                mov     al,ds:[0C000h]
   67	                mov     es:[C000],al
   68	                call    AppleKeysOn
   69	                call    SetRegisters
   70	                pop     es ds ax
   71	                ret
   72	DebugOutInit    endp
   73	
   74	
   75	DebugInInit     proc    far
   76	                cli
   77	                push    ax cx ds es
   78	                mov     ax,Apple
   79	                mov     ds,ax
   80	                mov     ax,Emulate
   81	                mov     es,ax
   82	                xor     al,al
   83	                xchg    al,es:C000
   84	                mov     ds:[0C000h],al
   85	                call    GetRegisters
   86	                assume  ds:CONio
   87	                mov     ax,CONio
   88	                mov     ds,ax
   89	                mov     GL_ParamsOfs,  offset GetLineParams
   90	                mov     GL_ParamsSeg,  seg    GetLineParams
   91	                mov     SIO_ParamsOfs, offset ScreenIOParams
   92	                mov     SIO_ParamsSeg, seg    ScreenIOParams
   93	                mov     RK_ParamsOfs,  offset GetKeyParams
   94	                mov     RK_ParamsSeg,  seg    GetKeyParams
   95	                call    DebugKeysOn
   96	                call    UnsetBreaks
   97	                cmp     cs:ViewFlag,0
   98	                jz      DII_Ret
   99	                mov     ah,0Fh
  100	                int     10h
  101	                cmp     al,3
  102	                jne     DII_Ret
  103	                mov     al,C050
  104	                ScreenIOservice _SetScreen
  105	DII_Ret:        pop     es ds cx ax
  106	                sti
  107	                ret
  108	DebugInInit     endp
  109	
  110	
  111	                assume  DS:Apple,ES:Emulate,CS:Debug
  112	
  113	GoWhere?        dw      G_COMMAND_ENTRY
  114	ShowAll?        db      1
  115	DebugMainRet:   call    DebugInit
  116	BigLoop:        mov     ch,cs:GetLineParams.GL_BegPrint
  117	                mov     cl,cs:GetLineParams.GL_Pos
  118	                mov     di,cs:GoWhere?
  119	                shl     di,1
  120	                mov     cs:ShowAll?,1
  121	                mov     cs:GoWhere?,G_COMMAND_ENTRY
  122	                push    ds es
  123	                call    cs:CmndAddress[di]
  124	                pop     es ds
  125	                cmp     cs:ShowAll?,0
  126	                jz      BL_DontShowAll
  127	                mov     cs:SM_Dec?,1
  128	                call    ShowAll
  129	                mov     cs:SM_Dec?,0
  130	                mov     cs:GetLineParams.GL_Pos,cl
  131	                mov     cs:GetLineParams.GL_BegPrint,ch
  132	BL_DontShowAll: jmp     BigLoop
  133	
  134	CommandEntry:   mov     cs:GetLineParams.GL_Color,0Bh
  135	                mov     cs:GetLineParams.GL_Error,  offset UnknownCmd
  136	                mov     cs:GetLineParams.GL_BegScan,offset MainCommands
  137	                mov     cs:GetLineParams.GL_ENDScan,offset ENDScan1
  138	                mov     cs:ActiveFlags,0000000000000001b
  139	                mov     cs:ShowAllNumber,0
  140	                mov     cs:GetLineParams.GL_GS_SpcFl,1
  141	                cmp     cs:MinHelpPtr,8
  142	                je      CE_01
  143	                mov     ax,8
  144	                mov     bx,42
  145	                call    SH_Choose
  146	CE_01:          gotoxy  17,1
  147	                GetLineService _GETLINE
  148	                jc      CE_Ret0
  149	                GetLineService _GetCommand
  150	                jc      CommandEntry
  151	                inc     di
  152	                mov     cs:GoWhere?,di
  153	                mov     cs:ShowAll?,0
  154	                jmp     CE_Ret
  155	CE_Ret0:        GetLineService _GL_CLRBUFF
  156	CE_Ret:         ret
  157	
  158	
  159	CmndAddress     dw      CommandEntry
  160	                dw      NewA, NewX, NewY, NewS, NewP, NewPC, Registers
  161	                dw      MiniAsm, EditB, EditA, Disasm, DumpB, DumpA
  162	                dw      Limits, Find, Copy, Compare, Breaks, Go
  163	                dw      LoadLab, SaveLab
  164	                dw      DefineLab, LabList, DelLab, LabOnOff, SwapOnOff
  165	                dw      Calculate, ResetApple, MoveHelp
  166	                dw      PrintDump,PrintAssembler,SoundOnOff
  167	                dw      RecordStart,RecordStop,RecordPlay
  168	                dw      LoadRec, SaveRec
  169	
  170	
  171	
  172	; *******************************************************************
  173	; **                                                               **
  174	; **                                                               **
  175	; **                       COMMANDS ROUTINES                       **
  176	; **                                                               **
  177	; **                                                               **
  178	; *******************************************************************
  179	
  180	
  181	; -- Registers change commands ---------
  182	
  183	NewA:           mov     di,0
  184	                jmp     RegModify
  185	NewX:           mov     di,1
  186	                jmp     RegModify
  187	NewY:           mov     di,2
  188	                jmp     RegModify
  189	NewS:           mov     di,3
  190	                jmp     RegModify
  191	NewP:           mov     di,4
  192	                jmp     RegModify
  193	NewPC:          mov     di,5
  194	                jmp     RegModify
  195	
  196	REG_StoreCX     dw      0
  197	REG_Current     dw      0
  198	REG_CurrentSVD  dw      0
  199	REG_CH          db      3
  200	REG_Subrt       dw      REG_Flags, REG_A, REG_X, REG_Y, REG_P, REG_S, REG_PC
  201	
  202	Registers:      mov     cs:ScreenIOparams.CursorColor,40h
  203	                mov     cs:ShowAllNumber,4
  204	                mov     ax,77
  205	                mov     bx,77
  206	                call    SH_Choose
  207	                mov     ax,cs:REG_CurrentSVD
  208	                mov     cs:REG_Current,ax
  209	                mov     ch,cs:REG_CH
  210	                mov     cs:ActiveFlags,0000000000000100b
  211	REG_Loop:       mov     bx,cs:REG_Current
  212	                shl     bx,1
  213	                call    cs:REG_Subrt[bx]
  214	                or      al,al
  215	                jz      REG_Loop
  216	                mov     cs:REG_CH,ch
  217	                mov     ax,cs:REG_Current
  218	                mov     cs:REG_CurrentSVD,ax
  219	                GetLineService _GL_ClrBuff
  220	                ret
  221	
  222	
  223	REG_A:          lea     bx,cs:Regs.A
  224	                clc
  225	                jmp     RegsEdit
  226	
  227	REG_X:          lea     bx,cs:Regs.X
  228	                clc
  229	                jmp     RegsEdit
  230	
  231	REG_Y:          lea     bx,cs:Regs.Y
  232	                clc
  233	                jmp     RegsEdit
  234	
  235	REG_P:          lea     bx,cs:Regs.P
  236	                clc
  237	                jmp     RegsEdit
  238	
  239	REG_S:          lea     bx,cs:Regs.S
  240	                clc
  241	                jmp     RegsEdit
  242	
  243	REG_PC:         lea     bx,cs:Regs.PC
  244	                stc
  245	                jmp     RegsEdit
  246	
  247	
  248	RF_Commands     db      07h,08h,05h,06h,20h
  249	                db      18h,0Ch
  250	RF_ComSubrt     dw      REG_Up, REG_Down, RF_Left,RF_Right,RF_Flip
  251	                dw      REG_Enter,REG_Esc
  252	RF_CL           db      24h
  253	RF_BL           db      10000000b
  254	REG_Flags:      mov     cl,cs:RF_CL
  255	                mov     bl,cs:RF_BL
  256	                mov     cs:ScreenIOparams.CursorLen,1
  257	RF_Loop0:       call    ReadKey
  258	                push    cx
  259	                mov     di,offset RF_Commands
  260	                mov     cx,offset RF_ComSubrt - offset RF_Commands
  261	                call    CalcCommand
  262	                pop     cx
  263	                jc      RF_Loop0
  264	                shl     di,1
  265	                call    word ptr cs:RF_ComSubrt[di]
  266	                jnc     RF_Loop0
  267	                mov     cs:RF_BL,bl
  268	                mov     cs:RF_CL,cl
  269	                ret
  270	
  271	RF_Left:        rol     bl,1
  272	                dec     cl
  273	                cmp     cl,24h
  274	                jae     RF_Lret
  275	                mov     cl,2Bh
  276	RF_Lret:        clc
  277	                ret
  278	
  279	RF_Right:       ror     bl,1
  280	                inc     cl
  281	                cmp     cl,2Bh
  282	                jbe     RF_Rret
  283	                mov     cl,24h
  284	RF_Rret:        clc
  285	                ret
  286	
  287	RF_Flip:        xor     cs:Regs.P,bl
  288	                ret
  289	
  290	
  291	
  292	RE_Commands     db      '0123456789abcdef'
  293	                db      07h,08h,18h,0Ch
  294	RE_ComSubrt     dw      RE_Num,RE_Num,RE_Num,RE_Num,RE_Num,RE_Num,RE_Num,RE_Num
  295	                dw      RE_Num,RE_Num,RE_Num,RE_Num,RE_Num,RE_Num,RE_Num,RE_Num
  296	                dw      REG_Up, REG_Down,REG_Enter,REG_Esc
  297	RE_FirstTime?   db      1
  298	RegsEdit:       mov     cs:ScreenIOparams.CursorLen,4
  299	                mov     dl,0
  300	                jnc     RE_ok0
  301	                inc     dl
  302	                mov     cs:ScreenIOparams.CursorLen,6
  303	RE_ok0:         mov     cl,39
  304	RE_Loop0:       call    ReadKey
  305	                push    cx
  306	                mov     di,offset RE_Commands
  307	                mov     cx,offset RE_ComSubrt - offset RE_Commands
  308	                call    CalcCommand
  309	                pop     cx
  310	                jc      RE_Loop0
  311	                shl     di,1
  312	                call    word ptr cs:RE_ComSubrt[di]
  313	                jnc     RE_Loop0
  314	                ret
  315	
  316	RE_Num:         shr     di,1
  317	                mov     ax,di
  318	                or      dl,dl
  319	                jnz     RE_NumWord
  320	                cmp     cs:RE_FirstTime?,0
  321	                jz      RE_NumByte_1
  322	                mov     byte ptr cs:[bx],0
  323	RE_NumByte_1:   shl     byte ptr cs:[bx],4
  324	                or      byte ptr cs:[bx],al
  325	                jmp     RE_NumRet
  326	RE_NumWord:     call    StopAnimate
  327	                cmp     cs:RE_FirstTime?,0
  328	                jz      RE_NumWord_1
  329	                mov     word ptr cs:[bx],0
  330	RE_NumWord_1:   shl     word ptr cs:[bx],4
  331	                or      word ptr cs:[bx],ax
  332	RE_NumRet:      clc
  333	                mov     cs:RE_FirstTime?,0
  334	                ret
  335	
  336	
  337	
  338	REG_Up:         dec     cs:REG_Current
  339	                jns     REG_UpRet
  340	                mov     cs:REG_Current,6
  341	REG_UpRet:      mov     ax,cs:REG_Current
  342	                mov     ch,al
  343	                add     ch,3
  344	                xor     al,al
  345	                stc
  346	                mov     cs:RE_FirstTime?,1
  347	                ret
  348	
  349	REG_Enter:
  350	REG_Down:       inc     cs:REG_Current
  351	                cmp     cs:REG_Current,6
  352	                jbe     REG_DownRet
  353	                mov     cs:REG_Current,0
  354	REG_DownRet:    mov     ax,cs:REG_Current
  355	                mov     ch,al
  356	                add     ch,3
  357	                xor     al,al
  358	                stc
  359	                mov     cs:RE_FirstTime?,1
  360	                ret
  361	
  362	REG_Esc:        mov     cs:ScreenIOparams.CursorLen,1
  363	                mov     al,0FFh
  364	                stc
  365	                mov     cs:RE_FirstTime?,1
  366	                ret
  367	
  368	
  369	
  370	
  371	R_StoreCX       dw      ?
  372	RegModify:      GetLineService _GL_GetSymb
  373	                or      al,al
  374	                jz      R_Error4
  375	                cmp     al,'='
  376	                jne     R_Error3
  377	                mov     cs:R_StoreCX,cx
  378	                call    GetAddress
  379	                cmp     di,5
  380	                jne     R_2
  381	                mov     cs:Regs.PC,ax
  382	                GetLineService _GL_ClrBuff
  383	                ret
  384	R_2:            cmp     ah,0
  385	                jnz     R_Error2
  386	                mov     byte ptr cs:Regs.[di],al
  387	                GetLineService _GL_ClrBuff
  388	                ret
  389	R_Error2:       mov     cs:GetKeyParams.RK_ErrPtr,offset IllegalNum
  390	                mov     cx,cs:R_StoreCX
  391	                inc     cl
  392	                ret
  393	R_Error4:       inc     cl
  394	R_Error3:       mov     cs:GetKeyParams.RK_ErrPtr,offset EqualMess
  395	                ret
  396	
  397	
  398	
  399	
  400	; -- Assembler -------------------------
  401	
  402	BuffDisasm:     test    cs:Mini_Flag,1
  403	                jz      BD_ret
  404	                push    cx si
  405	                mov     cs:CalcFlag,0
  406	                mov     si,cs:AssembAdr
  407	                GetLineService _GL_ClrBuff
  408	                mov     cs:ScreenIOparams.SP_BufFlag,1
  409	                gotoxy  1Ah,2                   ; Unvisible
  410	                call    OneInstr
  411	                mov     cs:ScreenIOparams.SP_BufFlag,0
  412	                mov     cs:GetLineParams.GL_Pos,0
  413	                mov     cs:GetLineParams.GL_BegPrint,0
  414	                pop     si cx
  415	BD_ret:         ret
  416	
  417	MA_StoreCX      dw      ?
  418	MA_il           db      3 dup (?)
  419	MA_ad           dw      3 dup (?)
  420	MINI_Instr      dw      ?
  421	Mini_Flag       db      0
  422	
  423	MiniAsm:        GetLineService _GL_GetSymb
  424	                dec     cl
  425	                or      al,al
  426	                jz      MINI111
  427	                call    GetAddress
  428	                mov     cs:AssembAdr,ax
  429	MINI111:        mov     cs:GetLineParams.GL_MaxPrint,0Eh
  430	                mov     cs:GetLineParams.GL_Color,1Bh
  431	                mov     cs:GetLineParams.GL_Error,offset BadInstr
  432	                mov     cs:GetLineParams.GL_BegScan,offset AsmInstr
  433	                mov     cs:GetLineParams.GL_ENDScan,offset ENDScan2
  434	                call    StopAnimate
  435	                mov     cs:FkeysBuffer[1*size FkeyStruc].FkeyFlag,0
  436	                call    ShowPrevIns
  437	                mov     cs:ShowAllNumber,3
  438	                mov     ax,52
  439	                mov     bx,52
  440	                call    SH_Choose
  441	                mov     byte ptr cs:Mini_Flag,1
  442	                mov     cs:ActiveFlags,0000000000000010b
  443	
  444	MINI00:         call    BuffDisasm
  445	MINI0001:       gotoxy  4,11h
  446	                mov     cs:ScreenIOParams.CursorLen,1
  447	                GetLineService _GetLine
  448	                jnc     MINI0002
  449	                jmp     MINIret
  450	MINI0002:       GetLineService _GetCommand
  451	                jc      MINI0001
  452	                mov     cs:MINI_instr,di
  453	                mov     si,cs:AssembAdr
  454	                xor     di,di
  455	MINI000:        mov     al,[si]
  456	                xor     bx,bx
  457	                mov     bl,al
  458	                mov     al,cs:InstrLongTbl[bx]
  459	                and     al,00000011b
  460	                mov     cs:MA_il[di],al
  461	                mov     bx,di
  462	                shl     bx,1
  463	                mov     cs:MA_ad[bx],si
  464	                xor     bx,bx
  465	                mov     bl,al
  466	                add     si,bx
  467	                inc     di
  468	                cmp     di,3
  469	                jb      MINI000
  470	
  471	                call    MA_Assemble
  472	                dec     cl
  473	                mov     cs:GetLineParams.GL_Pos,cl
  474	                mov     cs:GetLineParams.GL_BegPrint,ch
  475	                jc      MINI0001
  476	
  477	                xor     di,di
  478	                xor     ax,ax
  479	                sub     bx,cs:AssembAdr
  480	MINI_loop0:     add     al,cs:MA_il[di]
  481	                inc     di
  482	                cmp     bl,al
  483	                je      MINI_ok1
  484	                ja      MINI_loop0
  485	                xor     ah,ah
  486	                mov     bh,ah
  487	                sub     ax,bx
  488	                shl     di,1
  489	                mov     bx,cs:MA_ad[di]
  490	                sub     bx,ax
  491	MINI_loop1:     mov     byte ptr [bx],0EAh
  492	                inc     bx
  493	                dec     ax
  494	                jnz     MINI_Loop1
  495	
  496	MINI_ok1:       call    DOWN
  497	                call    ShowProgram
  498	                jmp     MINI00
  499	
  500	MINIret:        call    InitGetLine
  501	                mov     byte ptr cs:Mini_Flag,0
  502	                mov     cs:FkeysBuffer[1*size FkeyStruc].FkeyFlag,1
  503	                GetLineService _GL_ClrBuff
  504	                ret
  505	
  506	MA_Assemble:    mov     dh,byte ptr cs:MINI_Instr
  507	                mov     dl,12
  508	                mov     al,dh
  509	                mul     dl
  510	                mov     bx,ax
  511	                xor     dl,dl
  512	                mov     cl,cs:GetLineParams.GL_Pos
  513	                mov     ch,cs:GetLineParams.GL_BegPrint
  514	                mov     cs:MA_StoreCX,cx
  515	                GetLineService _GL_GetSymb
  516	                or      al,al
  517	                jz      MA_OkAdrs
  518	                cmp     al,'#'
  519	                je      MA_Direct
  520	                cmp     al,'('
  521	                jne     MA_Error1
  522	                jmp     MA_Indirect
  523	MA_Error1:      dec     cl
  524	                jmp     MA_Full
  525	
  526	MA_OkAdrs:      mov     dl,cs:AsmTab1[bx]
  527	                cmp     dl,0FFh
  528	                je      MA_Error0
  529	                mov     bx,cs:AssembAdr
  530	                mov     [bx],dl
  531	                inc     bx
  532	                jmp     MA_ret
  533	
  534	MA_Error0:      inc     cl
  535	MA_Error:       mov     cs:GetKeyParams.RK_ErrPtr,offset BadInstr
  536	                stc
  537	                ret
  538	
  539	MA_ret:         GetLineService _GL_ClrBuff
  540	                clc
  541	                ret
  542	
  543	MA_Direct:      mov     dl,cs:AsmTab1[bx+1]
  544	                cmp     dl,0FFh
  545	                je      MA_Error0
  546	                GetLineService _GL_GetSymb
  547	                mov     cs:MA_StoreCX,cx
  548	                dec     cl
  549	                or      al,al
  550	                jz      MA_DirectE
  551	                mov     cs:MA_StoreCX,cx
  552	                call    GetAddress
  553	                cmp     ah,0
  554	                jz      MA_ok1122
  555	MA_DirectE:     mov     cx,cs:MA_StoreCX
  556	                inc     cl
  557	                jmp     MA_Error
  558	MA_ok1122:      mov     bx,cs:AssembAdr
  559	                mov     [bx],dl
  560	                inc     bx
  561	                mov     [bx],al
  562	                inc     bx
  563	                jmp     MA_Ret
  564	
  565	MA_Full:        mov     cx,cs:MA_StoreCX
  566	                GetLineService _GL_GetSymb
  567	                or      al,al
  568	                jz      MA_Error0
  569	                dec     cl
  570	                call    GetAddress
  571	                dec     cl
  572	                cmp     dh,35
  573	                jb      MA_ESD1
  574	                cmp     dh,44
  575	                jnb     MA_ESD1
  576	                jmp     MA_Branches
  577	MA_ESD1:        push    ax
  578	                GetLineService _GL_GetSymb
  579	                cmp     al,','
  580	                jne     MA_RealyFul
  581	                GetLineService _GL_GetSymb
  582	                or      al,20h
  583	                cmp     al,'x'
  584	                je      MA_FullX
  585	                cmp     al,'y'
  586	                pop     ax
  587	                jne     MA_QWERTY
  588	                jmp     MA_FullY
  589	MA_QWERTY:      jmp     MA_Error
  590	
  591	MA_RealyFul:    pop     ax
  592	                cmp     ah,0
  593	                jz      MA_TryZP
  594	MA_NoZP:        mov     dl,cs:AsmTab1[bx+5]
  595	                cmp     dl,0FFh
  596	                jne     MA_FullOK1
  597	                mov     cx,cs:MA_StoreCX
  598	                jmp     MA_Error0
  599	MA_FullOK1:     mov     bx,cs:AssembAdr
  600	                mov     [bx],dl
  601	                inc     bx
  602	                mov     [bx],ax
  603	                inc     bx
  604	                inc     bx
  605	                jmp     MA_ret
  606	
  607	MA_TryZP:       mov     dl,cs:AsmTab1[bx+2]
  608	                cmp     dl,0FFh
  609	                je      MA_NoZP
  610	                mov     bx,cs:AssembAdr
  611	                mov     [bx],dl
  612	                inc     bx
  613	                mov     [bx],al
  614	                inc     bx
  615	                jmp     MA_ret
  616	
  617	MA_FullX:       pop     ax
  618	                cmp     ah,0
  619	                jz      MA_TryZP1
  620	MA_NoZP1:       mov     dl,cs:AsmTab1[bx+6]
  621	                cmp     dl,0FFh
  622	                jne     MA_FullOK2
  623	                mov     cx,cs:MA_StoreCX
  624	                jmp     MA_Error0
  625	MA_FullOK2:     mov     bx,cs:AssembAdr
  626	                mov     [bx],dl
  627	                inc     bx
  628	                mov     [bx],ax
  629	                inc     bx
  630	                inc     bx
  631	                jmp     MA_ret
  632	
  633	MA_TryZP1:      mov     dl,cs:AsmTab1[bx+3]
  634	                cmp     dl,0FFh
  635	                je      MA_NoZP1
  636	                mov     bx,cs:AssembAdr
  637	                mov     [bx],dl
  638	                inc     bx
  639	                mov     [bx],al
  640	                inc     bx
  641	                jmp     MA_ret
  642	
  643	MA_FullY:       cmp     ah,0
  644	                jz      MA_TryZP2
  645	MA_NoZP2:       mov     dl,cs:AsmTab1[bx+7]
  646	                cmp     dl,0FFh
  647	                jne     MA_FullOK3
  648	                mov     cx,cs:MA_StoreCX
  649	                jmp     MA_Error0
  650	MA_FullOK3:     mov     bx,cs:AssembAdr
  651	                mov     [bx],dl
  652	                inc     bx
  653	                mov     [bx],ax
  654	                inc     bx
  655	                inc     bx
  656	                jmp     MA_ret
  657	
  658	MA_TryZP2:      mov     dl,cs:AsmTab1[bx+4]
  659	                cmp     dl,0FFh
  660	                je      MA_NoZP2
  661	                mov     bx,cs:AssembAdr
  662	                mov     [bx],dl
  663	                inc     bx
  664	                mov     [bx],al
  665	                inc     bx
  666	                jmp     MA_ret
  667	
  668	
  669	MA_Indirect:    mov     cs:MA_StoreCX,cx
  670	                GetLineService _GL_GetSymb
  671	                mov     cx,cs:MA_StoreCX
  672	                or      al,al
  673	                jnz     MA_IndOK33
  674	                jmp     MA_Error
  675	MA_IndOK33:     cmp     dh,44
  676	                jne     MA_NoIndJmp
  677	                jmp     MA_IndJMP
  678	MA_NoIndJmp:    mov     cs:MA_StoreCX,cx
  679	                call    GetAddress
  680	                dec     cl
  681	                push    ax
  682	                GetLineService _GL_GetSymb
  683	                or      al,al
  684	                jnz     MA_IndOK2
  685	                pop     ax
  686	                jmp     MA_Error
  687	MA_IndOK2:      cmp     al,')'
  688	                je      MA_IndY
  689	                cmp     al,','
  690	                je      MA_IndX
  691	                pop     ax
  692	                mov     cx,cs:MA_StoreCX
  693	                jmp     MA_Error
  694	
  695	MA_IndY:        GetLineService _GL_GetSymb
  696	                or      al,al
  697	                jz      MA_65C02_ind
  698	                cmp     al,','
  699	                je      MA_IndY1
  700	                pop     ax
  701	                jmp     MA_Error
  702	MA_IndY1:       GetLineService _GL_GetSymb
  703	                or      al,20h
  704	                cmp     al,'y'
  705	                je      MA_IndY2
  706	                pop     ax
  707	                jmp     MA_Error
  708	MA_IndY2:       pop     ax
  709	                cmp     ah,0
  710	                jz      MA_IndY21
  711	MA_65C02_indER: mov     cx,cs:MA_StoreCX
  712	                inc     cl
  713	                jmp     MA_Error
  714	MA_IndY21:      mov     dl,cs:AsmTab1[bx+9]
  715	MA_65C02_indOK: cmp     dl,0FFh
  716	                jne     MA_IndY3
  717	                mov     cx,cs:MA_StoreCX
  718	                jmp     MA_Error0
  719	MA_IndY3:       mov     bx,cs:AssembAdr
  720	                mov     [bx],dl
  721	                inc     bx
  722	                mov     [bx],al
  723	                inc     bx
  724	                jmp     MA_ret
  725	MA_65C02_ind:   pop     ax
  726	                cmp     ah,0
  727	                jnz     MA_65C02_indER
  728	                mov     dl,cs:AsmTab1[bx+10]
  729	                jmp     MA_65C02_indOK
  730	
  731	
  732	MA_IndX:        GetLineService _GL_GetSymb
  733	                or      al,20h
  734	                cmp     al,'x'
  735	                je      MA_IndX2
  736	                pop     ax
  737	                jmp     MA_Error
  738	MA_IndX2:       pop     ax
  739	                cmp     ah,0
  740	                jz      MA_IndX21
  741	                mov     cx,cs:MA_StoreCX
  742	                inc     cl
  743	                jmp     MA_Error
  744	MA_IndX21:      mov     dl,cs:AsmTab1[bx+8]
  745	                cmp     dl,0FFh
  746	                jne     MA_IndX3
  747	                mov     cx,cs:MA_StoreCX
  748	                jmp     MA_Error0
  749	MA_IndX3:       mov     bx,cs:AssembAdr
  750	                mov     [bx],dl
  751	                inc     bx
  752	                mov     [bx],al
  753	                inc     bx
  754	                jmp     MA_ret
  755	
  756	MA_IndJMP:      call    GetAddress
  757	                mov     bx,cs:AssembAdr
  758	                mov     dl,6Ch
  759	                push    ax
  760	                dec     cl
  761	                GetLineService _GL_GETSYMB
  762	                cmp     al,')'
  763	                jz      MA_IndJMP6C
  764	                cmp     al,','
  765	                jne     MA_IndJMP_ER
  766	                GetLineService _GL_GETSYMB
  767	                or      al,20h
  768	                cmp     al,'x'
  769	                jne     MA_IndJMP_ER
  770	                mov     dl,7Ch
  771	MA_IndJMP6C:    pop     ax
  772	                mov     [bx],dl
  773	                inc     bx
  774	                mov     [bx],ax
  775	                inc     bx
  776	                inc     bx
  777	                jmp     MA_ret
  778	MA_IndJMP_ER:   dec     cl
  779	MA_IndJMP_ER1:  pop     ax
  780	                jmp     MA_Error0
  781	
  782	
  783	MA_Branches:    push    bx
  784	                mov     bx,cs:AssembAdr
  785	                add     bx,2
  786	                sub     ax,bx
  787	                rcl     dh,1
  788	                ror     dh,1
  789	                adc     ah,0
  790	                jnz     MA_err
  791	                xor     dh,al
  792	                shl     dh,1
  793	                jnc     MA_noerr
  794	MA_err:         pop     bx
  795	                mov     cx,cs:MA_StoreCX
  796	                inc     cl
  797	                inc     cl
  798	                jmp     MA_Error
  799	MA_noerr:       pop     bx
  800	                mov     dl,cs:AsmTab1[bx+5]
  801	                mov     bx,cs:AssembAdr
  802	                mov     [bx],dl
  803	                inc     bx
  804	                mov     [bx],al
  805	                inc     bx
  806	                jmp     MA_ret
  807	
  808	
  809	BufferA         db      64 dup (?)
  810	InitBufferA:    push    cx si di es
  811	                mov     si,cs
  812	                mov     es,si
  813	                mov     si,SDA_Address
  814	                mov     di,offset BufferA
  815	                mov     cx,64
  816	                cld
  817	        rep     movsb
  818	                pop     es di si cx
  819	                ret
  820	
  821	
  822	BufferB         db      64 dup (?)
  823	InitBufferB:    push    cx si di es
  824	                mov     si,cs
  825	                mov     es,si
  826	                mov     si,SDB_Address
  827	                mov     di,offset BufferB
  828	                mov     cx,64
  829	                cld
  830	        rep     movsb
  831	                pop     es di si cx
  832	                ret
  833	
  834	
  835	
  836	; -- Memory Edit B ---------------------
  837	
  838	MemoryEditStruc struc
  839	EB_TextOrHex    db      ?
  840	EB_TextCL2      db      ?
  841	EB_TextCL1      db      ?
  842	EB_TextCH       db      ?
  843	EB_FirstFl      db      ?
  844	EB_Address      dw      ?
  845	EB_MinUp        db      ?
  846	EB_MaxDown      db      ?
  847	EB_MinLeft1     db      ?
  848	EB_MinLeft2     db      ?
  849	EB_MaxRight1    db      ?
  850	EB_MaxRight2    db      ?
  851	EB_Center       db      ?
  852	EB_BytesInLine  dw      ?
  853	EB_MemAdr       dw      ?
  854	EB_InitBuffProc dw      ?
  855	EB_TabFlag      db      ?
  856	MemoryEditStruc ends
  857	
  858	EB_Flag         db      0
  859	EB_Params       MemoryEditStruc <0,8,61,20,0,0,20,23,8,61,54,77,29,16,offset SDB_Address,InitBufferB,1>
  860	EditB:          mov     cs:EB_ParamsAddr, offset EB_Params
  861	                mov     cs:ActiveFlags,0000000001000000b
  862	                mov     cs:ShowAllNumber,2
  863	                mov     ax,68
  864	                mov     bx,68
  865	                call    SH_Choose
  866	                mov     cs:EB_Flag,1
  867	                call    MemoryEditor
  868	                mov     cs:EB_Flag,0
  869	                ret
  870	
  871	
  872	
  873	
  874	; -- Memory Edit A ---------------------
  875	
  876	EA_Params       MemoryEditStruc <0,54,0,9,0,0,9,16,54,0,75,0FFh,0FFh,8,offset SDA_Address,InitBufferA,0>
  877	EditA:          mov     cs:EB_ParamsAddr, offset EA_Params
  878	                mov     cs:ActiveFlags,0000000000100000b
  879	                mov     cs:ShowAllNumber,1
  880	                mov     ax,61
  881	                mov     bx,61
  882	                call    SH_Choose
  883	                mov     cs:EB_Flag,0
  884	                call    MemoryEditor
  885	                mov     cs:EB_Flag,1
  886	                ret
  887	
  888	
  889	
  890	
  891	; -- Disassembler ----------------------
  892	
  893	Disasm:         call    GetAddress
  894	                call    StopAnimate
  895	                mov     cs:AssembAdr,ax
  896	                call    ShowPrevIns
  897	                GetLineService _GL_ClrBuff
  898	                ret
  899	
  900	
  901	
  902	
  903	; -- Dump B ----------------------------
  904	
  905	DumpB:          call    GetAddress
  906	                mov     cs:SDB_Address,ax
  907	                call    InitBufferB
  908	                mov     si,offset EB_Params
  909	                call    EB_Init
  910	                GetLineService _GL_ClrBuff
  911	                ret
  912	
  913	
  914	
  915	
  916	; -- Dump A ----------------------------
  917	
  918	DumpA:          call    GetAddress
  919	                mov     cs:SDA_Address,ax
  920	                call    InitBufferA
  921	                mov     si,offset EA_Params
  922	                call    EB_Init
  923	                GetLineService _GL_ClrBuff
  924	                ret
  925	
  926	
  927	
  928	
  929	; -- Limits ----------------------------
  930	
  931	LeftLimit       dw      0                       ; '[' command
  932	RightLimit      dw      0BFFFh
  933	
  934	Limits:         GetLineService _GL_GetSymb
  935	                or      al,al
  936	                jnz     LI_ok1
  937	                GetLineService _GL_ClrBuff
  938	                mov     al,'['
  939	                GetLineService _GL_Symbol
  940	                mov     al,' '
  941	                GetLineService _GL_Symbol
  942	                mov     al,byte ptr cs:LeftLimit[1]
  943	                GetLineService _GL_Byte
  944	                mov     al,byte ptr cs:LeftLimit
  945	                GetLineService _GL_Byte
  946	                mov     al,','
  947	                GetLineService _GL_Symbol
  948	                mov     al,byte ptr cs:RightLimit[1]
  949	                GetLineService _GL_Byte
  950	                mov     al,byte ptr cs:RightLimit
  951	                GetLineService _GL_Byte
  952	                mov     al,']'
  953	                GetLineService _GL_Symbol
  954	                mov     cl,cs:GetLineParams.GL_Pos
  955	                mov     ch,cs:GetLineParams.GL_BegPrint
  956	                ret
  957	
  958	LI_ok1:         cmp     al,']'
  959	                je      LI_End
  960	                cmp     al,','
  961	                je      LI_Second
  962	                dec     cl
  963	                call    GetAddress
  964	                mov     cs:LeftLimit,ax
  965	LI_Second:      GetLineService _GL_GetSymb
  966	                or      al,al
  967	                jz      LI_End
  968	                cmp     al,']'
  969	                je      LI_End
  970	                dec     cl
  971	                call    GetAddress
  972	                mov     cs:RightLimit,ax
  973	LI_End:         mov     ax,cs:LeftLimit
  974	                cmp     ax,cs:RightLimit
  975	                ja      LI_NoOk
  976	                GetLineService _GL_ClrBuff
  977	                ret
  978	LI_NoOk:        mov     cs:GetKeyParams.RK_ErrPtr,offset AdressError
  979	                inc     cl
  980	                ret
  981	
  982	
  983	
  984	
  985	; -- Find ------------------------------
  986	
  987	FindBuffer      db      256 dup (0)
  988	F_LastAdr       dw      0
  989	F_BufPtr        db      0
  990	TextFlag        db      0
  991	F_StoreCX       dw      0
  992	F_StoreCX1      dw      0
  993	F_StoreCX2      dw      0
  994	F_or            db      0
  995	F_si            dw      0
  996	
  997	F_Err1:         mov     cs:GetKeyParams.RK_ErrPtr,offset NoStringMes
  998	                inc     cl
  999	                ret
 1000	
 1001	F_Err2:         mov     cs:GetKeyParams.RK_ErrPtr,offset ByteExpMes
 1002	                mov     cx,cs:F_StoreCX2
 1003	                mov     cs:F_BufPtr,0
 1004	                inc     cl
 1005	                ret
 1006	
 1007	Find:           mov     dl,cs:GetLineParams.GL_GS_SpcFl ; 'F' command
 1008	                GetLineService _GL_GetSymb
 1009	                cmp     cs:F_BufPtr,0
 1010	                jnz     F_FindNext
 1011	                or      al,al
 1012	                jz      F_Err1
 1013	F_FindNext:     or      al,al
 1014	                jnz     F_New
 1015	                mov     si,cs:F_LastAdr
 1016	                inc     si
 1017	                mov     cs:F_si,si
 1018	                jmp     F_Go_0
 1019	F_New:          dec     cl
 1020	                xor     ax,ax
 1021	                mov     cs:TextFlag,al
 1022	                mov     cs:F_BufPtr,al
 1023	                mov     cs:F_or,al
 1024	F_0:            GetLineService _GL_GetSymb
 1025	                or      al,al
 1026	                jnz     F_0000
 1027	                jmp     f_Go
 1028	F_0000:         cmp     al,27h                  ; '
 1029	                jne     F_str_0
 1030	                mov     byte ptr cs:F_or,0
 1031	                jmp     F_str
 1032	F_Str_0:        cmp     al,'"'
 1033	                jne     F_1
 1034	                mov     byte ptr cs:F_or,80h
 1035	F_str:          xor     byte ptr cs:TextFlag,0FFh
 1036	                mov     byte ptr cs:GetLineParams.GL_GS_SpcFl,0
 1037	                jnz     F_0
 1038	                mov     byte ptr cs:GetLineParams.GL_GS_SpcFl,1
 1039	                GetLineService _GL_GetSymb
 1040	                cmp     al,','
 1041	                je      F_0
 1042	                dec     cl
 1043	                jmp     F_0
 1044	
 1045	F_1:            cmp     byte ptr cs:TextFlag,0
 1046	                jnz     F_1_1
 1047	                dec     cl
 1048	                mov     cs:F_StoreCX2,cx
 1049	                call    GetAddress
 1050	                or      ah,ah
 1051	                jz      F_1_1_1
 1052	                jmp     F_Err2
 1053	F_1_1:          or      al,cs:F_or
 1054	F_1_1_1:        xor     bx,bx
 1055	                mov     bl,cs:F_BufPtr
 1056	                mov     cs:FindBuffer[bx],al
 1057	                inc     byte ptr cs:F_BufPtr
 1058	                jmp     F_0
 1059	
 1060	F_Go:           mov     si,cs:LeftLimit
 1061	                mov     cs:F_si,si
 1062	F_Go_0:         push    cs
 1063	                pop     es
 1064	                jmp     F_Go_000
 1065	F_Go_00:        inc     word ptr cs:F_si
 1066	                jz      F_NotFound
 1067	F_Go_000:       mov     si,cs:F_si
 1068	                cmp     si,cs:RightLimit
 1069	                ja      F_NotFound
 1070	                mov     di,offset FindBuffer
 1071	                xor     cx,cx
 1072	                mov     cl,cs:F_BufPtr
 1073	                rep     cmpsb
 1074	                jne     F_Go_00
 1075	                mov     si,cs:F_si
 1076	                mov     cs:SDB_Address,si
 1077	                call    InitBufferB
 1078	                mov     cs:F_LastAdr,si
 1079	                mov     si,offset EB_Params
 1080	                call    EB_Init
 1081	                mov     cs:GetLineParams.GL_GS_SpcFl,dl
 1082	                GetLineService _GL_ClrBuff
 1083	                jmp     F_ret
 1084	F_NotFound:     mov     cs:GetKeyParams.RK_ErrPtr,offset NotFound
 1085	                mov     cs:GetLineParams.GL_GS_SpcFl,dl
 1086	                mov     cl,cs:GetLineParams.GL_Pos
 1087	                mov     ch,cs:GetLineParams.GL_BegPrint
 1088	                inc     cl
 1089	F_ret:          ret
 1090	
 1091	
 1092	
 1093	
 1094	; -- Copy ------------------------------
 1095	
 1096	Copy:           call    GetAddress
 1097	                push    ax
 1098	                GetLineService _GL_GetSymb
 1099	                or      al,al
 1100	                jnz     C_1
 1101	                pop     ax
 1102	                push    ax
 1103	                cmp     ax,cs:LeftLimit
 1104	                jb      C_Forward
 1105	                stc
 1106	                jmp     C_01
 1107	C_Forward:      clc
 1108	                jmp     C_01
 1109	C_1:            call    Upcase
 1110	                cmp     al,'f'
 1111	                clc
 1112	                je      C_01
 1113	                cmp     al,'b'
 1114	                jne     C_Error
 1115	                stc
 1116	C_01:           pop     ax
 1117	                push    es
 1118	                push    ds
 1119	                pop     es
 1120	                pushf
 1121	                mov     di,ax
 1122	                mov     si,cs:LeftLimit
 1123	                mov     cx,cs:RightLimit
 1124	                sub     cx,si
 1125	                inc     cx
 1126	                popf
 1127	                cld
 1128	                jnc     C_DoCopy
 1129	                mov     si,cs:RightLimit
 1130	                add     di,cx
 1131	                dec     di
 1132	                std
 1133	C_DoCopy:       rep     movsb
 1134	                pop     es
 1135	                cld
 1136	                GetLineService _GL_ClrBuff
 1137	                ret
 1138	C_Error:        pop     ax
 1139	                GetLineService _GL_Left
 1140	                mov     cs:GetKeyParams.RK_ErrPtr,offset BadParam
 1141	                ret
 1142	
 1143	
 1144	
 1145	
 1146	; -- Compare ---------------------------
 1147	
 1148	Compare:        call    GetAddress
 1149	                push    es
 1150	                push    ds
 1151	                pop     es
 1152	                mov     di,ax
 1153	                mov     si,cs:LeftLimit
 1154	                mov     cx,cs:RightLimit
 1155	                sub     cx,si
 1156	                inc     cx
 1157	                cld
 1158	                repe    cmpsb
 1159	                pop     es
 1160	                pushf
 1161	                GetLineService _GL_ClrBuff
 1162	                inc     cl
 1163	                popf
 1164	                mov     cs:GetKeyParams.RK_ErrPtr,offset Identifical
 1165	                je      O_Ident
 1166	                mov     cs:GetKeyParams.RK_ErrPtr,offset NotIdent
 1167	                dec     di
 1168	                mov     cs:SDB_Address,di
 1169	                call    InitBufferB
 1170	                mov     si,offset EB_Params
 1171	                call    EB_Init
 1172	O_Ident:        ret
 1173	
 1174	
 1175	
 1176	
 1177	; -- Breaks ----------------------------
 1178	
 1179	Breaks:         GetLineService _GL_GetSymb      ; 'B' command
 1180	                or      al,al
 1181	                jnz     B_ok1
 1182	B_Err:          inc     cl
 1183	B_Err1:         mov     cs:GetKeyParams.RK_ErrPtr,offset BreakNumMES
 1184	                ret
 1185	B_ok1:          dec     cl
 1186	                GetLineService _GL_GetSymb
 1187	                sub     al,'0'
 1188	                cmp     al,6
 1189	                ja      B_Err1
 1190	                cmp     al,1
 1191	                jb      B_Err1
 1192	                mov     bl,7
 1193	                mul     bl
 1194	                mov     bx,ax
 1195	                GetLineService _GL_GetSymb
 1196	                or      al,al
 1197	                jnz     B_ok2
 1198	                xor     cs:Breakpoints.[bx].BP_ActiveFlag,1
 1199	                GetLineService _GL_ClrBuff
 1200	                ret
 1201	B_ok2:          cmp     al,'='
 1202	                je      B_ok3
 1203	                mov     cs:GetKeyParams.RK_ErrPtr,offset EqualMess
 1204	                ret
 1205	B_ok3:          call    GetAddress
 1206	                mov     cs:Breakpoints[bx].BP_ActiveFlag,1
 1207	                mov     cs:Breakpoints[bx].BP_Address,ax
 1208	                GetLineService _GL_ClrBuff
 1209	                ret
 1210	
 1211	
 1212	
 1213	
 1214	; -- Go --------------------------------
 1215	
 1216	Go:             mov     bx,cs:AssembAdr         ; 'G' command
 1217	                GetLineService _GL_GetSymb
 1218	                or      al,al
 1219	                jz      GO_1
 1220	                cmp     al,','
 1221	                je      Go_SecAdr
 1222	                dec     cl
 1223	                call    GetAddress
 1224	                mov     bx,ax
 1225	                dec     cl
 1226	                GetLineService _GL_GetSymb
 1227	                or      al,al
 1228	                jz      GO_1
 1229	                cmp     al,','
 1230	                jne     GO_1
 1231	Go_SecAdr:      mov     cs:Regs.PC,bx
 1232	                call    GetAddress
 1233	                mov     cs:Breakpoints.BP_ActiveFlag,1
 1234	                mov     cs:Breakpoints.BP_Address,ax
 1235	                call    GoAppleII
 1236	                mov     cs:Breakpoints.BP_ActiveFlag,0
 1237	                GetLineService _GL_ClrBuff
 1238	                ret
 1239	GO_1:           mov     cs:Regs.PC,bx
 1240	                mov     cs:Breakpoints.BP_ActiveFlag,0
 1241	                call    GoAppleII0
 1242	                GetLineService _GL_ClrBuff
 1243	                ret
 1244	
 1245	
 1246	
 1247	
 1248	; -- Load Labels -----------------------
 1249	
 1250	LoadLab:        GetLineService _GL_GetSymb              ; 'LL' command
 1251	                dec     cl
 1252	                or      al,al
 1253	                jnz     LL_E0
 1254	                GetLineService _GL_ClrBuff
 1255	                mov     bx,offset Com_LLabels
 1256	                GetLineService _GL_String
 1257	                mov     al,' '
 1258	                GetLineService _GL_Symbol
 1259	                mov     bx,offset LAB_FileSpec
 1260	                GetLineService _GL_String
 1261	                GetLineService _GL_Home
 1262	                xor     ch,ch
 1263	                mov     cl,4
 1264	                mov     cs:GetKeyParams.RK_ErrPtr,offset LS_EnterMes1
 1265	                ret
 1266	LL_E0:          mov     byte ptr cs:LS_OpenFileF,3Dh
 1267	                mov     byte ptr cs:LS_RWfileF,3Fh
 1268	                mov     word ptr cs:LS_ErrPtr,offset LabErrMes_L
 1269	                mov     word ptr cs:LS_OkPtr,offset LabMes_L
 1270	                mov     word ptr cs:LS_FileSpec,offset LAB_FileSpec
 1271	                mov     word ptr cs:LS_Ext,offset LAB_Ext
 1272	                mov     word ptr cs:LS_Buffer,offset SymbMem
 1273	                mov     word ptr cs:LS_BufferLen,MaxSymbMem * 2 + 4
 1274	                jmp     File_LS
 1275	
 1276	
 1277	
 1278	
 1279	; -- Save Labels -----------------------
 1280	
 1281	LAB_FileSpec    db      'UNTITLED.LAB', 67 dup (0)
 1282	LAB_Ext         db      '.LAB',0
 1283	SL_ErrFuck:     mov     cs:GetKeyParams.RK_ErrPtr,offset SymNoSymbErr
 1284	                GetLineService _GL_End
 1285	                mov     cl,cs:GetLineParams.GL_Pos
 1286	                mov     ch,cs:GetLineParams.GL_BegPrint
 1287	                inc     cl
 1288	                ret
 1289	SaveLab:        cmp     cs:SymbPtr,0            ; 'SL' command
 1290	                jz      SL_ErrFuck
 1291	                GetLineService _GL_GetSymb
 1292	                dec     cl
 1293	                or      al,al
 1294	                jnz     SL_E0
 1295	                GetLineService _GL_ClrBuff
 1296	                mov     bx,offset Com_SLabels
 1297	                GetLineService _GL_String
 1298	                mov     al,' '
 1299	                GetLineService _GL_Symbol
 1300	                mov     bx,offset LAB_FileSpec
 1301	                GetLineService _GL_String
 1302	                GetLineService _GL_Home
 1303	                xor     ch,ch
 1304	                mov     cl,4
 1305	                mov     cs:GetKeyParams.RK_ErrPtr,offset LS_EnterMes2
 1306	                ret
 1307	SL_E0:          mov     byte ptr cs:LS_OpenFileF,3Ch
 1308	                mov     byte ptr cs:LS_RWfileF,40h
 1309	                mov     word ptr cs:LS_ErrPtr,offset LabErrMes_S
 1310	                mov     word ptr cs:LS_OkPtr,offset LabMes_S
 1311	                mov     word ptr cs:LS_FileSpec,offset LAB_FileSpec
 1312	                mov     word ptr cs:LS_Ext,offset LAB_Ext
 1313	                mov     word ptr cs:LS_Buffer,offset SymbMem
 1314	                mov     word ptr cs:LS_BufferLen,MaxSymbMem * 2 + 4
 1315	                jmp     File_LS
 1316	
 1317	
 1318	
 1319	
 1320	; -- Define Label ----------------------
 1321	
 1322	MaxSymbMem      =       1000h
 1323	MaxValCount     =       MaxSymbMem / 2
 1324	
 1325	                even                            ; Don't touch!
 1326	SymbMem         db      MaxSymbMem dup (0)
 1327	SymbPtr         dw      0
 1328	SymbVal         dw      MaxValCount dup (0)
 1329	SymbValPtr      dw      0
 1330	
 1331	DefineLab:      call    SymbGetVal
 1332	                jc      SD_NewSymb
 1333	                mov     bx,cs:SGV_adr
 1334	                mov     cx,cs:SGV_cx
 1335	                GetLineService _GL_GetSymb
 1336	                or      al,al
 1337	                jz      SD_EqMiss
 1338	                cmp     al,'='
 1339	                jne     SD_EqMiss1
 1340	                call    GetAddress
 1341	                mov     cs:SymbVal[bx],ax
 1342	                jmp     SD_ret
 1343	SD_NewSymb:     GetLineService _GL_GetSymb
 1344	                or      al,al
 1345	                jz      SD_SymMiss
 1346	                push    cx
 1347	                mov     di,offset Delimiters
 1348	                mov     cx,Delimiters_C
 1349	                call    CalcCommand
 1350	                pop     cx
 1351	                jnc     SD_SymMiss1
 1352	                dec     cl
 1353	                mov     bx,cs:SymbPtr
 1354	SD_Loop0:       GetLineService _GL_GetSymb
 1355	                cmp     al,'='
 1356	                je      SD_Cont1
 1357	                or      al,al
 1358	                jz      SD_EqMiss
 1359	                push    cx
 1360	                mov     di,offset Delimiters
 1361	                mov     cx,Delimiters_C
 1362	                call    CalcCommand
 1363	                pop     cx
 1364	                jnc     SD_EqMiss1
 1365	                mov     cs:SymbMem[bx],al
 1366	                inc     bx
 1367	                cmp     bx,MaxSymbMem
 1368	                jb      SD_Loop0
 1369	                mov     cs:GetKeyParams.RK_ErrPtr,offset SymNoMemErr
 1370	                ret
 1371	SD_EqMiss:      inc     cl
 1372	SD_EqMiss1:     mov     cs:GetKeyParams.RK_ErrPtr,offset EqualMess
 1373	                ret
 1374	SD_SymMiss:     inc     cl
 1375	SD_SymMiss1:    mov     cs:GetKeyParams.RK_ErrPtr,offset SymMissErr
 1376	                ret
 1377	SD_Cont1:       call    GetAddress
 1378	                mov     word ptr cs:SymbMem[bx],0
 1379	                inc     bx
 1380	                mov     cs:SymbPtr,bx
 1381	                mov     si,cs:SymbValPtr
 1382	                shl     si,1
 1383	                mov     cs:SymbVal[si],ax
 1384	                inc     word ptr cs:SymbValPtr
 1385	SD_ret:         mov     cs:GetKeyParams.RK_ErrPtr,0
 1386	                call    ShowPrevIns
 1387	                GetLineService _GL_ClrBuff
 1388	                ret
 1389	
 1390	
 1391	
 1392	
 1393	; -- Labels List -----------------------
 1394	
 1395	LL_Commands     db      7,8,3,4,0Ch,18h
 1396	LL_Procs        dw      LL_Up,LL_Down,LL_PgUp,LL_PgDn,LL_Esc,LL_Enter
 1397	LabList:        cmp     cs:SymbPtr,0            ; 'list' command
 1398	                jnz     LL_NoError
 1399	                jmp     LL_Error1
 1400	LL_NoError:     mov     ax,85
 1401	                mov     bx,85
 1402	                call    SH_Choose
 1403	                mov     cs:SL_Flag,1
 1404	                mov     cs:ShowAllNumber,6
 1405	                mov     cs:ActiveFlags,0000000100000000b
 1406	                mov     cs:SL_Ptr,0
 1407	LL_Loop:        call    ReadKey
 1408	                mov     cx,offset LL_Procs- offset LL_Commands
 1409	                mov     di,offset LL_Commands
 1410	                call    CalcCommand
 1411	                jc      LL_Loop
 1412	                shl     di,1
 1413	                call    cs:LL_Procs[di]
 1414	                jnc     LL_Loop
 1415	LL_Ret:         mov     cs:SL_Flag,0
 1416	                GetLineService _GL_ClrBuff
 1417	                ret
 1418	
 1419	LL_Up:          cmp     cs:SL_Ptr,0
 1420	                jz      LL_UpRet
 1421	                dec     cs:SL_Ptr
 1422	LL_UpRet:       clc
 1423	                ret
 1424	
 1425	LL_Down:        mov     ax,cs:SL_Ptr
 1426	                add     ax,10
 1427	                cmp     ax,cs:SymbValPtr
 1428	                jae     LL_DownRet
 1429	                inc     cs:SL_Ptr
 1430	LL_DownRet:     clc
 1431	                ret
 1432	
 1433	LL_PgUp:        mov     di,10
 1434	LL_PgUpLoop:    call    LL_Up
 1435	                dec     di
 1436	                jnz     LL_PgUpLoop
 1437	                clc
 1438	                ret
 1439	
 1440	LL_PgDn:        mov     di,10
 1441	LL_PgDnLoop:    call    LL_Down
 1442	                dec     di
 1443	                jnz     LL_PgDnLoop
 1444	                clc
 1445	                ret
 1446	
 1447	LL_Esc:
 1448	LL_Enter:       stc
 1449	                ret
 1450	
 1451	LL_Error1:      mov     cs:GetKeyParams.RK_ErrPtr,offset SymNoSymbErr
 1452	                inc     cl
 1453	                ret
 1454	
 1455	
 1456	
 1457	; -- Delete Label ----------------------
 1458	
 1459	SD_Error1:      mov     cs:GetKeyParams.RK_ErrPtr,offset SymMissErr
 1460	SD_Error2:      inc     cl
 1461	                ret
 1462	
 1463	DelLab:         GetLineService _GL_GetSymb
 1464	                or      al,al
 1465	                jz      SD_Error1
 1466	                cmp     al,'.'
 1467	                je      SDel_1
 1468	                dec     cl
 1469	SDel_1:         call    SymbGetVal
 1470	                jc      SD_Error2
 1471	                mov     si,offset SymbMem
 1472	                mov     di,si
 1473	                add     si,cs:SGV_nameEnd
 1474	                add     di,cs:SGV_nameBeg
 1475	                inc     si
 1476	                push    ds
 1477	                mov     ax,cs
 1478	                mov     ds,ax
 1479	                mov     es,ax
 1480	                mov     cx,cs:SymbPtr
 1481	                sub     cx,cs:SGV_nameEnd
 1482	                inc     cx
 1483	                cld
 1484	                rep     movsb
 1485	                mov     si,offset SymbVal
 1486	                add     si,cs:SGV_adr
 1487	                mov     di,si
 1488	                add     si,2
 1489	                mov     cx,cs:SymbValPtr
 1490	                shl     cx,1
 1491	                sub     cx,cs:SGV_adr
 1492	                dec     cx
 1493	                rep     movsb
 1494	                pop     ds
 1495	                dec     word ptr cs:SymbValPtr
 1496	                mov     cx,cs:SGV_nameEnd
 1497	                sub     cx,cs:SGV_nameBeg
 1498	                inc     cx
 1499	                sub     cs:SymbPtr,cx
 1500	                mov     bx,cs:SymbPtr
 1501	                mov     word ptr cs:SymbMem[bx],0
 1502	                call    ShowPrevIns
 1503	                GetLineService _GL_ClrBuff
 1504	SDel_ret:       ret
 1505	
 1506	
 1507	
 1508	
 1509	; -- Labels ON/OFF ---------------------
 1510	
 1511	LabOnOff:       call    OnOff
 1512	                jc      LOO_ret
 1513	                mov     byte ptr cs:WordPrintFl,1
 1514	                jnz     LOO_ret0
 1515	                mov     byte ptr cs:WordPrintFl,0
 1516	LOO_ret0:       call    ShowPrevIns
 1517	                GetLineService _GL_ClrBuff
 1518	LOO_ret:        ret
 1519	
 1520	
 1521	
 1522	
 1523	; -- Swap ON/OFF -----------------------
 1524	
 1525	SwapOnOff:      call    GetAddress
 1526	                mov     cs:SwapTime,ax
 1527	                GetLineService _GL_ClrBuff
 1528	                ret
 1529	
 1530	
 1531	
 1532	
 1533	; -- Evaluate expression ---------------
 1534	
 1535	CalcCom         db      'h$d@b%'
 1536	CalcSub         dw      CalcHex,CalcHex,CalcHex,CalcDec,CalcDec,CalcBin,CalcBin
 1537	CalcNum         dw      ?
 1538	
 1539	Calculate:      call    GetAddress
 1540	                mov     cs:CalcNum,ax
 1541	                GetLineService _GL_GetSymb
 1542	                or      al,al
 1543	                mov     di,0
 1544	                jz      CalcOk1
 1545	                push    cx
 1546	                mov     di,offset CalcCom
 1547	                mov     cx,offset CalcSub - offset CalcCom
 1548	                call    CalcCommand
 1549	                pop     cx
 1550	                jc      CalcError
 1551	                inc     di
 1552	                shl     di,1
 1553	CalcOk1:        mov     bx,cs:CalcNum
 1554	                GetLineService _GL_ClrBuff
 1555	                mov     al,' '
 1556	                GetLineService _GL_Symbol
 1557	                mov     GetLineParams.GL_InsFlag,1
 1558	                call    word ptr cs:CalcSub[di]
 1559	                xor     cx,cx
 1560	                cmp     cs:GetKeyParams.RK_ErrPtr,cx
 1561	                jz      CalcRet
 1562	                inc     cl
 1563	CalcRet:        ret
 1564	CalcError:      mov     cs:GetKeyParams.RK_ErrPtr,offset BadParam
 1565	                ret
 1566	
 1567	CalcHex:        mov     al,bh
 1568	                GetLineService _GL_Byte
 1569	                mov     al,bl
 1570	                GetLineService _GL_Byte
 1571	                ret
 1572	
 1573	CalcBin:        mov     al,'%'
 1574	                GetLineService _GL_Symbol
 1575	                mov     dx,1
 1576	                or      bx,bx
 1577	                clc
 1578	                jz      CalcB1
 1579	                mov     dx,10h
 1580	CalcB0:         dec     dx
 1581	                shl     bx,1
 1582	                jnc     CalcB0
 1583	                inc     dx
 1584	                jmp     CalcB1
 1585	CalcBinLoop:    shl     bx,1
 1586	CalcB1:         mov     al,'0'
 1587	                jnc     CalcB2
 1588	                mov     al,'1'
 1589	CalcB2:         GetLineService _GL_Symbol
 1590	                dec     dx
 1591	                jnz     CalcBinLoop
 1592	CalcB3:         ret
 1593	
 1594	CalcDec:        mov     al,'@'
 1595	                GetLineService _GL_Symbol
 1596	                or      bx,bx
 1597	                jz      CalcD0000
 1598	CalcDdiv:       xor     dx,dx
 1599	CalcD0:         inc     dx
 1600	                sub     bx,10
 1601	                jnc     CalcD0
 1602	                add     bx,10
 1603	                dec     dx
 1604	                mov     ax,bx
 1605	                mov     bx,dx
 1606	                add     ax,'0'
 1607	                GetLineService _GL_Symbol
 1608	                GetLineService _GL_Left
 1609	                cmp     dx,0
 1610	                jnz     CalcDdiv
 1611	                ret
 1612	CalcD0000:      mov     al,'0'
 1613	                GetLineService _GL_Symbol
 1614	                ret
 1615	
 1616	
 1617	
 1618	
 1619	; -- Cold RESET Apple ][ ---------------
 1620	
 1621	ResetApple:     call    ResetAppleII
 1622	                mov     ax,ds:[0FFFCh]
 1623	                mov     cs:Regs.PC,ax
 1624	                mov     cs:AssembAdr,ax
 1625	                call    StopAnimate
 1626	                call    ShowPrevIns
 1627	                xor     al,al
 1628	                mov     cs:Regs.A,al
 1629	                mov     cs:Regs.X,al
 1630	                mov     cs:Regs.Y,al
 1631	                mov     cs:Regs.S,al
 1632	                mov     cs:Regs.P,20h
 1633	                GetLineService _GL_ClrBuff
 1634	                ret
 1635	
 1636	
 1637	
 1638	
 1639	; -- Move Help Window ------------------
 1640	
 1641	MH_Keys         db      7,8,5,6,1,2,3,4,19h,0Ch,18h
 1642	MH_Subrt        dw      MH_Up,MH_Down,MH_Left,MH_Right
 1643	                dw      MH_Home,MH_End,MH_PgUp,MH_PgDn,MH_Cntr
 1644	                dw      MH_Esc,MH_Enter
 1645	MH_CX           dw      ?
 1646	MH_OldSH_CX     dw      ?
 1647	MoveHelp:       test    cs:HelpFlag,1
 1648	                jnz     MH_ok
 1649	                jmp     MH_HelpClosed
 1650	MH_ok:          push    cs:ShowAllNumber
 1651	                mov     cs:ShowAllNumber,5
 1652	                mov     cs:MH_CX,cx
 1653	                mov     ax,cs:SH_CX
 1654	                mov     cs:MH_OldSH_CX,ax
 1655	                mov     dx,1
 1656	                xchg    cs:HelpPtr,dx
 1657	                call    SH_Calculate
 1658	                mov     cs:ActiveFlags,0000000010000000b
 1659	                xor     ax,ax
 1660	                mov     cs:FkeysBuffer[7*size FkeyStruc].FkeyFlag,al
 1661	                mov     cs:FkeysBuffer[8*size FkeyStruc].FkeyFlag,al
 1662	                mov     cs:FkeysBuffer[9*size FkeyStruc].FkeyFlag,al
 1663	                mov     cs:ScreenIOparams.CursorFlag,0
 1664	MH_Loop0:       mov     cx,cs:MH_CX
 1665	                call    ReadKey
 1666	                mov     di,offset MH_Keys
 1667	                mov     cx,offset MH_Subrt- offset MH_Keys
 1668	                call    CalcCommand
 1669	                jc      MH_Loop0
 1670	                shl     di,1
 1671	                call    cs:MH_Subrt[di]
 1672	                jnc     MH_Loop0
 1673	                mov     cs:HelpPtr,dx
 1674	                call    SH_Calculate
 1675	                mov     al,1
 1676	                mov     cs:FkeysBuffer[7*size FkeyStruc].FkeyFlag,al
 1677	                mov     cs:FkeysBuffer[8*size FkeyStruc].FkeyFlag,al
 1678	                mov     cs:FkeysBuffer[9*size FkeyStruc].FkeyFlag,al
 1679	                mov     cs:ScreenIOparams.CursorFlag,1
 1680	                pop     cs:ShowAllNumber
 1681	                GetLineService _GL_ClrBuff
 1682	MH_HelpClosed:  ret
 1683	
 1684	MH_Up:          mov     cx,cs:SH_CX
 1685	                ScreenIOservice _CALCXY
 1686	                cmp     ch,1
 1687	                je      MH_UpRet
 1688	                sub     cs:SH_CX,80*2
 1689	MH_UpRet:       clc
 1690	                ret
 1691	MH_Down:        mov     cx,cs:SH_CX
 1692	                ScreenIOservice _CALCXY
 1693	                cmp     ch,12
 1694	                je      MH_DownRet
 1695	                add     cs:SH_CX,80*2
 1696	MH_DownRet:     clc
 1697	                ret
 1698	MH_Left:        mov     cx,cs:SH_CX
 1699	                ScreenIOservice _CALCXY
 1700	                cmp     cl,0
 1701	                je      MH_LeftRet
 1702	                sub     cs:SH_CX,2
 1703	MH_LeftRet:     clc
 1704	                ret
 1705	MH_Right:       mov     cx,cs:SH_CX
 1706	                ScreenIOservice _CALCXY
 1707	                cmp     cl,43
 1708	                je      MH_RightRet
 1709	                add     cs:SH_CX,2
 1710	MH_RightRet:    clc
 1711	                ret
 1712	
 1713	MH_Home:        mov     cs:SH_CX,0
 1714	                clc
 1715	                ret
 1716	MH_End:         mov     cs:SH_CX,6E0h
 1717	                clc
 1718	                ret
 1719	MH_PgUp:        mov     cs:SH_CX,56h
 1720	                clc
 1721	                ret
 1722	MH_PgDn:        mov     cs:SH_CX,736h
 1723	                clc
 1724	                ret
 1725	MH_Cntr:        mov     cs:SH_CX,3EAh
 1726	                clc
 1727	                ret
 1728	MH_Esc:
 1729	;               mov     ax,cs:MH_OldSH_CX
 1730	;               mov     cs:SH_CX,ax
 1731	MH_Enter:       stc
 1732	                ret
 1733	
 1734	
 1735	
 1736	
 1737	; -- Print Memory Dump -----------------
 1738	
 1739	PD_PrnFileSpec  db      'PRN',0
 1740	PD_FileSpec     db      79 dup (0)
 1741	PD_Title        db      '            Appler Debugger Print Out -- Apple ][ Memory Dump',0Dh,0Ah
 1742	                db      '--------------------------------------------------------------------------',0Dh,0Ah
 1743	PD_Line         db      80 dup (0)
 1744	PD_Handle       dw      ?
 1745	PD_ddl          db      ?
 1746	PD_Error_J:     jmp     PD_Error
 1747	PrintDump:      GetLineService _GL_GetSymb
 1748	                dec     cl
 1749	                mov     dx,offset PD_PrnFileSpec
 1750	                or      al,al
 1751	                jz      PD_1
 1752	                xor     bx,bx
 1753	PD_Loop0:       GetLineService _GL_GetSymb
 1754	                mov     cs:PD_FileSpec[bx],al
 1755	                inc     bx
 1756	                cmp     bx,79
 1757	                je      PD_LoopOK
 1758	                or      al,al
 1759	                jnz     PD_Loop0
 1760	PD_LoopOK:      mov     dx,offset PD_FileSpec
 1761	PD_1:           mov     GetKeyParams.RK_ErrPtr,offset PrintingMes
 1762	                call    Prepare4DOS
 1763	                push    ds
 1764	                push    cs
 1765	                pop     ds
 1766	                xor     cx,cx
 1767	                mov     ah,3Ch
 1768	                int     21h
 1769	                jc      PD_Error_J
 1770	                mov     cs:PD_Handle,ax
 1771	                mov     dx,offset PD_Title
 1772	                mov     cx,139
 1773	                mov     bx,ax
 1774	                mov     ah,40h
 1775	                int     21h
 1776	                jc      PD_Error_J
 1777	                pop     ds
 1778	                push    ds
 1779	                mov     bx,cs:LeftLimit
 1780	                mov     cx,cs:RightLimit
 1781	                sub     cx,bx
 1782	                inc     cx
 1783	                cld
 1784	                jmp     PD_NewLine1
 1785	PD_NewLine:     call    PD_PrintLine
 1786	                jc      PD_Error_J
 1787	PD_NewLine1:    call    PD_ClearLine
 1788	                xor     dl,dl
 1789	                mov     dh,58
 1790	                mov     al,bh
 1791	                call    PD_PrintByte
 1792	                mov     al,bl
 1793	                call    PD_PrintByte
 1794	                mov     al,':'
 1795	                call    PD_PrintSymbol
 1796	                mov     al,' '
 1797	                call    PD_PrintSymbol
 1798	                mov     cs:PD_ddl,8
 1799	                jmp     PD_NL
 1800	PD_PrintLoop:   mov     al,bl
 1801	                and     al,00001111b
 1802	                jz      PD_NewLine
 1803	PD_NL:          mov     al,ds:[bx]
 1804	                inc     bx
 1805	                call    PD_PrintByte
 1806	                xchg    dl,dh
 1807	                xor     ah,ah
 1808	                mov     di,ax
 1809	                shl     di,1
 1810	                mov     al,byte ptr ss:TextChars[di]
 1811	                cmp     al,0DBh
 1812	                jne     PD_2
 1813	                mov     al,20h
 1814	PD_2:           call    PD_PrintSymbol
 1815	                xchg    dl,dh
 1816	PD_Space:       mov     al,' '
 1817	                call    PD_PrintSymbol
 1818	                dec     cs:PD_ddl
 1819	                jz      PD_Space
 1820	                loop    PD_PrintLoop
 1821	                call    PD_PrintLine
 1822	                jc      PD_Error
 1823	                mov     bx,cs:PD_Handle
 1824	                mov     ah,3Eh
 1825	                int     21h
 1826	                jc      PD_Error
 1827	                mov     GetKeyParams.RK_ErrPtr,offset PrintOkMes
 1828	                GetLineService _GL_ClrBuff
 1829	                clc
 1830	PD_Ret:         pop     ds
 1831	                call    SOD4eraperP
 1832	                ret
 1833	PD_Error:       mov     GetKeyParams.RK_ErrPtr,offset PrintErrMes
 1834	                mov     ch,cs:GetLineParams.GL_BegPrint
 1835	                mov     cl,cs:GetLineParams.GL_Pos
 1836	                inc     cl
 1837	                stc
 1838	                jmp     PD_Ret
 1839	
 1840	
 1841	
 1842	
 1843	; -- Print Assembler -------------------
 1844	
 1845	PA_Title        db      '    Appler Debugger Print Out',0Dh,0Ah
 1846	                db      '        65C02 Disassebler',0Dh,0Ah
 1847	                db      '---------------------------------',0Dh,0Ah
 1848	PA_Title1       db      0Dh,0Ah,'       Defined Labels List',0Dh,0Ah
 1849	                db      '---------------------------------',0Dh,0Ah
 1850	PA_Error_J:     jmp     PA_Error
 1851	PrintAssembler: GetLineService _GL_GetSymb
 1852	                dec     cl
 1853	                mov     dx,offset PD_PrnFileSpec
 1854	                or      al,al
 1855	                jz      PA_1
 1856	                xor     bx,bx
 1857	PA_Loop0:       GetLineService _GL_GetSymb
 1858	                mov     cs:PD_FileSpec[bx],al
 1859	                inc     bx
 1860	                cmp     bx,79
 1861	                je      PA_LoopOK
 1862	                or      al,al
 1863	                jnz     PA_Loop0
 1864	PA_LoopOK:      mov     dx,offset PD_FileSpec
 1865	PA_1:           mov     GetKeyParams.RK_ErrPtr,offset PrintingMes
 1866	                call    Prepare4DOS
 1867	                push    ds
 1868	                push    cs
 1869	                pop     ds
 1870	                xor     cx,cx
 1871	                mov     ah,3Ch
 1872	                int     21h
 1873	                jc      PA_Error_J
 1874	                mov     cs:PD_Handle,ax
 1875	                mov     dx,offset PA_Title
 1876	                mov     cx,93
 1877	                mov     bx,ax
 1878	                mov     ah,40h
 1879	                int     21h
 1880	                jc      PA_Error_J
 1881	                pop     ds
 1882	                push    ds
 1883	                mov     si,cs:LeftLimit
 1884	PA_Loop1:       call    PD_ClearLine
 1885	                gotoxy  1Ah,2                   ; Unvisible
 1886	                mov     dx,si
 1887	                call    OneInstr
 1888	                mov     cx,29
 1889	                call    PD_GetScreen
 1890	                call    PD_PrintLine
 1891	                jc      PA_Error_J
 1892	                cmp     dx,si
 1893	                ja      PA_Exit
 1894	                cmp     si,cs:RightLimit
 1895	                jbe     PA_Loop1
 1896	PA_Exit:        cmp     cs:SymbPtr,0
 1897	                jz      PA_NoLabs
 1898	                push    cs
 1899	                pop     ds
 1900	                mov     dx,offset PA_Title1
 1901	                mov     cx,65
 1902	                mov     bx,PD_Handle
 1903	                mov     ah,40h
 1904	                int     21h
 1905	                jc      PA_Error
 1906	                pop     ds
 1907	                push    ds
 1908	                xor     bx,bx
 1909	                mov     si,bx
 1910	                mov     dx,28
 1911	PA_ShowLabLoop: call    PD_ClearLine
 1912	                gotoxy  1Ah,2
 1913	                call    PrintSymbol
 1914	                gotoxy  1Ah,30
 1915	                mov     al,'='
 1916	                ScreenIOservice _SYMBPRINT
 1917	                mov     al,byte ptr cs:SymbVal[si+1]
 1918	                ScreenIOservice _BYTEPRINT
 1919	                mov     al,byte ptr cs:SymbVal[si]
 1920	                ScreenIOservice _BYTEPRINT
 1921	                mov     cx,33
 1922	                call    PD_GetScreen
 1923	                call    PD_PrintLine
 1924	                add     si,2
 1925	                inc     bx
 1926	                cmp     bx,cs:SymbValPtr
 1927	                jb      PA_ShowLabLoop
 1928	PA_NoLabs:      mov     bx,cs:PD_Handle
 1929	                mov     ah,3Eh
 1930	                int     21h
 1931	                jc      PA_Error
 1932	                mov     GetKeyParams.RK_ErrPtr,offset PrintAsmOkMes
 1933	                GetLineService _GL_ClrBuff
 1934	                clc
 1935	PA_Ret:         pop     ds
 1936	                call    SOD4eraperP
 1937	                ret
 1938	PA_Error:       mov     GetKeyParams.RK_ErrPtr,offset PrintAsmErrMes
 1939	                mov     ch,cs:GetLineParams.GL_BegPrint
 1940	                mov     cl,cs:GetLineParams.GL_Pos
 1941	                inc     cl
 1942	                stc
 1943	                jmp     PD_Ret
 1944	
 1945	
 1946	
 1947	PD_GetScreen:   push    si ds es
 1948	                mov     ax,seg Screen
 1949	                mov     ds,ax
 1950	                mov     si,offset Screen + 25*80*2 + 4
 1951	                push    cs
 1952	                pop     es
 1953	                mov     di,offset PD_Line
 1954	                cld
 1955	PD_GS_MoveLoop: lodsw
 1956	                stosb
 1957	                loop    PD_GS_MoveLoop
 1958	                pop     es ds si
 1959	                ret
 1960	
 1961	
 1962	
 1963	PD_ClearLine:   push    ax cx di es
 1964	                push    cs
 1965	                pop     es
 1966	                mov     di,offset PD_Line
 1967	                mov     al,' '
 1968	                mov     cx,80
 1969	                cld
 1970	        rep     stosb
 1971	                mov     cx,seg Screen
 1972	                mov     es,cx
 1973	                mov     di,offset Screen + 25*80*2
 1974	                mov     cx,70*2
 1975	        rep     stosb
 1976	                pop     es di cx ax
 1977	                ret
 1978	
 1979	PL_cr           db      0Dh,0Ah
 1980	PD_PrintLine:   push    ax bx cx dx ds
 1981	                push    cs
 1982	                pop     ds
 1983	                mov     bx,offset PD_Line + 79
 1984	                mov     cx,80
 1985	PD_PL_Loop:     cmp     byte ptr cs:[bx],' '
 1986	                jne     PD_PL_Cont
 1987	                dec     bx
 1988	                dec     cx
 1989	                jnz     PD_PL_Loop
 1990	PD_PL_Cont:     mov     bx,cs:PD_Handle
 1991	                mov     dx,offset PD_Line
 1992	                mov     ah,40h
 1993	                int     21h
 1994	                jc      PD_PL_Err
 1995	                cmp     ax,cx
 1996	                jne     PD_PL_Err
 1997	                mov     dx,offset PL_cr
 1998	                mov     cx,2
 1999	                mov     ah,40h
 2000	                int     21h
 2001	                jc      PD_PL_Err
 2002	                cmp     ax,cx
 2003	                jne     PD_PL_Err
 2004	                clc
 2005	PD_PL_Ret:      pop     ds dx cx bx ax
 2006	                ret
 2007	PD_PL_Err:      stc
 2008	                jmp     PD_PL_Ret
 2009	
 2010	PD_PrintByte:   push    ax bx dx
 2011	                xor     bx,bx
 2012	                mov     bl,dl
 2013	                mov     dx,ax
 2014	                shr     al,4
 2015	                cmp     al,0Ah
 2016	                cmc
 2017	                adc     al,30h
 2018	                daa
 2019	                mov     cs:PD_Line[bx],al
 2020	                mov     al,dl
 2021	                and     al,00001111b
 2022	                cmp     al,0Ah
 2023	                cmc
 2024	                adc     al,30h
 2025	                daa
 2026	                mov     cs:PD_Line+1[bx],al
 2027	                mov     dl,bl
 2028	                pop     dx bx ax
 2029	                add     dl,2
 2030	                ret
 2031	
 2032	PD_PrintSymbol: push    bx
 2033	                xor     bx,bx
 2034	                mov     bl,dl
 2035	                mov     cs:PD_Line[bx],al
 2036	                inc     dl
 2037	                pop     bx
 2038	                ret
 2039	
 2040	
 2041	
 2042	
 2043	; -- Sound ON/OFF ----------------------
 2044	
 2045	SoundOnOff:     call    OnOff
 2046	                jc      SOO_ret
 2047	                mov     ax,offset C030r
 2048	                mov     bx,offset C030w
 2049	                jnz     SOO_go
 2050	                mov     ax,offset C020r
 2051	                mov     bx,offset C020w
 2052	SOO_go:         push    es
 2053	                mov     cx,ss
 2054	                mov     es,cx
 2055	                mov     cx,16
 2056	                mov     di,offset C0xxRead + 2*30h
 2057	                cld
 2058	        rep     stosw
 2059	                mov     ax,bx
 2060	                mov     cx,16
 2061	                mov     di,offset C0xxWrite + 2*30h
 2062	        rep     stosw
 2063	                pop     es
 2064	                call    ShowPrevIns
 2065	                GetLineService _GL_ClrBuff
 2066	SOO_ret:        ret
 2067	
 2068	
 2069	
 2070	RecordLen       equ     1000h
 2071	                db      0
 2072	RecordBuffer    dw      RecordLen dup (0)
 2073	REC_Realtime    db      0
 2074	
 2075	; -- Start Recording -------------------
 2076	
 2077	RecordStart:    GetLineService _GL_GetSymb
 2078	                call    Upcase
 2079	                or      al,al
 2080	                jz      RS_ok
 2081	                cmp     al,'f'
 2082	                je      RS_ok
 2083	                mov     cs:GetKeyParams.RK_ErrPtr,offset BadParam
 2084	                ret
 2085	RS_ok:          mov     cs:REC_Realtime,al
 2086	                push    es
 2087	                push    cs
 2088	                pop     es
 2089	                mov     di,offset RecordBuffer - 1
 2090	                mov     cx,RecordLen - 2
 2091	                call    StartRecord
 2092	                pop     es
 2093	                GetLineService _GL_ClrBuff
 2094	;                 call    GoAppleII0
 2095	                ret
 2096	
 2097	
 2098	; -- Stop Recording --------------------
 2099	
 2100	RecordStop:     call    StopRecord
 2101	                mov     cs:GetKeyParams.RK_ErrPtr,offset RecPlayedMes
 2102	                or      cx,cx
 2103	                jz      RS_1
 2104	                cmp     cx,RecordLen - 2
 2105	                je      RS_1
 2106	                mov     cs:GetKeyParams.RK_ErrPtr,offset RecordedMes
 2107	RS_1:           cmp     cs:REC_Realtime,0
 2108	                jz      RS_xit
 2109	                push    es
 2110	                push    cs
 2111	                pop     es
 2112	                mov     di,offset RecordBuffer + 1
 2113	                mov     cx,RecordLen
 2114	                mov     al,1
 2115	                cld
 2116	RS_Loop:        stosb
 2117	                inc     di
 2118	                loop    RS_Loop
 2119	                pop     es
 2120	RS_xit:         GetLineService _GL_ClrBuff
 2121	                ret
 2122	
 2123	
 2124	; -- Play Recording --------------------
 2125	
 2126	RecordPlay:     GetLineService _GL_GetSymb
 2127	                dec     cl
 2128	                or      al,al
 2129	                jz      RP_Play
 2130	                call    LoadRec
 2131	RP_Play:        push    ds
 2132	                push    cs
 2133	                pop     ds
 2134	                mov     si,offset RecordBuffer
 2135	                clc
 2136	                call    SimKbdRq
 2137	                pop     ds
 2138	                GetLineService _GL_ClrBuff
 2139	;                 call    GoAppleII0
 2140	                ret
 2141	
 2142	
 2143	; -- Load Record -----------------------
 2144	
 2145	LoadRec:        GetLineService _GL_GetSymb              ; 'LR' command
 2146	                dec     cl
 2147	                or      al,al
 2148	                jnz     LR_E0
 2149	                GetLineService _GL_ClrBuff
 2150	                mov     bx,offset Com_LRecord
 2151	                GetLineService _GL_String
 2152	                mov     al,' '
 2153	                GetLineService _GL_Symbol
 2154	                mov     bx,offset REC_FileSpec
 2155	                GetLineService _GL_String
 2156	                GetLineService _GL_Home
 2157	                xor     ch,ch
 2158	                mov     cl,4
 2159	                mov     cs:GetKeyParams.RK_ErrPtr,offset LR_EnterMes1
 2160	                ret
 2161	LR_E0:          mov     byte ptr cs:LS_OpenFileF,3Dh
 2162	                mov     byte ptr cs:LS_RWfileF,3Fh
 2163	                mov     word ptr cs:LS_ErrPtr,offset RecErrMes_L
 2164	                mov     word ptr cs:LS_OkPtr,offset RecMes_L
 2165	                mov     word ptr cs:LS_FileSpec,offset REC_FileSpec
 2166	                mov     word ptr cs:LS_Ext,offset REC_Ext
 2167	                mov     word ptr cs:LS_Buffer,offset RecordBuffer
 2168	                mov     word ptr cs:LS_BufferLen,RecordLen * 2
 2169	                jmp     File_LS
 2170	
 2171	
 2172	; -- Save Record -----------------------
 2173	
 2174	REC_FileSpec    db      'UNTITLED.REC', 67 dup (0)
 2175	REC_Ext         db      '.REC',0
 2176	SaveRec:        GetLineService _GL_GetSymb
 2177	                dec     cl
 2178	                or      al,al
 2179	                jnz     SR_E0
 2180	                GetLineService _GL_ClrBuff
 2181	                mov     bx,offset Com_SRecord
 2182	                GetLineService _GL_String
 2183	                mov     al,' '
 2184	                GetLineService _GL_Symbol
 2185	                mov     bx,offset REC_FileSpec
 2186	                GetLineService _GL_String
 2187	                GetLineService _GL_Home
 2188	                xor     ch,ch
 2189	                mov     cl,4
 2190	                mov     cs:GetKeyParams.RK_ErrPtr,offset SR_EnterMes2
 2191	                ret
 2192	SR_E0:          mov     byte ptr cs:LS_OpenFileF,3Ch
 2193	                mov     byte ptr cs:LS_RWfileF,40h
 2194	                mov     word ptr cs:LS_ErrPtr,offset RecErrMes_S
 2195	                mov     word ptr cs:LS_OkPtr,offset RecMes_S
 2196	                mov     word ptr cs:LS_FileSpec,offset REC_FileSpec
 2197	                mov     word ptr cs:LS_Ext,offset REC_Ext
 2198	                mov     word ptr cs:LS_Buffer,offset RecordBuffer
 2199	                mov     word ptr cs:LS_BufferLen,RecordLen * 2
 2200	                jmp     File_LS
 2201	
 2202	
 2203	
 2204	
 2205	; *******************************************************************
 2206	; **                                                               **
 2207	; **                                                               **
 2208	; **                     COMMANDS  SUBROUTINES                     **
 2209	; **                                                               **
 2210	; **                                                               **
 2211	; *******************************************************************
 2212	
 2213	
 2214	; -- Memory Editor ---------------------
 2215	
 2216	EB_ParamsAddr   dw      ?
 2217	OldCurLen       db      ?
 2218	EB_Commands     db      07h,08h,05h,0Bh,06h,20h
 2219	                db      01h,02h,03h,04h,0Dh
 2220	                db      18h,0Ch
 2221	EB_ComSubrt     dw      EB_Up,EB_Down,EB_Left,EB_Left,EB_Right,EB_Space
 2222	                dw      EB_Home,EB_End,EB_PgUp,EB_PgDn,EB_Tab
 2223	                dw      EB_Enter,EB_Esc
 2224	
 2225	EB_Init:        push    ax bx
 2226	                mov     al,cs:[si].EB_MinUp
 2227	                mov     cs:[si].EB_TextCH,al
 2228	                mov     al,cs:[si].EB_MinLeft1
 2229	                mov     cs:[si].EB_TextCL2,al
 2230	                mov     al,cs:[si].EB_MinLeft2
 2231	                mov     cs:[si].EB_TextCL1,al
 2232	                mov     bx,cs:[si].EB_MemAdr
 2233	                mov     ax,cs:[bx]
 2234	                mov     cs:[si].EB_Address,ax
 2235	                pop     bx ax
 2236	                ret
 2237	
 2238	EB_Lcx:         mov     cl,cs:[si].EB_TextCL1
 2239	                mov     cs:ScreenIOparams.CursorLen,1
 2240	                cmp     cs:[si].EB_TextOrHex,0
 2241	                jnz     EB_Lcx1
 2242	                mov     cl,cs:[si].EB_TextCL2
 2243	                mov     cs:ScreenIOparams.CursorLen,4
 2244	EB_Lcx1:        mov     ch,cs:[si].EB_TextCH
 2245	                ret
 2246	
 2247	MemoryEditor:   mov     si,cs:EB_ParamsAddr
 2248	                mov     al,cs:ScreenIOparams.CursorLen
 2249	                mov     cs:OldCurLen,al
 2250	                mov     cs:ScreenIOparams.CursorColor,40h
 2251	                mov     cs:[si].EB_FirstFl,1
 2252	                mov     bx,cs:[si].EB_MemAdr
 2253	                GetLineService _GL_GetSymb
 2254	                dec     cl
 2255	                or      al,al
 2256	                jz      EB_Loop0
 2257	                call    GetAddress
 2258	                mov     cs:[bx],ax
 2259	                call    EB_Init
 2260	
 2261	EB_Loop0:       call    EB_Lcx
 2262	                mov     ah,0Bh
 2263	                call    ReadKey
 2264	                mov     di,offset EB_Commands
 2265	                mov     cx,offset EB_ComSubrt - offset EB_Commands
 2266	                call    CalcCommand
 2267	                jc      EB_CallDoIt
 2268	                shl     di,1
 2269	                call    cs:EB_ComSubrt[di]
 2270	                mov     cs:[si].EB_FirstFl,1
 2271	                jnc     EB_Loop0
 2272	
 2273	EB_ret:         mov     al,cs:OldCurLen
 2274	                mov     cs:ScreenIOparams.CursorLen,al
 2275	                GetLineService _GL_ClrBuff
 2276	                ret
 2277	
 2278	EB_CallDoIt:    call    EB_DoIt
 2279	                jmp     EB_Loop0
 2280	
 2281	EB_DoIt:        push    ax bx di
 2282	                cmp     cs:[si].EB_TextOrHex,0
 2283	                jnz     EB_DoText
 2284	                or      al,20h
 2285	                cmp     al,'0'
 2286	                jb      EB_DoItRet2
 2287	                cmp     al,'9'
 2288	                jbe     E_Num
 2289	                cmp     al,'a'
 2290	                jb      EB_DoItRet2
 2291	                cmp     al,'f'
 2292	                ja      EB_DoItRet2
 2293	                sub     al,27h
 2294	E_Num:          sub     al,'0'
 2295	                mov     di,cs:[si].EB_Address
 2296	                mov     bh,[di]
 2297	                test    cs:[si].EB_FirstFl,1
 2298	                jz      EB_NotNew
 2299	                xor     bh,bh
 2300	EB_NotNew:      shl     bh,4
 2301	                or      bh,al
 2302	                mov     [di],bh
 2303	EB_DoItRet:     test    cs:[si].EB_FirstFL,1
 2304	                jnz     EB_DoItRet1
 2305	                call    EB_Right
 2306	EB_DoItRet1:    xor     cs:[si].EB_FirstFl,1
 2307	EB_DoItRet2:    pop     di bx ax
 2308	                ret
 2309	
 2310	EB_DoText:      mov     di,cs:[si].EB_Address
 2311	                or      al,80h
 2312	                mov     [di],al
 2313	                call    EB_Right
 2314	                jmp     EB_DoItRet2
 2315	
 2316	
 2317	EB_Space:       cmp     cs:[si].EB_TextOrHex,0
 2318	                jz      EB_Right
 2319	                call    EB_DoIt
 2320	                clc
 2321	                ret
 2322	
 2323	EB_Right:       push    ax bx cx
 2324	                mov     bx,cs:[si].EB_MemAdr
 2325	                mov     cl,cs:[si].EB_TextCL2
 2326	                mov     al,cs:[si].EB_TextCL1
 2327	                mov     ch,cs:[si].EB_TextCH
 2328	                cmp     cl,cs:[si].EB_Center
 2329	                jne     EB_R0
 2330	                inc     cl
 2331	                inc     al
 2332	EB_R0:          add     cl,3
 2333	                inc     al
 2334	                cmp     cl,cs:[si].EB_MaxRight1
 2335	                ja      EB_R1
 2336	                inc     cs:[si].EB_Address
 2337	                jmp     EB_R3
 2338	EB_R1:          mov     cl,cs:[si].EB_MinLeft1
 2339	                mov     al,cs:[si].EB_MinLeft2
 2340	                inc     ch
 2341	                cmp     ch,cs:[si].EB_MaxDown
 2342	                ja      EB_R2
 2343	                inc     cs:[si].EB_Address
 2344	                jmp     EB_R3
 2345	EB_R2:          push    ax
 2346	                mov     ax,cs:[bx]
 2347	                add     ax,cs:[si].EB_BytesInLine
 2348	                mov     cs:[bx],ax
 2349	                call    cs:[si].EB_InitBuffProc
 2350	                pop     ax
 2351	                inc     cs:[si].EB_Address
 2352	                mov     ch,cs:[si].EB_MaxDown
 2353	EB_R3:          mov     cs:[si].EB_TextCL2,cl
 2354	                mov     cs:[si].EB_TextCL1,al
 2355	                mov     cs:[si].EB_TextCH,ch
 2356	                pop     cx bx ax
 2357	                clc
 2358	                ret
 2359	
 2360	EB_Left:        push    ax bx cx
 2361	                mov     bx,cs:[si].EB_MemAdr
 2362	                mov     cl,cs:[si].EB_TextCL2
 2363	                mov     al,cs:[si].EB_TextCL1
 2364	                mov     ch,cs:[si].EB_TextCH
 2365	                sub     cl,3
 2366	                dec     al
 2367	                mov     ah,cs:[si].EB_Center
 2368	                inc     ah
 2369	                cmp     cl,ah
 2370	                jne     EB_L0
 2371	                dec     cl
 2372	                dec     al
 2373	EB_L0:          cmp     cl,cs:[si].EB_MinLeft1
 2374	                jb      EB_L1
 2375	                dec     cs:[si].EB_Address
 2376	                jmp     EB_L3
 2377	EB_L1:          mov     cl,cs:[si].EB_MaxRight1
 2378	                mov     al,cs:[si].EB_MaxRight2
 2379	                dec     ch
 2380	                cmp     ch,cs:[si].EB_MinUp
 2381	                jb      EB_L2
 2382	                dec     cs:[si].EB_Address
 2383	                jmp     EB_L3
 2384	EB_L2:          push    ax
 2385	                mov     ax,cs:[bx]
 2386	                sub     ax,cs:[si].EB_BytesInLine
 2387	                mov     cs:[bx],ax
 2388	                call    cs:[si].EB_InitBuffProc
 2389	                pop     ax
 2390	                dec     cs:[si].EB_Address
 2391	                mov     ch,cs:[si].EB_MinUp
 2392	EB_L3:          mov     cs:[si].EB_TextCL2,cl
 2393	                mov     cs:[si].EB_TextCL1,al
 2394	                mov     cs:[si].EB_TextCH,ch
 2395	                pop     cx bx ax
 2396	                clc
 2397	                ret
 2398	
 2399	EB_Up:          push    ax bx cx
 2400	                mov     bx,cs:[si].EB_MemAdr
 2401	                mov     ax,cs:[si].EB_BytesInLine
 2402	                call    EB_Lcx
 2403	                dec     ch
 2404	                cmp     ch,cs:[si].EB_MinUp
 2405	                jae     EB_U1
 2406	                mov     ch,cs:[si].EB_MinUp
 2407	                sub     cs:[bx],ax
 2408	                call    cs:[si].EB_InitBuffProc
 2409	EB_U1:          sub     cs:[si].EB_Address,ax
 2410	EB_U2:          mov     cs:[si].EB_TextCH,ch
 2411	                pop     cx bx ax
 2412	                clc
 2413	                ret
 2414	
 2415	EB_Down:        push    ax bx cx
 2416	                mov     bx,cs:[si].EB_MemAdr
 2417	                mov     ax,cs:[si].EB_BytesInLine
 2418	                call    EB_Lcx
 2419	                inc     ch
 2420	                cmp     ch,cs:[si].EB_MaxDown
 2421	                jbe     EB_D1
 2422	                mov     ch,cs:[si].EB_MaxDown
 2423	                add     cs:[bx],ax
 2424	                call    cs:[si].EB_InitBuffProc
 2425	EB_D1:          add     cs:[si].EB_Address,ax
 2426	EB_D2:          mov     cs:[si].EB_TextCH,ch
 2427	                pop     cx bx ax
 2428	                clc
 2429	                ret
 2430	
 2431	EB_Tab:         test    cs:[si].EB_TabFlag,1
 2432	                jz      EB_TabRet
 2433	                xor     cs:[si].EB_TextOrHex,0FFh
 2434	                mov     cs:[si].EB_FirstFl,1
 2435	EB_TabRet:      clc
 2436	                ret
 2437	
 2438	EB_PgUp:        push    bx
 2439	                mov     bx,cs:[si].EB_MemAdr
 2440	                sub     cs:[si].EB_Address, 4 * 16
 2441	                sub     word ptr cs:[bx], 4 * 16
 2442	                call    cs:[si].EB_InitBuffProc
 2443	                clc
 2444	                pop     ax
 2445	                ret
 2446	
 2447	EB_PgDn:        push    bx
 2448	                mov     bx,cs:[si].EB_MemAdr
 2449	                add     cs:[si].EB_Address, 4 * 16
 2450	                add     word ptr cs:[bx], 4 * 16
 2451	                call    cs:[si].EB_InitBuffProc
 2452	                clc
 2453	                pop     bx
 2454	                ret
 2455	
 2456	EB_Home:        push    ax
 2457	                mov     al,cs:[si].EB_MinLeft1
 2458	EB_H0:          cmp     cs:[si].EB_TextCL2,al
 2459	                je      EB_H1
 2460	                call    EB_Left
 2461	                jmp     EB_H0
 2462	EB_H1:          mov     al,cs:[si].EB_MinUp
 2463	EB_H2:          cmp     cs:[si].EB_TextCH,al
 2464	                je      EB_H3
 2465	                call    EB_Up
 2466	                jmp     EB_H2
 2467	EB_H3:          pop     ax
 2468	                clc
 2469	                ret
 2470	
 2471	EB_End:         push    ax
 2472	                mov     al,cs:[si].EB_MaxRight1
 2473	EB_E0:          cmp     cs:[si].EB_TextCL2,al
 2474	                je      EB_E1
 2475	                call    EB_Right
 2476	                jmp     EB_E0
 2477	EB_E1:          mov     al,cs:[si].EB_MaxDown
 2478	EB_E2:          cmp     cs:[si].EB_TextCH,al
 2479	                je      EB_E3
 2480	                call    EB_Down
 2481	                jmp     EB_E2
 2482	EB_E3:          pop     ax
 2483	                clc
 2484	                ret
 2485	
 2486	EB_Esc:
 2487	EB_Enter:       stc
 2488	                ret
 2489	
 2490	
 2491	
 2492	
 2493	; -- Save/Load labels ------------------
 2494	
 2495	LS_Ext          dw      ?
 2496	LS_FileSpec     dw      ?
 2497	LS_StoreCX      dw      ?
 2498	LS_OpenFileF    db      ?
 2499	LS_RWfileF      db      ?
 2500	LS_ErrPtr       dw      ?
 2501	LS_OkPtr        dw      ?
 2502	LS_Buffer       dw      ?
 2503	LS_BufferLen    dw      ?
 2504	
 2505	File_LS:        call    Prepare4DOS
 2506	                push    cx ds
 2507	                mov     bx,cs:LS_FileSpec
 2508	                mov     dx,79
 2509	LAB_LS_0:       GetLineService _GL_GetSymb
 2510	                mov     byte ptr cs:[bx],al
 2511	                inc     bx
 2512	                dec     dx
 2513	                jz      LAB_LS_1
 2514	                or      al,al
 2515	                jnz     LAB_LS_0
 2516	LAB_LS_1:       push    ds
 2517	                push    cs
 2518	                pop     ds
 2519	                mov     si,cs:LS_Ext
 2520	                mov     di,cs:LS_FileSpec
 2521	                call    AddExt
 2522	                pop     ds
 2523	                mov     cs:LS_StoreCX,cx
 2524	                push    cs
 2525	                pop     ds
 2526	                mov     dx,cs:LS_FileSpec
 2527	                xor     cx,cx
 2528	                mov     ah,cs:LS_OpenFileF
 2529	                xor     al,al
 2530	                int     21h
 2531	                jc      LAB_LS_Err1
 2532	                mov     bx,ax
 2533	                mov     dx,cs:LS_Buffer
 2534	                mov     cx,cs:LS_BufferLen
 2535	                mov     ah,cs:LS_RWfileF
 2536	                int     21h
 2537	                jc      LAB_LS_Err
 2538	                cmp     ax,cx
 2539	                jne     LAB_LS_Err
 2540	                mov     ah,3Eh
 2541	                int     21h
 2542	                pop     ds cx
 2543	                mov     ax,cs:LS_OkPtr
 2544	                mov     cs:GetKeyParams.RK_ErrPtr,ax
 2545	                call    SOD4eraperP
 2546	                GetLineService _GL_ClrBuff
 2547	                clc
 2548	                ret
 2549	LAB_LS_Err:     mov     ah,3Eh
 2550	                int     21h
 2551	LAB_LS_Err1:    pop     ds cx
 2552	                mov     ax,cs:LS_ErrPtr
 2553	                mov     cs:GetKeyParams.RK_ErrPtr,ax
 2554	                mov     cx,cs:LS_StoreCX
 2555	                call    SOD4eraperP
 2556	                inc     cl
 2557	                stc
 2558	                ret
 2559	
 2560	
 2561	
 2562	
 2563	; -- Hook INT 24h ----------------------
 2564	
 2565	Prepare4DOS:    saveall
 2566	                pushf
 2567	                mov     cs:FkeysMainFlag,0
 2568	                call    ShowAll
 2569	                ScreenIOservice _SHOWSCREEN
 2570	                call    far ptr SystemTINI
 2571	                popf
 2572	                restoreall
 2573	                ret
 2574	
 2575	
 2576	
 2577	; -- Unhook INT 24h --------------------
 2578	
 2579	SOD4eraperP:    saveall                         ; Unchain Critical Errors proc
 2580	                pushf
 2581	                mov     cs:FkeysMainFlag,1
 2582	                mov     ax,Emulate
 2583	                mov     es,ax
 2584	                mov     byte ptr [C000],0
 2585	                call    far ptr SystemINIT
 2586	                popf
 2587	                restoreall
 2588	                ret
 2589	
 2590	
 2591	
 2592	
 2593	; -- ON/OFF ----------------------------
 2594	
 2595	OnOff:          push    ax
 2596	                GetLineService _GL_GetSymb
 2597	                call    Upcase
 2598	                cmp     al,'o'
 2599	                jne     OO_Error
 2600	                GetLineService _GL_GetSymb
 2601	                call    Upcase
 2602	                cmp     al,'n'
 2603	                je      OO_On
 2604	                cmp     al,'f'
 2605	                jne     OO_Error
 2606	                GetLineService _GL_GetSymb
 2607	                call    Upcase
 2608	                cmp     al,'f'
 2609	                je      OO_Off
 2610	OO_Error:       mov     cs:GetKeyParams.RK_ErrPtr,offset OnOffMes
 2611	                inc     cl
 2612	                stc
 2613	                jmp     OO_ret
 2614	OO_On:          mov     ax,1
 2615	                or      ax,ax
 2616	                clc
 2617	                jmp     OO_ret
 2618	OO_Off:         xor     ax,ax
 2619	                clc
 2620	OO_ret:         pop     ax
 2621	                ret
 2622	
 2623	
 2624	
 2625	
 2626	; *******************************************************************
 2627	; **                                                               **
 2628	; **                                                               **
 2629	; **                        S H O W    A L L                       **
 2630	; **                                                               **
 2631	; **                                                               **
 2632	; *******************************************************************
 2633	
 2634	ShowAllNumber   dw      0
 2635	ShowAllProcs    dw      SA_Command,SA_EditA,SA_EditB,SA_Program,SA_Regs,SA_Help,SA_Labels
 2636	SA_Command      dw      ShowLabels,ShowProgram,ShowRegs,ShowStack,ShowBreaks,ShowDumpA
 2637	                dw      ShowDumpB,ShowFuncKeys,ShowCommand,ShowMessage
 2638	                dw      ShowLine,ShowHelp
 2639	SA_EditA        dw      ShowLabels,ShowCommand,ShowLine,ShowProgram,ShowMessage,ShowRegs
 2640	                dw      ShowStack,ShowBreaks,ShowDumpB,ShowHelp,ShowFuncKeys
 2641	                dw      ShowDumpA
 2642	SA_EditB        dw      ShowLabels,ShowCommand,ShowLine,ShowProgram,ShowMessage,ShowRegs
 2643	                dw      ShowStack,ShowBreaks,ShowDumpA,ShowHelp,ShowFuncKeys
 2644	                dw      ShowDumpB
 2645	SA_Program      dw      ShowLabels,ShowRegs,ShowStack,ShowBreaks,ShowDumpA,ShowDumpB
 2646	                dw      ShowCommand,ShowHelp,ShowFuncKeys
 2647	                dw      ShowProgram,ShowLine,ShowMessage
 2648	SA_Regs         dw      ShowLabels,ShowCommand,ShowLine,ShowProgram,ShowMessage
 2649	                dw      ShowStack,ShowBreaks,ShowDumpA,ShowDumpB,ShowHelp,ShowFuncKeys
 2650	                dw      ShowRegs
 2651	SA_Help         dw      ShowProgram,ShowRegs,ShowStack,ShowBreaks,ShowDumpA
 2652	                dw      ShowDumpB,ShowCommand,ShowMessage,ShowLine,ShowLabels
 2653	                dw      ShowHelp,ShowFuncKeys
 2654	SA_Labels       dw      ShowStack,ShowBreaks,ShowDumpA,ShowDumpB,ShowCommand,ShowProgram
 2655	                dw      ShowMessage,ShowLine,ShowRegs,ShowHelp,ShowFuncKeys
 2656	                dw      ShowLabels
 2657	
 2658	ActiveFlags     dw      0
 2659	KbdShifts       dw      ?
 2660	ShowAll         proc    far
 2661	                push    bx dx es ds bp
 2662	                push    word ptr cs:ScreenIOparams.CursorColor
 2663	                push    word ptr cs:ScreenIOparams.CursorLen
 2664	                push    word ptr cs:ScreenIOparams.CursorFlag
 2665	                mov     bx,Keyboard
 2666	                mov     es,bx
 2667	                assume  es:Keyboard
 2668	                mov     bx,es:k_Shifts
 2669	                mov     cs:KbdShifts,bx
 2670	                mov     cs:ScreenIOparams.CursorFlag,1
 2671	                mov     bx,Emulate
 2672	                mov     es,bx
 2673	                mov     bx,Apple
 2674	                mov     ds,bx
 2675	                mov     dx,12
 2676	                mov     bx,cs:ShowAllNumber
 2677	                shl     bx,1
 2678	                mov     bx,cs:ShowAllProcs[bx]
 2679	SA_Loop:        call    cs:[bx]
 2680	                add     bx,2
 2681	                dec     dx
 2682	                jnz     SA_Loop
 2683	                pop     word ptr cs:ScreenIOparams.CursorFlag
 2684	                pop     word ptr cs:ScreenIOparams.CursorLen
 2685	                pop     word ptr cs:ScreenIOparams.CursorColor
 2686	                pop     bp ds es dx bx
 2687	                ret
 2688	ShowAll         endp
 2689	
 2690	
 2691	; -- Draw box --------------------------
 2692	; Entry:
 2693	;  AH  = Active Flag Bit
 2694	;  CX  = HTAB & VTAB
 2695	;  BX  = Offset of the strings
 2696	;  DL  = Length of the box line - 1
 2697	;  DH  = Number of lines - 1
 2698	; Destroy:
 2699	;  AX,BX,CX,DX
 2700	DB_CX           dw      ?
 2701	DrawBox:        push    ax
 2702	                mov     ax,cx
 2703	                add     ax,80 * 2
 2704	                mov     cs:DB_CX,ax
 2705	                pop     ax
 2706	                test    cs:ActiveFlags,ax
 2707	                mov     ah,7
 2708	                jz      DB_ok1
 2709	                mov     ah,0Eh
 2710	DB_ok1:         ScreenIOservice _STRINGPRINT
 2711	                mov     bx,cs:ScreenIOparams.SP_bx
 2712	                dec     dh
 2713	                mov     al,dh
 2714	                mov     dx,cs:DB_CX
 2715	DB_Loop1:       mov     cx,dx
 2716	                add     dx,80 * 2
 2717	                ScreenIOservice _STRINGPRINT
 2718	                dec     al
 2719	                jnz     DB_Loop1
 2720	                mov     cx,dx
 2721	                mov     bx,cs:ScreenIOparams.SP_bx
 2722	                ScreenIOservice _STRINGPRINT
 2723	                ret
 2724	
 2725	
 2726	
 2727	; --------------------------------------------------------------------------
 2728	; - SHOW  LINE
 2729	
 2730	ShowLine:       ScreenIOservice _SHOWLINE
 2731	                ret
 2732	
 2733	; --------------------------------------------------------------------------
 2734	; - SHOW MESSAGE
 2735	
 2736	SM_Dec?         db      0
 2737	ShowMessage:    push    ax bx cx
 2738	                gotoxy  16,0
 2739	                mov     bx,offset SP_Str3
 2740	                test    cs:ActiveFlags,0000000000000010b
 2741	                mov     ah,0Eh
 2742	                jnz     SM_ok1
 2743	                mov     ah,7
 2744	SM_ok1:         ScreenIOservice _STRINGPRINT
 2745	                mov     bx,cs:GetKeyParams.RK_ErrPtr
 2746	                or      bx,bx
 2747	                jz      SM_Ret
 2748	                gotoxy  16,1
 2749	                mov     ah,0Ch
 2750	                ScreenIOservice _STRINGPRINT
 2751	                cmp     cs:SM_Dec?,0
 2752	                jz      SM_Ret
 2753	                pop     cx
 2754	                dec     cl
 2755	                push    cx
 2756	SM_Ret:         pop     cx bx ax
 2757	                ret
 2758	
 2759	FirstMsg        db      1,0Ah,'Appler Debugger, v1.0',0
 2760	UnknownCmd      db      'Unknown command',0
 2761	IllegalNum      db      'Bad address or number',0
 2762	NotHexMes       db      'Hex digit expected',0
 2763	NotBinMes       db      'Bin digit expected',0
 2764	NotDecMes       db      'Dec digit expected',0
 2765	BigNumMes       db      'Address or number is too big',0
 2766	NumbMissMes     db      'Address or number expected',0
 2767	BadInstr        db      'Bad instruction',0
 2768	BadParam        db      'Bad or missing parameter',0
 2769	NoStringMes     db      'Search string expected',0
 2770	ByteExpMes      db      'Byte expected',0
 2771	NotFound        db      'String not found',0
 2772	NotIdent        db      'Different byte found',0
 2773	Identifical     db      1,0Ah,'Bytes are identical',0
 2774	AdressError     db      'End below begin',0
 2775	LS_EnterMes1    db      1,0Ah,'<Enter> to load labels',0
 2776	LabMes_L        db      1,0Ah,'Labels loaded',0
 2777	LabErrMes_L     db      'Error loading labels',0
 2778	LS_EnterMes2    db      1,0Ah,'<Enter> to save labels',0
 2779	LabMes_S        db      1,0Ah,'Labels saved',0
 2780	LabErrMes_S     db      'Error saving labels',0
 2781	EqualMess       db      '''='' expected',0
 2782	BreakNumMES     db      'Breakpoint number expected',0
 2783	SymMissErr      db      'Identifier expected',0
 2784	SymNoMemErr     db      'No memory to define this label',0
 2785	SymNotFndErr    db      'Label not defined',0
 2786	SymNoSymbErr    db      'No labels defined',0
 2787	OnOffMes        db      'ON or OFF expected',0
 2788	GA_PlusMes      db      1,7,'Carry',0
 2789	GA_MinusMes     db      1,7,'Borrow',0
 2790	GA_MulMes       db      1,7,'Overflow',0
 2791	ZeroDivMes      db      'Division by zero',0
 2792	GA_DivMes       db      1,0Ah,'Remainder='
 2793	GA_DivRest      db      '0000',1,7,' (truncated)',0
 2794	ExecutingMes    db      1,8Ah,'Executing',0
 2795	ToRTSmes        db      1,8Ah,'Executing to RTS...',0
 2796	InvalidOpcode   db      1,8Ch,'Unexpected Breakpoint',0
 2797	BreakpointMes   db      1,0Ch,'Breakpoint '
 2798	BreakpointNum   db      '? reached',0
 2799	PrintingMes     db      1,8Ah,'Printing',0
 2800	PrintOkMes      db      1,0Ah,'Memory Dump Printed OK',0
 2801	PrintErrMes     db      'Error printing Memory Dump',0
 2802	PrintAsmOkMes   db      1,0Ah,'Program Printed OK',0
 2803	PrintAsmErrMes  db      'Error printing Program',0
 2804	LR_EnterMes1    db      1,0Ah,'<Enter> to load macro',0
 2805	RecMes_L        db      1,0Ah,'Macro loaded',0
 2806	RecErrMes_L     db      'Error loading macro',0
 2807	SR_EnterMes2    db      1,0Ah,'<Enter> to save macro',0
 2808	RecMes_S        db      1,0Ah,'Macro saved',0
 2809	RecErrMes_S     db      'Error saving Macro',0
 2810	RecPlayedMes    db      1,0Ah,'Macro played',0
 2811	RecordedMes     db      1,0Ah,'Macro recorded',0
 2812	
 2813	; --------------------------------------------------------------------------
 2814	; - SHOW COMMAND
 2815	
 2816	ShowCommand:    push    ax cx
 2817	                gotoxy  17,0
 2818	                mov     ax,0700h+'>'
 2819	                ScreenIOservice _SYMBPRINT
 2820	SCM_Ret:        pop     cx ax
 2821	                ret
 2822	
 2823	; --------------------------------------------------------------------------
 2824	; - SHOW PROGRAM
 2825	
 2826	AssembAdr       dw      0                       ; This is the start address.
 2827	AssembAdr1      dw      0
 2828	ShowPrev?       db      0
 2829	PrevAdr         dw      ?
 2830	SP_Str          db      'ÚProgramÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
 2831	                db      '³                               ³',0
 2832	SP_Str3         db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
 2833	SP_CursorXY     dw      401h
 2834	ShowProgram:    push    ax bx cx dx si es
 2835	                gotoxy  1,0
 2836	                mov     bx,offset SP_Str
 2837	                mov     dx,0F22h
 2838	                mov     ax,0000000000000010b
 2839	                call    DrawBox
 2840	                test    cs:ShowPrev?,1
 2841	                jz      SP_Dont
 2842	                gotoxy  3,2
 2843	                mov     si,cs:PrevAdr
 2844	                call    OneInstr
 2845	SP_Dont:        mov     si,cs:AssembAdr
 2846	                gotoxy  4,2
 2847	                mov     dx,12
 2848	                mov     cs:CalcFlag,1
 2849	AsmLoop0:       call    OneInstr
 2850	                mov     cs:CalcFlag,0
 2851	                add     cx,80 * 2
 2852	                dec     dx
 2853	                jnz     ASMLoop0
 2854	                mov     cs:AssembAdr1,si
 2855	                mov     cx,cs:SP_CursorXY
 2856	                mov     cs:ScreenIOparams.CursorColor,10h
 2857	                mov     cs:ScreenIOparams.CursorLen,31
 2858	                ScreenIOservice _SHOWCURSOR
 2859	                gotoxy  1,1
 2860	                mov     ax,0E00h+'P'
 2861	                cmp     cs:FkeysMainFlag,0
 2862	                jz      SP_Ret
 2863	                ScreenIOservice _SYMBPRINT
 2864	SP_Ret:         pop     es si dx cx bx ax
 2865	                ret
 2866	                assume  es:Emulate
 2867	
 2868	
 2869	; -- Scroll Program Window DOWN --------
 2870	
 2871	UP:             push    cx ax bx si             ; Scrolls ASM window down.
 2872	                mov     si,cs:AssembAdr
 2873	                call    PrevInstAdr
 2874	                jnc     UP_0
 2875	                dec     si
 2876	UP_0:           mov     cs:AssembAdr,si
 2877	                call    PrevInstAdr
 2878	                jnc     UP_1
 2879	                dec     si
 2880	UP_1:           mov     cs:PrevAdr,si
 2881	                call    BuffDisasm
 2882	                clc
 2883	                mov     cs:ShowPrev?,1
 2884	                pop     si bx ax cx
 2885	                ret
 2886	
 2887	
 2888	; -- Scroll Program Window UP ----------
 2889	
 2890	DOWN:           push    si ax cx
 2891	                mov     si,cs:AssembAdr
 2892	                mov     cs:ShowPrev?,1
 2893	                mov     cs:PrevAdr,si
 2894	                gotoxy  7,2
 2895	                call    OneInstr
 2896	                mov     cs:AssembAdr,si
 2897	                call    BuffDisasm
 2898	                pop     cx ax si
 2899	                ret
 2900	
 2901	
 2902	; -- Calc Previous Instruction Adr -----
 2903	; Entry:
 2904	;  SI  = Start_Address
 2905	; Exit:
 2906	;  SI  = Previous Instruction Address
 2907	;  CF  = 1 if can't or 0 otherwise
 2908	
 2909	PIA_Counter     =       25
 2910	PIA_BegAdr      dw      ?
 2911	PIA_Adr         dw      ?
 2912	PrevInstAdr:    push    ax bx                   ; I: SI -> Address. O: SI <- PrevInstAdr
 2913	                mov     cs:PIA_BegAdr,si
 2914	                sub     si,PIA_Counter
 2915	PIA_Loop0:      mov     cs:PIA_adr,si
 2916	PIA_Loop1:      xor     bx,bx
 2917	                mov     bl,[si]
 2918	                mov     al,cs:InstrLongTbl[bx]
 2919	                test    al,00000100b
 2920	                jz      PIA_Valid
 2921	PIA_Next:       mov     si,cs:PIA_adr
 2922	                inc     si
 2923	                cmp     si,cs:PIA_BegAdr
 2924	                je      PIA_Cannot
 2925	                jmp     PIA_Loop0
 2926	PIA_Valid:      xor     ah,ah
 2927	                and     al,00000011b
 2928	                add     ax,si
 2929	                cmp     ax,cs:PIA_BegAdr
 2930	                ja      PIA_Next
 2931	                je      PIA_End
 2932	                mov     si,ax
 2933	                jmp     PIA_Loop1
 2934	PIA_End:        clc
 2935	PIA_End1:       pop     bx ax
 2936	                ret
 2937	PIA_Cannot:     stc
 2938	                jmp     PIA_End1
 2939	
 2940	
 2941	; -- Show Previous Instruction ---------
 2942	
 2943	ShowPrevIns:    push    cx si
 2944	                mov     si,cs:AssembAdr
 2945	                call    PrevInstAdr
 2946	                jnc     SPI_ok
 2947	                dec     si
 2948	SPI_ok:         mov     cs:ShowPrev?,1
 2949	                mov     cs:PrevAdr,si
 2950	                pop     si cx
 2951	                ret
 2952	
 2953	
 2954	; -- Show One Instruction --------------
 2955	; Entry:
 2956	;  SI  = Start_Address
 2957	;  CH  = VTAB
 2958	; Exit:
 2959	;  SI  = Next Instruction Address
 2960	
 2961	OI_ClrStr:      db      '                             ',0
 2962	CalcFlag        db      0
 2963	OI_StoreCX      dw      ?
 2964	OneInstr:       push    ax bx cx dx
 2965	                mov     cs:OI_StoreCX,cx
 2966	                mov     bx,offset OI_ClrStr
 2967	                ScreenIOservice _STRINGPRINT
 2968	                xor     ax,ax
 2969	                mov     bx,ax
 2970	                mov     al,[si]
 2971	                mov     bl,al
 2972	                add     bx,ax
 2973	                add     bx,ax
 2974	                mov     ah,0Bh
 2975	                mov     cx,cs:OI_StoreCX
 2976	                add     cx,0Fh * 2
 2977	                mov     al,cs:InstrTable[bx]
 2978	                ScreenIOservice _SYMBPRINT
 2979	                mov     al,cs:InstrTable[bx+1]
 2980	                ScreenIOservice _SYMBPRINT
 2981	                mov     al,cs:InstrTable[bx+2]
 2982	                ScreenIOservice _SYMBPRINT
 2983	                mov     al,' '
 2984	                ScreenIOservice _SYMBPRINT
 2985	                clc
 2986	                mov     ah,07h
 2987	                call    CheckBreak
 2988	                jc      OI_ok1
 2989	                mov     ah,0Ch
 2990	OI_ok1:         xor     dl,dl
 2991	                xchg    dl,cs:ScreenIOparams.SP_BufFlag
 2992	                mov     bx,si
 2993	                mov     al,7
 2994	                mov     cx,cs:OI_StoreCX
 2995	                call    WordPrintS
 2996	                mov     ax,0700h+':'
 2997	                ScreenIOservice _SYMBPRINT
 2998	                mov     cx,cs:OI_StoreCX
 2999	                add     cx,8 * 2
 3000	                mov     ah,3
 3001	                mov     al,[si]
 3002	                ScreenIOservice _BYTEPRINT
 3003	                xor     bx,bx
 3004	                mov     bl,[si]
 3005	                mov     ah,03h
 3006	                mov     bl,cs:ParamTable[bx]
 3007	                shl     bx,1
 3008	                mov     byte ptr cs:SC_ShowAdr?,1
 3009	                call    word ptr cs:AdrModes[bx]
 3010	                call    ShowCalc
 3011	                inc     si
 3012	OI_RET:         pop     dx cx bx ax
 3013	                ret
 3014	
 3015	AdrModes        dw      NoOper,DirVal,ZP,ZPx,Full,FullX,FullY
 3016	                dw      BadX,BadY,ZPy,JMP1,JMP6C,NoOper,BEQ,Indirect,JMP7C
 3017	
 3018	
 3019	; -- Addressing Modes Procs ------------
 3020	; Entry:
 3021	;  SI  = Address of the first instruction byte
 3022	; Exit:
 3023	;  BX          = Address to show at the up-right
 3024	;  CF          = Show (0) or not (1) the contain of address in BX
 3025	;  SC_ShowAdr? = Show (1-default) or not (0) the address in BX
 3026	;  SI          = Address of the last instruction byte
 3027	
 3028	NoOper:         stc
 3029	                ret
 3030	
 3031	DirVal:         call    PDirVal
 3032	                inc     si
 3033	                stc
 3034	                ret
 3035	
 3036	ZP:             call    PZPadr
 3037	                inc     si
 3038	                xor     bx,bx
 3039	                mov     bl,[si]
 3040	                clc
 3041	                mov     byte ptr cs:SC_ShowAdr?,0
 3042	                ret
 3043	
 3044	ZPx:            call    PZPx
 3045	                inc     si
 3046	                xor     bx,bx
 3047	                mov     bl,[si]
 3048	                add     bl,cs:Regs.X
 3049	                clc
 3050	                ret
 3051	
 3052	Full:           call    PWordAdr
 3053	                inc     si
 3054	                mov     bx,[si]
 3055	                inc     si
 3056	                clc
 3057	                mov     byte ptr cs:SC_ShowAdr?,0
 3058	                ret
 3059	
 3060	FullX:          call    PFullX
 3061	                inc     si
 3062	                mov     bx,[si]
 3063	                inc     si
 3064	                xor     ax,ax
 3065	                mov     al,cs:Regs.X
 3066	                add     bx,ax
 3067	                clc
 3068	                ret
 3069	
 3070	FullY:          call    PFullY
 3071	                inc     si
 3072	                mov     bx,[si]
 3073	                inc     si
 3074	                xor     ax,ax
 3075	                mov     al,cs:Regs.Y
 3076	                add     bx,ax
 3077	                clc
 3078	                ret
 3079	
 3080	BadX:           call    PBadX
 3081	                inc     si
 3082	                mov     bl,[si]
 3083	                add     bl,cs:Regs.X
 3084	                xor     bh,bh
 3085	                mov     al,[bx]
 3086	                inc     bl
 3087	                mov     ah,[bx]
 3088	                mov     bx,ax
 3089	                clc
 3090	                ret
 3091	
 3092	BadY:           call    PBadY
 3093	                inc     si
 3094	                xor     bx,bx
 3095	                mov     bl,[si]
 3096	                mov     al,[bx]
 3097	                inc     bl
 3098	                mov     ah,[bx]
 3099	                mov     bx,ax
 3100	                xor     ax,ax
 3101	                mov     al,cs:Regs.Y
 3102	                add     bx,ax
 3103	                clc
 3104	                ret
 3105	
 3106	ZPy:            call    PZPy
 3107	                inc     si
 3108	                xor     bx,bx
 3109	                mov     bl,[si]
 3110	                add     bl,cs:Regs.Y
 3111	                clc
 3112	                ret
 3113	
 3114	JMP1:           call    Pwordadr
 3115	                inc     si
 3116	                inc     si
 3117	                stc
 3118	                ret
 3119	
 3120	JMP6C:          call    PJ6C
 3121	                inc     si
 3122	                mov     bx,[si]
 3123	                inc     si
 3124	                mov     al,[bx]
 3125	                inc     bl
 3126	                mov     ah,[bx]
 3127	                mov     bx,ax
 3128	                clc
 3129	                ret
 3130	
 3131	BEQ:            call    PBranch
 3132	                inc     si
 3133	                stc
 3134	                ret
 3135	
 3136	Indirect:       call    Pindirect
 3137	                inc     si
 3138	                mov     bl,[si]
 3139	                xor     bh,bh
 3140	                mov     al,[bx]
 3141	                inc     bl
 3142	                mov     ah,[bx]
 3143	                mov     bx,ax
 3144	                clc
 3145	                ret
 3146	
 3147	JMP7C:          call    PJ7C
 3148	                inc     si
 3149	                mov     bl,cs:Regs.X
 3150	                xor     bh,bh
 3151	                add     bx,[si]
 3152	                mov     al,[bx]
 3153	                inc     bl
 3154	                mov     ah,[bx]
 3155	                mov     bx,ax
 3156	                inc     si
 3157	                clc
 3158	                ret
 3159	
 3160	; -- Print Modes Procs -----------------
 3161	; Entry:
 3162	;  SI  = Address of the first instruction byte
 3163	
 3164	PrintWORD:      mov     al,[si+1]
 3165	                ScreenIOservice _BYTEPRINT
 3166	                mov     al,[si+2]
 3167	                ScreenIOservice _BYTEPRINT
 3168	                mov     ah,0Bh
 3169	                mov     cs:ScreenIOparams.SP_BufFlag,dl
 3170	                add     cx,5 * 2
 3171	                ret
 3172	
 3173	PrintBYTE:      mov     al,[si+1]
 3174	                ScreenIOservice _BYTEPRINT
 3175	                mov     ah,0Bh
 3176	                mov     cs:ScreenIOparams.SP_BufFlag,dl
 3177	                add     cx,7 * 2
 3178	                ret
 3179	
 3180	
 3181	
 3182	PBadX:          call    PrintBYTE
 3183	                mov     al,'('
 3184	                ScreenIOservice _SYMBPRINT
 3185	                mov     al,5
 3186	                mov     bl,[si+1]
 3187	                call    BytePrintS
 3188	                mov     al,','
 3189	                ScreenIOservice _SYMBPRINT
 3190	                mov     al,'X'
 3191	                ScreenIOservice _SYMBPRINT
 3192	                mov     al,')'
 3193	                ScreenIOservice _SYMBPRINT
 3194	                ret
 3195	
 3196	PBadY:          call    PrintBYTE
 3197	                mov     al,'('
 3198	                ScreenIOservice _SYMBPRINT
 3199	                mov     al,5
 3200	                mov     bl,[si+1]
 3201	                call    BytePrintS
 3202	                mov     al,')'
 3203	                ScreenIOservice _SYMBPRINT
 3204	                mov     al,','
 3205	                ScreenIOservice _SYMBPRINT
 3206	                mov     al,'Y'
 3207	                ScreenIOservice _SYMBPRINT
 3208	                ret
 3209	
 3210	PZPadr:         call    PrintBYTE
 3211	                mov     al,9
 3212	                mov     bl,[si+1]
 3213	                jmp     BYTEPRINTS
 3214	
 3215	PDirVal:        call    PrintBYTE
 3216	                mov     al,'#'
 3217	                ScreenIOservice _SYMBPRINT
 3218	                mov     al,[si+1]
 3219	                ScreenIOservice _BYTEPRINT
 3220	                ret
 3221	
 3222	PZPx:           call    PrintBYTE
 3223	                mov     al,7
 3224	                mov     bl,[si+1]
 3225	                call    BytePrintS
 3226	                mov     al,','
 3227	                ScreenIOservice _SYMBPRINT
 3228	                mov     al,'X'
 3229	                ScreenIOservice _SYMBPRINT
 3230	                ret
 3231	
 3232	PZPy:           call    PrintBYTE
 3233	                mov     al,7
 3234	                mov     bl,[si+1]
 3235	                call    BytePrintS
 3236	                mov     al,','
 3237	                ScreenIOservice _SYMBPRINT
 3238	                mov     al,'Y'
 3239	                ScreenIOservice _SYMBPRINT
 3240	                ret
 3241	
 3242	PWordAdr:       call    PrintWORD
 3243	                mov     al,10
 3244	                mov     bx,[si+1]
 3245	                jmp     WordPrintS
 3246	
 3247	PFullX:         call    PrintWORD
 3248	                mov     al,8
 3249	                mov     bx,[si+1]
 3250	                call    WordPrintS
 3251	                mov     al,','
 3252	                ScreenIOservice _SYMBPRINT
 3253	                mov     al,'X'
 3254	                ScreenIOservice _SYMBPRINT
 3255	                ret
 3256	
 3257	PFullY:         call    PrintWORD
 3258	                mov     al,8
 3259	                mov     bx,[si+1]
 3260	                call    WordPrintS
 3261	                mov     al,','
 3262	                ScreenIOservice _SYMBPRINT
 3263	                mov     al,'Y'
 3264	                ScreenIOservice _SYMBPRINT
 3265	                ret
 3266	
 3267	PJ6C:           call    PrintWORD
 3268	                mov     al,'('
 3269	                ScreenIOservice _SYMBPRINT
 3270	                mov     al,8
 3271	                mov     bx,[si+1]
 3272	                call    WordPrintS
 3273	                mov     al,')'
 3274	                ScreenIOservice _SYMBPRINT
 3275	                ret
 3276	
 3277	PBranch:        call    PrintBYTE
 3278	                push    bx si
 3279	                mov     al,[si+1]
 3280	                cbw
 3281	                inc     si
 3282	                inc     si
 3283	                add     ax,si
 3284	                mov     bx,ax
 3285	                mov     ax,0B0Ah
 3286	                call    WordPrintS
 3287	                pop     si bx
 3288	                ret
 3289	
 3290	Pindirect:      call    PrintBYTE
 3291	                mov     al,'('
 3292	                ScreenIOservice _SYMBPRINT
 3293	                mov     al,5
 3294	                mov     bl,[si+1]
 3295	                call    BytePrintS
 3296	                mov     al,')'
 3297	                ScreenIOservice _SYMBPRINT
 3298	                ret
 3299	
 3300	PJ7C:           call    PrintWORD
 3301	                mov     al,'('
 3302	                ScreenIOservice _SYMBPRINT
 3303	                mov     al,8
 3304	                mov     bx,[si+1]
 3305	                call    WordPrintS
 3306	                mov     al,','
 3307	                ScreenIOservice _SYMBPRINT
 3308	                mov     al,'X'
 3309	                ScreenIOservice _SYMBPRINT
 3310	                mov     al,')'
 3311	                ScreenIOservice _SYMBPRINT
 3312	                ret
 3313	
 3314	
 3315	; -- Show address at up-rt corner ------
 3316	; Entry:
 3317	;  BX          = Address to show at the up-right
 3318	;  CF          = Show (0) or not (1) the contain of address in BX
 3319	;  SC_ShowAdr? = Show (1-default) or not (0) the address in BX
 3320	
 3321	SC_Clear        db      1,7,'       ',0
 3322	SC_ShowAdr?     db      ?
 3323	SC_Length       db      ?
 3324	ShowCalc:       mov     cs:ScreenIOparams.SP_BufFlag,0
 3325	                push    ax cx dx bx
 3326	                gotoxy  2,18h
 3327	                mov     bx,offset SC_Clear
 3328	                jnc     SC_1
 3329	                cmp     byte ptr cs:CalcFlag,0
 3330	                jz      SC_ret
 3331	                ScreenIOservice _STRINGPRINT
 3332	                jmp     SC_ret
 3333	SC_1:           cmp     byte ptr cs:CalcFlag,0
 3334	                jz      SC_ret
 3335	                ScreenIOservice _STRINGPRINT
 3336	                pop     bx
 3337	                push    bx
 3338	                gotoxy  2,18h
 3339	                mov     ah,3
 3340	                cmp     byte ptr SC_ShowAdr?,0
 3341	                jz      SC_NoAdr
 3342	                mov     al,bh
 3343	                ScreenIOservice _BYTEPRINT
 3344	                mov     al,bl
 3345	                ScreenIOservice _BYTEPRINT
 3346	                mov     al,':'
 3347	                ScreenIOservice _SYMBPRINT
 3348	SC_NoAdr:       gotoxy  2,1Dh
 3349	                mov     al,[bx]
 3350	                ScreenIOservice _BYTEPRINT
 3351	SC_ret:         pop     bx dx cx ax
 3352	                ret
 3353	
 3354	; --------------------------------------------------------------------------
 3355	; - SHOW  REGS
 3356	
 3357	SR_Str          db      ' ÚRegistersÄ¿ ',0
 3358	                db      ' ³          ³ ',0
 3359	                db      ' ÀÄÄÄÄÄÄÄÄÄÄÙ ',0
 3360	SR_StrA         db      1,7,'A = ',0
 3361	SR_StrX         db      1,7,'X = ',0
 3362	SR_StrY         db      1,7,'Y = ',0
 3363	SR_StrP         db      1,7,'P = ',0
 3364	SR_StrS         db      1,7,'S = ',0
 3365	SR_StrPC        db      1,7,'PC= ',0
 3366	RegStruc        struc
 3367	A               db      ?
 3368	X               db      ?
 3369	Y               db      ?
 3370	S               db      ?
 3371	P               db      ?
 3372	PC              dw      ?
 3373	RegStruc        ends
 3374	Regs            RegStruc <0,0,0,0,0,0>
 3375	FlagSymbs       db      'NVúBDIZC'
 3376	
 3377	ShowRegs:       push    ax bx cx dx
 3378	                gotoxy  1,21h
 3379	                mov     bx,offset SR_Str
 3380	                mov     dx,90Dh
 3381	                mov     ax,0000000000000100b
 3382	                call    DrawBox
 3383	                mov     ah,0Bh
 3384	                gotoxy  4,24h
 3385	                mov     bx,offset SR_StrA
 3386	                ScreenIOservice _STRINGPRINT
 3387	                mov     al,cs:Regs.A
 3388	                ScreenIOservice _BYTEPRINT
 3389	                mov     ah,0Bh
 3390	                gotoxy  5,24h
 3391	                mov     bx,offset SR_StrX
 3392	                ScreenIOservice _STRINGPRINT
 3393	                mov     al,cs:Regs.X
 3394	                ScreenIOservice _BYTEPRINT
 3395	                mov     ah,0Bh
 3396	                gotoxy  6,24h
 3397	                mov     bx,offset SR_StrY
 3398	                ScreenIOservice _STRINGPRINT
 3399	                mov     al,cs:Regs.Y
 3400	                ScreenIOservice _BYTEPRINT
 3401	                mov     ah,0Bh
 3402	                gotoxy  7,24h
 3403	                mov     bx,offset SR_StrP
 3404	                ScreenIOservice _STRINGPRINT
 3405	                mov     al,cs:Regs.P
 3406	                ScreenIOservice _BYTEPRINT
 3407	                mov     ah,0Bh
 3408	                gotoxy  8,24h
 3409	                mov     bx,offset SR_StrS
 3410	                ScreenIOservice _STRINGPRINT
 3411	                mov     al,cs:Regs.S
 3412	                ScreenIOservice _BYTEPRINT
 3413	                gotoxy  9,24h
 3414	                mov     bx,offset SR_StrPC
 3415	                ScreenIOservice _STRINGPRINT
 3416	                mov     al,byte ptr cs:Regs.PC[1]
 3417	                ScreenIOservice _BYTEPRINT
 3418	                mov     al,byte ptr cs:Regs.PC
 3419	                ScreenIOservice _BYTEPRINT
 3420	                mov     ah,0Bh
 3421	                mov     dl,cs:Regs.P
 3422	                xor     bx,bx
 3423	                gotoxy  3,24h
 3424	FlagsLoop0:     mov     ah,3
 3425	                shl     dl,1
 3426	                jnc     ClearFlag
 3427	                mov     ah,0Bh
 3428	ClearFlag:      mov     al,cs:FlagSymbs[bx]
 3429	                ScreenIOservice _SYMBPRINT
 3430	                inc     bx
 3431	                cmp     bx,8
 3432	                jb      FlagsLoop0
 3433	                gotoxy  1,23h
 3434	                mov     ax,0E00h+'R'
 3435	                cmp     cs:FkeysMainFlag,0
 3436	                jz      SR_Ret
 3437	                ScreenIOservice _SYMBPRINT
 3438	SR_Ret:         pop     dx cx bx ax
 3439	                ret
 3440	
 3441	; --------------------------------------------------------------------------
 3442	; - SHOW STACK
 3443	
 3444	SS_Str          db      ' ÚStackÄÄÄÄÄ¿ ',0
 3445	                db      ' ³          ³ ',0
 3446	                db      ' ÀÄÄÄÄÄÄÄÄÄÄÙ ',0
 3447	SS_1            db      '+1: ',0
 3448	SS_3            db      '+3: ',0
 3449	SS_5            db      '+5: ',0
 3450	SS_7            db      '+7: ',0
 3451	SS_StoreCX      dw      ?
 3452	ShowStack:      push    ax bx cx dx si
 3453	                gotoxy  0Bh,21h
 3454	                mov     bx,offset SS_Str
 3455	                mov     dx,60Dh
 3456	                mov     ax,0000000000001000b
 3457	                call    DrawBox
 3458	                mov     bx,101h
 3459	                add     bl,cs:Regs.S
 3460	                mov     si,offset SS_1
 3461	                gotoxy  0Dh,24h
 3462	                mov     cs:SS_StoreCX,cx
 3463	                mov     dx,4
 3464	SS_Loop1:       mov     ah,7
 3465	                xchg    bx,si
 3466	                ScreenIOservice _STRINGPRINT
 3467	                add     bx,5
 3468	                xchg    si,bx
 3469	                mov     ah,3
 3470	                inc     bl
 3471	                mov     al,ds:[bx]
 3472	                ScreenIOservice _BYTEPRINT
 3473	                dec     bl
 3474	                mov     al,ds:[bx]
 3475	                ScreenIOservice _BYTEPRINT
 3476	                add     bl,2
 3477	                add     cs:SS_StoreCX,80 * 2
 3478	                mov     cx,cs:SS_StoreCX
 3479	                dec     dx
 3480	                jnz     SS_Loop1
 3481	                pop     si dx cx bx ax
 3482	                ret
 3483	
 3484	; --------------------------------------------------------------------------
 3485	; - SHOW  BREAKS
 3486	
 3487	SB_Str          db      'ÚBreakpointsÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
 3488	                db      '³                               ³',0
 3489	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
 3490	Breakpoint      struc
 3491	BP_Address      dw      ?
 3492	BP_ByteStorage  db      ?
 3493	BP_ActiveFlag   db      ?
 3494	BP_FlashFlag    db      ?
 3495	BP_PrintXY      dw      ?
 3496	                ends
 3497	
 3498	BreakPoints     Breakpoint <0,?,0,0,?>
 3499	                Breakpoint <0,?,0,0,2*80*2+49*2>
 3500	                Breakpoint <0,?,0,0,3*80*2+49*2>
 3501	                Breakpoint <0,?,0,0,4*80*2+49*2>
 3502	                Breakpoint <0,?,0,0,2*80*2+64*2>
 3503	                Breakpoint <0,?,0,0,3*80*2+64*2>
 3504	                Breakpoint <0,?,0,0,4*80*2+64*2>
 3505	
 3506	ShowBreaks:     push    ax bx cx dx si
 3507	                gotoxy  1,2Fh
 3508	                mov     bx,offset SB_Str
 3509	                mov     dx,522h
 3510	                mov     ax,0000000000010000b
 3511	                call    DrawBox
 3512	                mov     si,7
 3513	                mov     dx,600h
 3514	SB_Loop:        mov     ah,7
 3515	                test    cs:Breakpoints[si].BP_ActiveFlag,1
 3516	                jz      SB_ok1
 3517	                mov     ah,0Ch
 3518	                test    cs:Breakpoints[si].BP_FlashFlag,1
 3519	                jz      SB_ok1
 3520	                mov     ah,8Ch
 3521	                mov     cs:Breakpoints[si].BP_FlashFlag,0
 3522	SB_ok1:         mov     cx,cs:Breakpoints[si].BP_PrintXY
 3523	                mov     al,'B'
 3524	                ScreenIOservice _SYMBPRINT
 3525	                mov     al,dl
 3526	                add     al,'0'+1
 3527	                ScreenIOservice _SYMBPRINT
 3528	                mov     ax,700h+':'
 3529	                ScreenIOservice _SYMBPRINT
 3530	                add     cx,2
 3531	                mov     bx,cs:Breakpoints[si].BP_Address
 3532	                mov     ax,30Ah
 3533	                call    WordPrintS
 3534	                inc     dl
 3535	                add     si,7
 3536	                dec     dh
 3537	                jnz     SB_Loop
 3538	                pop     si dx cx bx ax
 3539	                ret
 3540	
 3541	; --------------------------------------------------------------------------
 3542	; - SHOW  DUMP A
 3543	
 3544	SDA_Str         db      'ÚMemory Dump BÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
 3545	                db      '³                               ³',0
 3546	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
 3547	SDA_NumStr      db      '0123456789ABCDEF'
 3548	SDA_Address     dw      0
 3549	SDA_StoreCX     dw      ?
 3550	ShowDumpA:      push    ax bx cx dx si
 3551	                gotoxy  7,2Fh
 3552	                mov     bx,offset SDA_Str
 3553	                mov     dx,0A22h
 3554	                mov     ax,0000000000100000b
 3555	                call    DrawBox
 3556	                mov     bx,cs:SDA_Address
 3557	                and     bx,000Fh
 3558	                gotoxy  8,38h
 3559	                mov     dl,8
 3560	                mov     ah,7
 3561	SDA_NumbLoop:   mov     al,cs:SDA_NumStr[bx]
 3562	                ScreenIOservice _SYMBPRINT
 3563	                inc     bx
 3564	                and     bx,0Fh
 3565	                add     cx,4
 3566	                dec     dl
 3567	                jnz     SDA_NumbLoop
 3568	                gotoxy  9,31h
 3569	                mov     SDA_StoreCX,cx
 3570	                mov     bx,cs:SDA_Address
 3571	                xor     si,si
 3572	                mov     dh,8
 3573	SDA_Loop0:      mov     ah,7
 3574	                mov     al,bh
 3575	                ScreenIOservice _BYTEPRINT
 3576	                mov     al,bl
 3577	                ScreenIOservice _BYTEPRINT
 3578	                mov     al,':'
 3579	                ScreenIOservice _SYMBPRINT
 3580	                mov     dl,8
 3581	SDA_Loop1:      add     cx,2
 3582	                mov     al,ds:[bx]
 3583	                cmp     al,cs:BufferA[si]
 3584	;               mov     cs:BufferA[si],al
 3585	                mov     ah,0Bh
 3586	                jne     SDA_NotSame
 3587	                mov     ah,3
 3588	SDA_NotSame:    ScreenIOservice _BYTEPRINT
 3589	                inc     bx
 3590	                inc     si
 3591	                dec     dl
 3592	                jnz     SDA_Loop1
 3593	                add     cs:SDA_StoreCX,80 * 2
 3594	                mov     cx,cs:SDA_StoreCX
 3595	                dec     dh
 3596	                jnz     SDA_Loop0
 3597	                cmp     cs:EB_Flag,0
 3598	                jz      SDA_Ret
 3599	                cmp     cs:FkeysMainFlag,0
 3600	                jz      SDA_Ret
 3601	                gotoxy  7,30h
 3602	                mov     ax,0E00h+'M'
 3603	                ScreenIOservice _SYMBPRINT
 3604	SDA_Ret:        pop     si dx cx bx ax
 3605	                ret
 3606	
 3607	; --------------------------------------------------------------------------
 3608	; - SHOW  DUMP B
 3609	
 3610	SDB_Str         db      'ÚMemory Dump AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
 3611	                db      '³                                                                              ³',0
 3612	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
 3613	SDB_NumStr      db      '0123456789ABCDEF'
 3614	SDB_Address     dw      0
 3615	SDB_Count1      db      ?
 3616	SDB_1:          add     cx,2
 3617	                add     di,2
 3618	                jmp     SDB_1_ret
 3619	ShowDumpB:      push    ax bx cx dx si di
 3620	                gotoxy  12h,00h
 3621	                mov     bx,offset SDB_Str
 3622	                mov     dx,651h
 3623	                mov     ax,0000000001000000b
 3624	                call    DrawBox
 3625	                mov     bx,cs:SDB_Address
 3626	                and     bx,000Fh
 3627	                gotoxy  13h,3Dh
 3628	                mov     di,cx
 3629	                gotoxy  13h,0Ah
 3630	                mov     dx,10h
 3631	                mov     si,8
 3632	                mov     ah,7
 3633	SDB_NumbLoop:   mov     al,cs:SDB_NumStr[bx]
 3634	                ScreenIOservice _SYMBPRINT
 3635	                add     cx,4
 3636	                xchg    di,cx
 3637	                ScreenIOservice _SYMBPRINT
 3638	                xchg    di,cx
 3639	                dec     si
 3640	                jz      SDB_1
 3641	SDB_1_ret:      inc     bx
 3642	                and     bx,0Fh
 3643	                dec     dx
 3644	                jnz     SDB_NumbLoop
 3645	                gotoxy  14h,3Dh
 3646	                mov     dx,cx
 3647	                gotoxy  14h,2
 3648	                mov     si,cs:SDB_Address
 3649	                xor     di,di
 3650	                mov     cs:SDB_Count1,4
 3651	SDB_Loop0:      mov     ah,7
 3652	                mov     bx,si
 3653	                mov     al,bh
 3654	                ScreenIOservice _BYTEPRINT
 3655	                mov     al,bl
 3656	                ScreenIOservice _BYTEPRINT
 3657	                mov     al,':'
 3658	                ScreenIOservice _SYMBPRINT
 3659	                add     cx,4
 3660	                mov     bx,1008h
 3661	SDB_Loop1:      mov     al,ds:[si]
 3662	                cmp     al,cs:BufferB[di]
 3663	;               mov     cs:BufferB[di],al
 3664	                mov     ah,0Bh
 3665	                jne     SDB_NotSame
 3666	                mov     ah,3
 3667	SDB_NotSame:    ScreenIOservice _BYTEPRINT
 3668	                xchg    cx,dx
 3669	                xor     ah,ah
 3670	                xchg    di,ax
 3671	                shl     di,1
 3672	                mov     bp,ss:TextChars[di]
 3673	                xchg    di,ax
 3674	                mov     ax,bp
 3675	                ScreenIOservice _SYMBPRINT
 3676	                xchg    cx,dx
 3677	                add     cx,2
 3678	                dec     bl
 3679	                jz      SDB_2
 3680	SDB_2_ret:      inc     si
 3681	                inc     di
 3682	                dec     bh
 3683	                jnz     SDB_Loop1
 3684	                add     cx,24*2
 3685	                add     dx,63*2
 3686	                dec     cs:SDB_Count1
 3687	                jnz     SDB_Loop0
 3688	                cmp     cs:EB_Flag,0
 3689	                jnz     SDB_Ret
 3690	                cmp     cs:FkeysMainFlag,0
 3691	                jz      SDB_Ret
 3692	                gotoxy  12h,1
 3693	                mov     ax,0E00h+'M'
 3694	                ScreenIOservice _SYMBPRINT
 3695	SDB_Ret:        pop     di si dx cx bx ax
 3696	                ret
 3697	SDB_2:          add     cx,2
 3698	                add     dx,2
 3699	                jmp     SDB_2_ret
 3700	
 3701	; --------------------------------------------------------------------------
 3702	; - SHOW FUNCTION KEYS
 3703	
 3704	SFK_None        db      '      ',0
 3705	SFK_Cont        db      'Apple ',0
 3706	SFK_Animat      db      'Animat',0
 3707	SFK_Trace       db      'Trace ',0
 3708	SFK_Step        db      'Step  ',0
 3709	SFK_GoTo        db      'Run to',0
 3710	SFK_GoToRTS     db      'To RTS',0
 3711	SFK_View        db      'View  ',0
 3712	SFK_HelpON      db      'Help  ',0
 3713	SFK_HelpOFF     db      'CloseH',0
 3714	SFK_HelpUp      db      'Help ',0
 3715	SFK_HelpDown    db      'Help ',0
 3716	SFK_Stop        db      'Stop  ',0
 3717	
 3718	SFK_Str         db      '1       2       3       4       5       '
 3719	                db      '6       7       8       9      10       ',0
 3720	
 3721	FkeyStruc       struc
 3722	FkeyFlag        db      ?
 3723	FkeyLabel       dw      ?
 3724	FkeyProc        dw      ?
 3725	FkeyStruc       ends
 3726	FkeysMainFlag   db      1
 3727	FkeysBuffer     FkeyStruc <1, SFK_Cont,     GK_Cont    >
 3728	                FkeyStruc <1, SFK_Animat,   GK_Animat  >
 3729	                FkeyStruc <1, SFK_Step,     GK_Step    >
 3730	                FkeyStruc <1, SFK_Trace,    GK_Trace   >
 3731	                FkeyStruc <1, SFK_GoTo,     GK_GoTo    >
 3732	                FkeyStruc <1, SFK_GoToRTS,  GK_ToRTS   >
 3733	                FkeyStruc <1, SFK_View,     GK_View    >
 3734	                FkeyStruc <0, SFK_HelpUp,   GK_HelpUp  >
 3735	                FkeyStruc <0, SFK_HelpDown, GK_HelpDown>
 3736	                FkeyStruc <1, SFK_HelpOn,   GK_Help    >
 3737	
 3738	ShowFuncKeys:   push    ax bx cx dx si di
 3739	                gotoxy  19h,0
 3740	                mov     bx,offset SFK_Str
 3741	                mov     ah,7
 3742	                ScreenIOservice _STRINGPRINT
 3743	                gotoxy  19h,1
 3744	                xor     si,si
 3745	                mov     di,10
 3746	                mov     dx,484Fh
 3747	                cmp     cs:FkeysMainFlag,0
 3748	                jnz     SFK_Loop
 3749	                mov     dx,4848h
 3750	SFK_Loop:       mov     bx,cs:FkeysBuffer[si].FkeyLabel
 3751	                mov     ah,dh
 3752	                cmp     cs:FkeysBuffer[si].FkeyFlag,0
 3753	                jz      SFK_ok1
 3754	                mov     ah,dl
 3755	SFK_ok1:        ScreenIOservice _STRINGPRINT
 3756	                add     cx,4
 3757	                add     si,size FkeyStruc
 3758	                dec     di
 3759	                jnz     SFK_Loop
 3760	                pop     di si dx cx bx ax
 3761	                ret
 3762	
 3763	; --------------------------------------------------------------------------
 3764	; - SHOW HELP
 3765	
 3766	SH_CX           dw      376h
 3767	HelpFlag        db      0
 3768	HelpAddr        dw      ?
 3769	HelpPtr         dw      ?
 3770	MinHelpPtr      dw      ?
 3771	MaxHelpPtr      dw      ?
 3772	SH_Str          db      'ÚHelpÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
 3773	                db      '³                                   ³',0
 3774	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
 3775	Helps           label   byte
 3776	                db      ' ',0
 3777	
 3778	SH_MoveHelp     db      ' ',0,' ',0,' ',0
 3779	                db      1,7,'   Use <',1,0Fh,'',1,7,'> keys to move Help',0
 3780	                db      ' ',0
 3781	                db      1,7,'     Press <',1,0Fh,'Enter',1,7,'> when done ',0,0
 3782	
 3783	SH_ComHelp0     db      'Supported Commands List:',0
 3784	                db      ' ',0
 3785	                db      'REGS',1,7,' -edit registers',0
 3786	                db      '<reg> =<value>',1,7,' -change register',0
 3787	                db      ' ',0
 3788	                db      'D <addr>',1,7,' -disassemble',0
 3789	                db      'DA <addr>',1,7,' -dump A',0
 3790	                db      'DB <addr>',1,7,' -dump B',0
 3791	                db      'ASM [<addr>]',1,7,' -assembler mode',0
 3792	                db      'EA [<addr>]',1,7,' -edit dump A',0
 3793	                db      'EB [<addr>]',1,7,' -edit dump B',0
 3794	                db      ' ',0
 3795	                db      '[ <beg>,<end>]',1,7,' -set {margins}',0
 3796	                db      'FIND [<byte>,..][''st'',..]["st",..]',0
 3797	                db      1,7,'  -find string in {margins}',0
 3798	                db      'COPY <addr>',1,7,' -copy {margins}',0
 3799	                db      'COMP <addr>',1,7,' -compare {margins}',0
 3800	                db      'PDUMP [<FileName>]',0
 3801	                db      1,7,'  -Print Memory Dump',0
 3802	                db      'PASM [<FileName>]',0
 3803	                db      1,7,'  -Print Disassembled Dump',0
 3804	                db      ' ',0
 3805	                db      'BREAK<1..6>=<addr>',1,7,' -set breakpoint',0
 3806	                db      'GO [<start>][,<stop>]',1,7,' -execute',0
 3807	                db      ' ',0
 3808	                db      '. <Identifier>=<addr>',0
 3809	                db      1,7,'  -define label',0
 3810	                db      'LIST',1,7,' -defined labels list',0
 3811	                db      'DL <identifier>',1,7,' -delete label',0
 3812	                db      'LAB <ON>|<OFF>',1,7,' -labels activity',0
 3813	                db      'LL <FileName>',1,7,' -load labels',0
 3814	                db      'SL <FileName>',1,7,' -save labels',0
 3815	                db      ' ',0
 3816	
 3817	                db      'RECORD [f]',1,7,' macro',0
 3818	                db      'STOP',1,7,' -stop recording',0
 3819	                db      'PLAY [<FileName>]',1,7,' -play macro',0
 3820	                db      'LM <FileName>',1,7,' -load macro',0
 3821	                db      'SM <FileName>',1,7,' -save macro',0
 3822	                db      ' ',0
 3823	
 3824	                db      '? <expression>[,h][,d][,b]',0
 3825	                db      1,7,'  -evaluate expression',0
 3826	                db      'SWAP <TimerTicks>',1,7,' -scr swapping',0
 3827	                db      'SOUND <ON>|<OFF>',0
 3828	                db      'RESET',1,7,' -cold reset APPLE',0
 3829	
 3830	                db      'Assembler Mode',0
 3831	                db      ' ',0
 3832	                db      1,7,'Enter 65C02 statements,<',1,0Fh,'Esc',1,7,'> Exit',0
 3833	                db      ' ',0
 3834	                db      'Examples:',0
 3835	                db      1,7,'  LDA (77),Y ',0
 3836	                db      1,7,'  BIT C000',0
 3837	                db      1,7,'  BPL 17FF',0,0
 3838	
 3839	                db      'Memory Dump B Editor',0
 3840	                db      ' ',0
 3841	                db      1,7,'Enter hex numbers, <',1,0Fh,'Esc',1,7,'> Exit',0
 3842	                db      ' ',0
 3843	                db      1,7,'Use "',1,0Fh,'EB <addr>',1,7,'" command to change',0
 3844	                db      1,7,'dump address',0,0
 3845	
 3846	                db      'Memory Dump A Editor',0
 3847	                db      ' ',0
 3848	                db      1,7,'Enter hex numbers or chars.',0
 3849	                db      1,7,'Press <',1,0Fh,'Tab',1,7,'> to swap entry area.',0
 3850	                db      1,7,'Use "',1,0Fh,'EA <addr>',1,7,'" command to change',0
 3851	                db      1,7,'dump address',0
 3852	                db      ' ',0
 3853	                db      1,7,'Press <',1,0Fh,'Esc',1,7,'> to Exit',0,0
 3854	
 3855	                db      'Registers Editor',0
 3856	                db      ' ',0
 3857	                db      1,7,'Select register with <',1,0Fh,'',1,7,'>, then',0
 3858	                db      1,7,'enter hexadecimal value or press',0
 3859	                db      1,7,'<',1,0Fh,'Space',1,7,'> to flip a flag.',0
 3860	                db      ' ',0
 3861	                db      1,7,'Press <',1,0Fh,'Esc',1,7,'> to Exit.',0,0
 3862	
 3863	                db      'View Labels',0
 3864	                db      ' ',0
 3865	                db      1,7,'Use <',1,0Fh,'',1,7,'>,<',1,0Fh,'PgUp',1,7,'>,<',1,0Fh,'PgDn',1,7,'> to move.',0
 3866	                db      ' ',0
 3867	                db      1,7,'Press <',1,0Fh,'Esc',1,7,'> to Exit.',0,0
 3868	
 3869	ShowHelp:       test    cs:HelpFlag,1
 3870	                jz      SH_Ret
 3871	                push    ax bx cx dx
 3872	                mov     cx,cs:SH_CX
 3873	                mov     bx,offset SH_Str
 3874	                mov     dx,0C26h
 3875	                mov     ax,0000000010000000b
 3876	                call    DrawBox
 3877	SH_ok:          mov     bx,cs:HelpAddr
 3878	                mov     dx,cs:SH_CX
 3879	                add     dx,(80*2*2)+4
 3880	                mov     al,10
 3881	SH_Loop:        mov     cx,dx
 3882	                add     dx,80*2
 3883	                mov     ah,0Fh
 3884	                ScreenIOservice _STRINGPRINT
 3885	                mov     bx,cs:ScreenIOparams.SP_bx
 3886	                cmp     byte ptr cs:[bx],0
 3887	                jz      SH_Ret0
 3888	                dec     al
 3889	                jnz     SH_Loop
 3890	SH_Ret0:        mov     cx,cs:SH_CX
 3891	                add     cx,2
 3892	                mov     ax,0E00h+'H'
 3893	                cmp     cs:FkeysMainFlag,0
 3894	                jz      SH_Ret1
 3895	                ScreenIOservice _SYMBPRINT
 3896	SH_Ret1:        pop     dx cx bx ax
 3897	SH_Ret:         ret
 3898	
 3899	
 3900	SH_Calculate:   push    bx dx
 3901	                mov     bx,offset Helps
 3902	                mov     dx,cs:HelpPtr
 3903	SH_Loop0:       cmp     byte ptr cs:[bx],0
 3904	                jz      SH_EOL
 3905	                inc     bx
 3906	                jmp     SH_Loop0
 3907	SH_EOL:         inc     bx
 3908	                dec     dx
 3909	                jnz     SH_Loop0
 3910	                mov     cs:HelpAddr,bx
 3911	                pop     dx bx
 3912	                ret
 3913	
 3914	SH_Choose:      mov     cs:HelpPtr,ax
 3915	                mov     cs:MinHelpPtr,ax
 3916	                mov     cs:MaxHelpPtr,bx
 3917	                call    SH_Calculate
 3918	                ret
 3919	
 3920	; --------------------------------------------------------------------------
 3921	; - SHOW LABS
 3922	
 3923	SL_Flag         db      0
 3924	SL_Ptr          dw      0
 3925	SL_CX           dw      ?
 3926	SL_Str          db      'ÚDefined Labels ListÄÄÄÄÄÄÄ¿',0
 3927	                db      '³                          ³',0
 3928	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
 3929	ShowLabels:     test    cs:SL_Flag,1
 3930	                jz      SL_Ret
 3931	                push    ax bx cx dx si di
 3932	                gotoxy  7,12
 3933	                mov     bx,offset SL_Str
 3934	                mov     dx,0C1Dh
 3935	                mov     ax,0000000100000000b
 3936	                call    DrawBox
 3937	                mov     di,10
 3938	                mov     bx,SL_Ptr
 3939	                mov     si,bx
 3940	                shl     si,1
 3941	                mov     dx,19
 3942	                gotoxy  9,14
 3943	                mov     cs:SL_CX,cx
 3944	SL_Loop:        mov     cx,cs:SL_CX
 3945	                call    PrintSymbol
 3946	                mov     cx,cs:SL_CX
 3947	                add     cs:SL_CX,80*2
 3948	                add     cx,20 * 2
 3949	                mov     ah,3
 3950	                mov     al,byte ptr cs:SymbVal[si+1]
 3951	                ScreenIOservice _BYTEPRINT
 3952	                mov     al,byte ptr cs:SymbVal[si]
 3953	                ScreenIOservice _BYTEPRINT
 3954	                add     si,2
 3955	                inc     bx
 3956	                cmp     bx,cs:SymbValPtr
 3957	                jae     SL_Ret1
 3958	                dec     di
 3959	                jnz     SL_Loop
 3960	SL_Ret1:        pop     di si dx cx bx ax
 3961	SL_Ret:         ret
 3962	; --------------------------------------------------------------------------
 3963	
 3964	
 3965	
 3966	; *******************************************************************
 3967	; **                                                               **
 3968	; **                                                               **
 3969	; **                   P R I N T   S E R V I C E S                 **
 3970	; **                                                               **
 3971	; **                                                               **
 3972	; *******************************************************************
 3973	
 3974	WordPrintS:     push    ax bx
 3975	                call    WordPrint
 3976	                jnc     WPS_ret
 3977	                mov     al,bh
 3978	                ScreenIOservice _BYTEPRINT
 3979	                mov     al,bl
 3980	                ScreenIOservice _BYTEPRINT
 3981	WPS_ret:        pop     bx ax
 3982	                ret
 3983	
 3984	
 3985	
 3986	BYTEPRINTS:     push    ax bx
 3987	                xor     bh,bh
 3988	                call    WordPrint
 3989	                jnc     BPS_ret
 3990	                mov     al,bl
 3991	                ScreenIOservice _BYTEPRINT
 3992	BPS_ret:        pop     bx ax
 3993	                ret
 3994	
 3995	
 3996	
 3997	WordPrintFl     db      1
 3998	WP_al           db      ?
 3999	
 4000	WordPrint:      push    ax bx dx di es cx         ; Print a word
 4001	                push    cs
 4002	                pop     es                        ; Input:
 4003	                test    byte ptr cs:WordPrintFl,1 ;   BX-word to print
 4004	                jz      WP_1                      ;   AH-attr, CL-htab, CH-vtab
 4005	                mov     di,offset SymbVal         ;   AL-length
 4006	                cld
 4007	                mov     cx,cs:SymbValPtr
 4008	                cmp     cx,0
 4009	                jz      WP_1
 4010	                push    ax
 4011	                mov     ax,bx
 4012	                repne   scasw
 4013	                pop     ax
 4014	                jne     WP_1
 4015	                sub     di,offset SymbVal + 2
 4016	                mov     bx,di
 4017	                shr     bx,1
 4018	                pop     cx
 4019	                xor     dx,dx
 4020	                mov     dl,al
 4021	                mov     cs:WP_al,al
 4022	                call    PrintSymbol
 4023	                clc
 4024	                jmp     WP_ret
 4025	
 4026	WP_1:           stc
 4027	                pop     cx
 4028	WP_ret:         pop     es di dx bx ax
 4029	                ret
 4030	
 4031	
 4032	
 4033	; *******************************************************************
 4034	; **                                                               **
 4035	; **                                                               **
 4036	; **                      G E T   A D D R E S S                    **
 4037	; **                                                               **
 4038	; **                                                               **
 4039	; *******************************************************************
 4040	
 4041	GAdd_Oper       db      '+-*/|^&<>'
 4042	GAdd_DoOper     dw      GA_Plus,GA_Minus,GA_Multiply,GA_Divide
 4043	                dw      GA_Or,GA_Xor,GA_And,GA_Shl,GA_Shr
 4044	GAdd_cx         dw      ?
 4045	
 4046	GetAddress:     push    bx dx di
 4047	                call    GetAdr
 4048	                jc      GAdd_Error
 4049	GAdd_0:         mov     bx,ax
 4050	                GetLineService _GL_GetSymb
 4051	                push    cx
 4052	                mov     di,offset GAdd_Oper
 4053	                mov     cx,offset GAdd_DoOper - offset GAdd_Oper
 4054	                call    CalcCommand
 4055	                pop     cx
 4056	                jnc     GAdd_1
 4057	                mov     ax,bx
 4058	                pop     di dx bx
 4059	                ret
 4060	
 4061	GAdd_Error:     pop     di dx bx ax
 4062	                ret
 4063	
 4064	GAdd_1:         mov     cs:GAdd_cx,cx
 4065	                call    GetAdr
 4066	                jc      GAdd_Error
 4067	                shl     di,1
 4068	                xchg    ax,bx
 4069	                call    word ptr cs:GAdd_DoOper[di]
 4070	                jc      GAdd_0
 4071	                mov     cs:GetKeyParams.RK_ErrPtr,0
 4072	                jmp     GAdd_0
 4073	
 4074	GA_Plus:        add     ax,bx
 4075	                mov     cs:GetKeyParams.RK_ErrPtr,offset GA_PlusMes
 4076	                ret
 4077	
 4078	GA_Minus:       sub     ax,bx
 4079	                mov     cs:GetKeyParams.RK_ErrPtr,offset GA_MinusMes
 4080	                ret
 4081	
 4082	GA_Multiply:    mul     bx
 4083	                mov     cs:GetKeyParams.RK_ErrPtr,offset GA_MulMes
 4084	                ret
 4085	
 4086	GA_Divide:      push    dx
 4087	                xor     dx,dx
 4088	                cmp     bx,0
 4089	                jz      GA_ZeroDiv
 4090	                cmp     ax,bx
 4091	                jb      GA_DivRet
 4092	GA_DivLoop:     sub     ax,bx
 4093	                jc      GA_DivOk
 4094	                inc     dx
 4095	                jmp     GA_DivLoop
 4096	GA_DivOk:       add     ax,bx
 4097	                or      ax,ax
 4098	                clc
 4099	                jz      GA_DivRet
 4100	
 4101	                push    dx
 4102	                mov     dx,ax
 4103	                mov     bx,3
 4104	GA_DivLoop00:   mov     al,dl
 4105	                shr     dx,4
 4106	                and     al,0Fh
 4107	                cmp     al,0Ah
 4108	                cmc
 4109	                adc     al,30h
 4110	                daa
 4111	                mov     cs:GA_DivRest[bx],al
 4112	                dec     bx
 4113	                jns     GA_DivLoop00
 4114	                pop     dx
 4115	                stc
 4116	                mov     cs:GetKeyParams.RK_ErrPtr,offset GA_DivMes
 4117	
 4118	GA_DivRet:      mov     ax,dx
 4119	                pop     dx
 4120	                ret
 4121	
 4122	GA_ZeroDiv:     mov     cs:GetKeyParams.RK_ErrPtr,offset ZeroDivMes
 4123	                pop     dx di
 4124	                mov     cx,cs:GAdd_cx
 4125	                inc     cl
 4126	                jmp     GAdd_Error
 4127	
 4128	GA_Or:          or      ax,bx
 4129	                clc
 4130	                ret
 4131	
 4132	GA_Xor:         xor     ax,bx
 4133	                clc
 4134	                ret
 4135	
 4136	GA_And:         and     ax,bx
 4137	                clc
 4138	                ret
 4139	
 4140	GA_Shl:         push    cx
 4141	                mov     cl,bl
 4142	                shl     ax,cl
 4143	                pop     cx
 4144	                ret
 4145	
 4146	GA_Shr:         push    cx
 4147	                mov     cl,bl
 4148	                shr     ax,cl
 4149	                pop     cx
 4150	                clc
 4151	                ret
 4152	
 4153	
 4154	
 4155	Delimiters_C    =       19
 4156	Delimiters      db      '{[()]}/,=+-*/|^&<>',0
 4157	GAd_Sym         db      'rxysp.%@'
 4158	GAd_Sub         dw      GAd_A, GAd_X, GAd_Y, GAd_S, GAd_P
 4159	                dw      GAd_Label, GAd_Bin, GAd_Dec, GAd_Hex
 4160	GAd_Flag        db      ?
 4161	
 4162	GetAdr:         push    bx di cx
 4163	                GetLineService _GL_GetSymb
 4164	                mov     di,offset GAd_Sym
 4165	                mov     cx,offset GAd_Sub - offset GAd_Sym
 4166	                call    CalcCommand
 4167	                pop     cx
 4168	                jnc     GAd_NotHex
 4169	                mov     di,8
 4170	GAd_NotHex:     shl     di,1
 4171	                call    word ptr cs:GAd_Sub[di]
 4172	                jc      GAd_Ret
 4173	                dec     cl
 4174	                mov     ax,bx
 4175	                mov     cs:GetKeyParams.RK_ErrPtr,0
 4176	                clc
 4177	
 4178	GAd_Ret:        pop     di bx
 4179	                ret
 4180	
 4181	
 4182	GAd_A:          xor     bx,bx
 4183	                mov     bl,cs:Regs.A
 4184	                GetLineService _GL_GetSymb
 4185	                GetLineService _GL_GetSymb
 4186	                ret
 4187	
 4188	GAd_X:          xor     bx,bx
 4189	                mov     bl,cs:Regs.X
 4190	                GetLineService _GL_GetSymb
 4191	                GetLineService _GL_GetSymb
 4192	                ret
 4193	
 4194	GAd_Y:          xor     bx,bx
 4195	                mov     bl,cs:Regs.Y
 4196	                GetLineService _GL_GetSymb
 4197	                GetLineService _GL_GetSymb
 4198	                ret
 4199	
 4200	GAd_S:          xor     bx,bx
 4201	                mov     bl,cs:Regs.S
 4202	                GetLineService _GL_GetSymb
 4203	                GetLineService _GL_GetSymb
 4204	                ret
 4205	
 4206	GAd_P:          GetLineService _GL_GetSymb
 4207	                GetLineService _GL_GetSymb
 4208	                call    Upcase
 4209	                cmp     al,'c'
 4210	                je      Gad_PC
 4211	                xor     bx,bx
 4212	                mov     bl,cs:Regs.P
 4213	                ret
 4214	
 4215	GAd_PC:         mov     bx,cs:Regs.PC
 4216	                GetLineService _GL_GetSymb
 4217	                ret
 4218	
 4219	
 4220	GAd_Label:      GetLineService _GL_GetSymb
 4221	                call    SymbGetVal
 4222	                jc      GAd_Lerror
 4223	                mov     cx,cs:SGV_cx
 4224	                mov     bx,ax
 4225	                inc     cl
 4226	                clc
 4227	                ret
 4228	GAd_Lerror:     inc     cl
 4229	                stc
 4230	                ret
 4231	
 4232	GAd_Hex:        mov     byte ptr cs:GAd_Flag,0
 4233	                xor     bx,bx
 4234	GetLoop0:       GetLineService _GL_GetSymb
 4235	                push    cx
 4236	                mov     di,offset Delimiters
 4237	                mov     cx,Delimiters_C
 4238	                call    CalcCommand
 4239	                pop     cx
 4240	                jnc     GAd_Hret
 4241	                call    Upcase
 4242	                cmp     al,'0'
 4243	                jb      GAd_Herror
 4244	                cmp     al,'9'
 4245	                jbe     Anumb
 4246	                cmp     al,'a'
 4247	                jb      GAd_Herror
 4248	                cmp     al,'f'
 4249	                ja      GAd_Herror
 4250	                sub     al,27h
 4251	Anumb:          sub     al,'0'
 4252	OkNum:          shl     bx,1
 4253	                jc      GAd_Oj
 4254	                shl     bx,1
 4255	                jc      GAd_Oj
 4256	                shl     bx,1
 4257	                jc      GAd_Oj
 4258	                shl     bx,1
 4259	                jc      GAd_Oj
 4260	                or      bl,al
 4261	                mov     byte ptr cs:GAd_Flag,1
 4262	                jmp     GetLoop0
 4263	
 4264	GAd_Hret:       test    byte ptr cs:GAd_Flag,1
 4265	                jz      GAd_Nj
 4266	                clc
 4267	                ret
 4268	
 4269	GAd_Herror:     mov     cs:GetKeyParams.RK_ErrPtr,offset NotHexMes
 4270	                stc
 4271	                ret
 4272	
 4273	GAd_Oj:         jmp     GAd_Overflow
 4274	
 4275	GAd_Nj:         jmp     GAd_NumbMiss
 4276	
 4277	
 4278	GAd_Bin:        mov     byte ptr cs:GAd_Flag,0
 4279	                GetLineService _GL_GetSymb
 4280	                xor     bx,bx
 4281	GetLoop1:       GetLineService _GL_GetSymb
 4282	                push    cx
 4283	                mov     di,offset Delimiters
 4284	                mov     cx,Delimiters_C
 4285	                call    CalcCommand
 4286	                pop     cx
 4287	                jnc     GAd_Bret
 4288	                sub     al,'0'
 4289	                cmp     al,1
 4290	                ja      GAd_Berror
 4291	                shl     bx,1
 4292	                jc      GAd_Overflow
 4293	                or      bl,al
 4294	                mov     byte ptr cs:GAd_Flag,1
 4295	                jmp     GetLoop1
 4296	
 4297	GAd_Bret:       test    byte ptr cs:GAd_Flag,1
 4298	                jz      GAd_NumbMiss
 4299	                clc
 4300	                ret
 4301	
 4302	GAd_Berror:     mov     cs:GetKeyParams.RK_ErrPtr,offset NotBinMes
 4303	                stc
 4304	                ret
 4305	
 4306	
 4307	
 4308	GAd_Dec:        mov     byte ptr cs:GAd_Flag,0
 4309	                GetLineService _GL_GetSymb
 4310	                xor     bx,bx
 4311	GetLoop2:       GetLineService _GL_GetSymb
 4312	                push    cx
 4313	                mov     di,offset Delimiters
 4314	                mov     cx,Delimiters_C
 4315	                call    CalcCommand
 4316	                pop     cx
 4317	                jnc     GAd_Dret
 4318	                sub     al,'0'
 4319	                cmp     al,9
 4320	                ja      GAd_Derror
 4321	                push    ax
 4322	                mov     ax,10
 4323	                mul     bx
 4324	                mov     bx,ax
 4325	                pop     ax
 4326	                jc      GAd_Overflow
 4327	                mov     ah,0
 4328	                add     bx,ax
 4329	                jc      GAd_Overflow
 4330	                mov     byte ptr cs:GAd_Flag,1
 4331	                jmp     GetLoop2
 4332	
 4333	GAd_Dret:       test    byte ptr cs:GAd_Flag,1
 4334	                jz      GAd_NumbMiss
 4335	                clc
 4336	                ret
 4337	
 4338	GAd_Derror:     mov     cs:GetKeyParams.RK_ErrPtr,offset NotDecMes
 4339	                stc
 4340	                ret
 4341	
 4342	
 4343	GAd_Overflow:   mov     cs:GetKeyParams.RK_ErrPtr,offset BigNumMes
 4344	                stc
 4345	                ret
 4346	
 4347	GAd_NumbMiss:   mov     cs:GetKeyParams.RK_ErrPtr,offset NumbMissMes
 4348	                or      al,al
 4349	                jnz     Gad_NumbMiss1
 4350	                inc     cl
 4351	Gad_NumbMiss1:  stc
 4352	                ret
 4353	
 4354	
 4355	
 4356	; *******************************************************************
 4357	; **                                                               **
 4358	; **                                                               **
 4359	; **             B R E A K P O I N T   S E R V I C E S             **
 4360	; **                                                               **
 4361	; **                                                               **
 4362	; *******************************************************************
 4363	
 4364	SetBreaks       proc    far
 4365	                push    ax bx dx si ds
 4366	                mov     ax,Apple
 4367	                mov     ds,ax
 4368	                xor     bx,bx
 4369	                mov     dx,7
 4370	StB_Loop1:      test    cs:Breakpoints[bx].BP_ActiveFlag,1
 4371	                jz      StB_Next
 4372	                mov     si,cs:Breakpoints[bx].BP_Address
 4373	                mov     al,2
 4374	                xchg    al,[si]
 4375	                mov     cs:Breakpoints[bx].BP_ByteStorage,al
 4376	StB_Next:       add     bx,7
 4377	                dec     dx
 4378	                jnz     StB_Loop1
 4379	                pop     ds si dx bx ax
 4380	                ret
 4381	SetBreaks       endp
 4382	
 4383	
 4384	UnsetBreaks     proc    far
 4385	                push    ax bx dx si ds
 4386	                mov     ax,Apple
 4387	                mov     ds,ax
 4388	                mov     bx,6 * 7
 4389	                mov     dx,7
 4390	UsB_Loop1:      test    cs:Breakpoints[bx].BP_ActiveFlag,1
 4391	                jz      UsB_Next
 4392	                mov     si,cs:Breakpoints[bx].BP_Address
 4393	                mov     al,cs:Breakpoints[bx].BP_ByteStorage
 4394	                cmp     byte ptr [si],2
 4395	                jne     UsB_Next
 4396	                mov     [si],al
 4397	UsB_Next:       sub     bx,7
 4398	                dec     dx
 4399	                jnz     UsB_Loop1
 4400	                pop     ds si dx bx ax
 4401	                ret
 4402	UnsetBreaks     endp
 4403	
 4404	
 4405	CheckBreaks:    push    si
 4406	                mov     si,cs:Regs.PC
 4407	                stc
 4408	                call    CheckBreak
 4409	                pop     si
 4410	                ret
 4411	
 4412	
 4413	F1_or_Invalid?  db      ?
 4414	
 4415	CheckBreak:     push    ax bx cx dx
 4416	                mov     al,1
 4417	                jc      CB_0
 4418	                xor     ax,ax
 4419	CB_0:           xor     bx,bx
 4420	                mov     cx,bx
 4421	                mov     dx,bx
 4422	CB_Loop1:       test    cs:Breakpoints[bx].BP_ActiveFlag,1
 4423	                jz      CB_1
 4424	                cmp     si,cs:Breakpoints[bx].BP_Address
 4425	                jne     CB_1
 4426	                mov     cl,1
 4427	                or      bx,bx
 4428	                jz      CB_1
 4429	                or      al,al
 4430	                jz      CB_1
 4431	                mov     cs:Breakpoints[bx].BP_FlashFlag,cl
 4432	                call    ShowPrevIns
 4433	                call    StopAnimate
 4434	                mov     cs:GetKeyParams.RK_ErrPtr,offset BreakpointMes
 4435	                mov     cs:BreakpointNum,dl
 4436	                add     cs:BreakpointNum,30h
 4437	CB_1:           add     bx,7
 4438	                inc     dx
 4439	                cmp     dx,7
 4440	                jne     CB_Loop1
 4441	                cmp     cl,1
 4442	                pop     dx cx bx ax
 4443	                ret
 4444	
 4445	
 4446	
 4447	; *******************************************************************
 4448	; **                                                               **
 4449	; **                                                               **
 4450	; **                 L A B E L S   S E R V I C E S                 **
 4451	; **                                                               **
 4452	; **                                                               **
 4453	; *******************************************************************
 4454	
 4455	SGV_dx          dw      ?
 4456	SGV_adr         dw      ?
 4457	SGV_nameBeg     dw      ?
 4458	SGV_nameEnd     dw      ?
 4459	SGV_cx          dw      ?
 4460	
 4461	SymbGetVal:     push    bx dx si di cx          ; Returns value of a symbol
 4462	                xor     dx,dx
 4463	                mov     cs:SGV_NameBeg,dx       ; Input:
 4464	SGV_Loop0:      GetLineService _GL_GetSymb      ; CH -> vtab, CL -> htab
 4465	                inc     dx
 4466	                push    cx                      ; Output:
 4467	                mov     di,offset Delimiters    ;   AX -> value
 4468	                mov     cx,Delimiters_C         ;   cf -> set if not found
 4469	                call    CalcCommand
 4470	                pop     cx
 4471	                jc      SGV_Loop0
 4472	                dec     dx
 4473	                mov     cs:SGV_dx,dx
 4474	
 4475	                xor     bx,bx
 4476	                xor     si,si
 4477	SGV_Loop1:      pop     cx
 4478	                push    cx
 4479	                mov     dx,cs:SGV_dx
 4480	SGV_Loop2:      GetLineService _GL_GetSymb
 4481	SGV_Loop3:      call    Upcase
 4482	                mov     ah,al
 4483	                mov     al,cs:SymbMem[bx]
 4484	                call    Upcase
 4485	                xchg    al,ah
 4486	                cmp     al,ah
 4487	                jne     SGV_NoOk0
 4488	                dec     dx
 4489	                jnz     SGV_NoOk1
 4490	                inc     bx
 4491	                cmp     byte ptr cs:SymbMem[bx],0
 4492	                jnz     SGV_NoOk0
 4493	                shl     si,1
 4494	                mov     ax,cs:SymbVal[si]
 4495	                mov     cs:GetKeyParams.RK_ErrPtr,0
 4496	                mov     cs:SGV_cx,cx
 4497	                mov     cs:SGV_adr,si
 4498	                mov     cs:SGV_nameEnd,bx
 4499	                clc
 4500	                jmp     SGV_ret
 4501	
 4502	SGV_NoOk0:      cmp     byte ptr cs:SymbMem[bx],0
 4503	                jz      SGV_Cont1
 4504	                inc     bx
 4505	                jmp     SGV_NoOk0
 4506	SGV_Cont1:      inc     bx
 4507	                cmp     bx,cs:SymbPtr
 4508	                ja      SGV_NotFnd
 4509	                mov     cs:SGV_NameBeg,bx
 4510	                inc     si
 4511	                jmp     SGV_Loop1
 4512	
 4513	SGV_NoOk1:      inc     bx
 4514	                cmp     bx,cs:SymbPtr
 4515	                jbe     SGV_Loop2
 4516	SGV_NotFnd:     mov     cs:GetKeyParams.RK_ErrPtr,offset SymNotFndErr
 4517	                stc
 4518	
 4519	SGV_ret:        pop     cx di si dx bx
 4520	                ret
 4521	
 4522	
 4523	
 4524	PrintSymbol:    push    ax bx dx di                     ; Print a symbol
 4525	                and     ah,11110000b
 4526	                or      ah,0Fh                          ; Input:
 4527	                xor     di,di                           ;   CH-vtab, CL-htab, *AH-attr
 4528	                test    cs:ScreenIOparams.SP_BufFlag,1  ;   BX-Symbol number
 4529	                jz      PS_Ok001                        ;   DX-Max Length
 4530	                mov     dx,0FFFFh
 4531	                mov     al,'.'
 4532	                ScreenIOservice _SYMBPRINT
 4533	PS_Ok001:       cmp     bx,0
 4534	                jz      PS_Go
 4535	                dec     di
 4536	PS_Loop1:       inc     di
 4537	                cmp     byte ptr cs:SymbMem[di],0
 4538	                jne     PS_Loop1
 4539	                dec     bx
 4540	                jnz     PS_Loop1
 4541	PS_Loop2:       inc     di
 4542	PS_Go:          mov     al,cs:SymbMem[di]
 4543	                or      al,al
 4544	                jz      PS_ret
 4545	                ScreenIOservice _SYMBPRINT
 4546	                dec     dx
 4547	                jnz     PS_Loop2
 4548	PS_ret:         pop     di dx bx ax
 4549	                ret
 4550	
 4551	
 4552	
 4553	; *******************************************************************
 4554	; **                                                               **
 4555	; **                                                               **
 4556	; **               K E Y B O A R D   S E R V I C E S               **
 4557	; **                                                               **
 4558	; **                                                               **
 4559	; *******************************************************************
 4560	
 4561	Alt_Keys        db      'prcmlh'
 4562	Alt_Procs       dw      Alt_Program,Alt_Regs,Alt_Command,Alt_Memory,Alt_Labels
 4563	                dw      Alt_Help
 4564	Alt_Key         proc    far
 4565	                push    cx si di ds
 4566	                mov     di,offset Alt_Keys
 4567	                mov     cx,offset Alt_Procs- offset Alt_Keys
 4568	                call    CalcCommand
 4569	                jc      Alt_Ret
 4570	                shl     di,1
 4571	                call    cs:Alt_Procs[di]
 4572	                jc      Alt_Ret
 4573	                mov     al,0Ch
 4574	Alt_Ret:        pop     ds di si cx
 4575	                ret
 4576	
 4577	Alt_Program     proc    near
 4578	                mov     cs:GoWhere?,G_MiniAsm
 4579	                clc
 4580	                ret
 4581	Alt_Program     endp
 4582	
 4583	Alt_Regs        proc    near
 4584	                mov     cs:GoWhere?,G_Registers
 4585	                clc
 4586	                ret
 4587	Alt_Regs        endp
 4588	
 4589	Alt_Command     proc    near
 4590	                mov     cs:GoWhere?,G_COMMAND_ENTRY
 4591	                clc
 4592	                ret
 4593	Alt_Command     endp
 4594	
 4595	Alt_Memory      proc    near
 4596	                mov     cs:GoWhere?,G_EditB
 4597	                mov     al,cs:EB_Flag
 4598	                xor     al,1
 4599	                jnz     Alt_Mret
 4600	                mov     cs:GoWhere?,G_EditA
 4601	Alt_Mret:       clc
 4602	                ret
 4603	Alt_Memory      endp
 4604	
 4605	Alt_Labels      proc    near
 4606	                mov     cs:GoWhere?,G_LabList
 4607	                clc
 4608	                ret
 4609	Alt_Labels      endp
 4610	
 4611	Alt_Help        proc    near
 4612	                mov     cs:GoWhere?,G_MoveHelp
 4613	                clc
 4614	                ret
 4615	Alt_Help        endp
 4616	
 4617	Alt_Key         endp
 4618	
 4619	
 4620	GK_Fkey         proc    far
 4621	                push    ax bx cx dx si di bp ds es
 4622	                push    cs:ShowAllNumber
 4623	                push    cs:ActiveFlags
 4624	                mov     cs:ActiveFlags,0
 4625	                mov     cs:ShowAllNumber,5
 4626	                mov     bx,Emulate
 4627	                mov     es,bx
 4628	                mov     bx,Apple
 4629	                mov     ds,bx
 4630	                xor     bx,bx
 4631	                mov     bl,size FkeyStruc
 4632	                mul     bl
 4633	                mov     bx,ax
 4634	                cmp     cs:FkeysBuffer[bx].FkeyFlag,0
 4635	                jz      GK_NotActive
 4636	                mov     dx,cs:AssembAdr
 4637	                call    cs:FkeysBuffer[bx].FkeyProc
 4638	GK_NotActive:   pop     cs:ActiveFlags
 4639	                pop     cs:ShowAllNumber
 4640	                mov     cs:GetKeyParams.RK_FkeyFlag,1
 4641	                mov     word ptr cs:GetKeyParams.RK_FkeyProc,offset GK_Fkey
 4642	                mov     word ptr cs:GetKeyParams.RK_FkeyProc[2],seg GK_Fkey
 4643	                pop     es ds bp di si dx cx bx ax
 4644	                ret
 4645	GK_Fkey         endp
 4646	
 4647	
 4648	
 4649	GK_Cont:        mov     cs:Breakpoints.BP_ActiveFlag,0
 4650	                call    GoAppleII0
 4651	                ret
 4652	
 4653	
 4654	OldC050         db      ?
 4655	GK_Animat:      xor     cs:GetKeyParams.RK_WaitKeyFlag,1
 4656	                mov     ax,100h
 4657	                cmp     cs:GetKeyParams.RK_WaitKeyFlag,al
 4658	                mov     bx,offset StopAnimate
 4659	                jz      T_DoIt
 4660	                mov     bx,offset StartAnimate
 4661	T_DoIt:         call    bx
 4662	                ret
 4663	
 4664	StartAnimate:   push    ax
 4665	                xor     al,al
 4666	                mov     cs:FkeysBuffer[1*size FkeyStruc].FkeyLabel,offset SFK_Stop
 4667	                mov     cs:FkeysBuffer[2*size FkeyStruc].FkeyFlag,al
 4668	                mov     cs:FkeysBuffer[3*size FkeyStruc].FkeyFlag,al
 4669	                mov     cs:FkeysBuffer[4*size FkeyStruc].FkeyFlag,al
 4670	                mov     cs:FkeysBuffer[5*size FkeyStruc].FkeyFlag,al
 4671	                mov     al,C050
 4672	                mov     cs:OldC050,al
 4673	                mov     cs:GetKeyParams.RK_WaitKeyFlag,1
 4674	                pop     ax
 4675	                ret
 4676	
 4677	StopAnimate:    push    ax
 4678	                mov     ah,1
 4679	                mov     cs:FkeysBuffer[1*size FkeyStruc].FkeyLabel,offset SFK_Animat
 4680	                mov     cs:FkeysBuffer[2*size FkeyStruc].FkeyFlag,ah
 4681	                mov     cs:FkeysBuffer[3*size FkeyStruc].FkeyFlag,ah
 4682	                mov     cs:FkeysBuffer[4*size FkeyStruc].FkeyFlag,ah
 4683	                mov     cs:FkeysBuffer[5*size FkeyStruc].FkeyFlag,ah
 4684	                mov     al,cs:OldC050
 4685	                mov     es:C050,al
 4686	                mov     cs:GetKeyParams.RK_WaitKeyFlag,0
 4687	                pop     ax
 4688	                ret
 4689	
 4690	T_WaitKey       proc    far
 4691	                push    bp ds es ax
 4692	                mov     ax,Apple
 4693	                mov     ds,ax
 4694	                mov     ax,Emulate
 4695	                mov     es,ax
 4696	                mov     al,es:C050
 4697	                call    StepAppleII
 4698	                call    CheckBreaks
 4699	                jc      T_ok01
 4700	                cmp     cs:ViewFlag,0
 4701	                jz      t_ok01
 4702	                inc     cs:ViewFlag
 4703	                mov     es:C000,94h             ; Press F7 to end view mode
 4704	T_ok01:         cmp     al,es:C050
 4705	                je      T_ok00
 4706	                mov     al,es:C050
 4707	                mov     cs:OldC050,al
 4708	                ScreenIOservice _SETTEXTMODE
 4709	T_ok00:         test    cs:ScreenIOparams.SS_ScreenFlag,1
 4710	                jz      T_ok10
 4711	                cmp     cs:GetKeyParams.RK_WaitKeyFlag,0
 4712	                jz      T_ok10
 4713	                call    ShowAll
 4714	                ScreenIOservice _SHOWCURSOR
 4715	T_ok10:         pop     ax es ds bp
 4716	                ret
 4717	T_WaitKey       endp
 4718	
 4719	
 4720	GK_Step:        mov     cs:Regs.PC,dx
 4721	                mov     bx,dx
 4722	                mov     al,[bx]
 4723	                xor     bx,bx
 4724	                mov     bl,al
 4725	                xor     ax,ax
 4726	                mov     al,cs:InstrLongTbl[bx]
 4727	                test    al,10000000b
 4728	                jz      GK_Trace
 4729	                and     al,00000011b
 4730	                add     ax,cs:Regs.PC
 4731	                mov     cs:Breakpoints.BP_ActiveFlag,1
 4732	                mov     cs:Breakpoints.BP_Address,ax
 4733	                mov     si,cs:Regs.PC
 4734	                call    GoAppleII
 4735	                mov     cs:Breakpoints.BP_ActiveFlag,0
 4736	                mov     cs:ShowPrev?,1
 4737	                mov     cs:PrevAdr,si
 4738	                ret
 4739	
 4740	
 4741	GK_Trace:       mov     cs:Regs.PC,dx
 4742	                call    StepAppleII
 4743	                call    CheckBreaks
 4744	                ScreenIOservice _SETTEXTMODE
 4745	                ret
 4746	
 4747	
 4748	GK_GoTo:        mov     cs:Breakpoints.BP_ActiveFlag,1
 4749	                mov     cs:Breakpoints.BP_Address,dx
 4750	                mov     si,cs:Regs.PC
 4751	                call    GoAppleII
 4752	                mov     cs:Breakpoints.BP_ActiveFlag,0
 4753	                call    ShowPrevIns
 4754	                ret
 4755	
 4756	GK_ToRTS:       mov     ax,Emulate
 4757	                mov     es,ax
 4758	                xor     ax,ax
 4759	                mov     cs:FkeysMainFlag,al
 4760	                xchg    cs:ActiveFlags,ax
 4761	                mov     cs:GetKeyParams.RK_ErrPtr, offset ToRTSmes
 4762	                call    ShowAll
 4763	                ScreenIOService _SHOWSCREEN
 4764	                mov     cs:ActiveFlags,ax
 4765	                call    InitBufferA
 4766	                call    InitBufferB
 4767	                mov     al,cs:Regs.S
 4768	GK_ToRTS_loop:  call    StepAppleII_
 4769	                ScreenIOservice _SETTEXTMODE
 4770	                cmp     C000,0
 4771	                jnz     GK_ToRTS_ret
 4772	                mov     bx,cs:Regs.PC
 4773	                cmp     byte ptr ds:[bx],60h
 4774	                jne     GK_ToRTS_loop
 4775	                cmp     cs:Regs.S,al
 4776	                jne     GK_ToRTS_loop
 4777	GK_ToRTS_ret:   xor     ax,ax
 4778	                mov     C000,al
 4779	                mov     cs:GetKeyParams.RK_ErrPtr,ax
 4780	                inc     al
 4781	                mov     cs:FkeysMainFlag,al
 4782	                call    ShowPrevIns
 4783	                ret
 4784	
 4785	
 4786	ViewFlag        db      0
 4787	GK_View:        mov     cs:ViewFlag,1
 4788	                mov     al,C050
 4789	                mov     cs:OldC050,al
 4790	                ScreenIOservice _SetScreen
 4791	                mov     cs:GetKeyParams.RK_FkeyFlag,0
 4792	                mov     cs:ScreenIOparams.SS_ScreenFlag,0
 4793	US_Loop1:       call    ReadKey
 4794	                cmp     cs:ViewFlag,2
 4795	                jne     US_NotBreak
 4796	                mov     cs:GetKeyParams.RK_ErrPtr,offset BreakpointMes
 4797	US_NotBreak:    cmp     cs:ViewFlag,0
 4798	                jz      US_Ret
 4799	                cmp     al,14h
 4800	                je      US_Ret
 4801	                cmp     al,0Ch
 4802	                je      US_Ret
 4803	                cmp     al,18h
 4804	                je      US_Quit
 4805	                cmp     al,0Fh
 4806	                je      US_Stop
 4807	                call    MySetScreen
 4808	                jmp     US_Loop1
 4809	US_Ret:         mov     al,cs:OldC050
 4810	                mov     C050,al
 4811	US_Quit:        mov     cs:ScreenIOparams.SS_ScreenFlag,1
 4812	                mov     cs:ViewFlag,0
 4813	                ret
 4814	US_Stop:        call    StopAnimate
 4815	                jmp     US_Ret
 4816	
 4817	
 4818	
 4819	GK_Help:        mov     ax,100h
 4820	                xor     cs:HelpFlag,ah
 4821	                jnz     GK_HelpOn
 4822	                mov     cs:FkeysBuffer[9*size FkeyStruc].FkeyLabel,offset SFK_HelpOn
 4823	                mov     cs:FkeysBuffer[7*size FkeyStruc].FkeyFlag,al
 4824	                mov     cs:FkeysBuffer[8*size FkeyStruc].FkeyFlag,al
 4825	                jmp     GK_HelpRet
 4826	GK_HelpOn:      mov     cs:FkeysBuffer[9*size FkeyStruc].FkeyLabel,offset SFK_HelpOff
 4827	                mov     cs:FkeysBuffer[7*size FkeyStruc].FkeyFlag,ah
 4828	                mov     cs:FkeysBuffer[8*size FkeyStruc].FkeyFlag,ah
 4829	GK_HelpRet:     ret
 4830	
 4831	
 4832	GK_HelpUp:      push    ax
 4833	                mov     ax,cs:MinHelpPtr
 4834	                cmp     ax,cs:HelpPtr
 4835	                je      GK_HelpUpRet
 4836	                dec     cs:HelpPtr
 4837	                call    SH_Calculate
 4838	GK_HelpUpRet:   pop     ax
 4839	                ret
 4840	
 4841	GK_HelpDown:    push    ax
 4842	                mov     ax,cs:MaxHelpPtr
 4843	                cmp     ax,cs:HelpPtr
 4844	                je      GK_HelpDownRet
 4845	                inc     cs:HelpPtr
 4846	                call    SH_Calculate
 4847	GK_HelpDownRet: pop     ax
 4848	                ret
 4849	
 4850	
 4851	GK_None:        ret
 4852	
 4853	
 4854	
 4855	; *******************************************************************
 4856	; **                                                               **
 4857	; **                                                               **
 4858	; **               C O M M A N D S   S E R V I C E S               **
 4859	; **                                                               **
 4860	; **                                                               **
 4861	; *******************************************************************
 4862	
 4863	Upcase:         cmp     al,'A'
 4864	                jb      UPCSret
 4865	                cmp     al,'Z'
 4866	                ja      UPCSret
 4867	                or      al,20h
 4868	UPCSret:        ret
 4869	
 4870	
 4871	
 4872	CalcCommand:    push    ax bx cx es             ; Returns number of a command             .
 4873	                push    cs                      ; Input:
 4874	                pop     es                      ;   di -> offset Commands
 4875	                call    Upcase                  ;   al -> search command
 4876	                cld                             ;   cx -> commands count
 4877	                mov     bx,di
 4878	                repne   scasb                   ; Output:
 4879	                stc                             ;   di <- Number of the command
 4880	                jne     CC_end                  ;   cf <- 1 if not found
 4881	                sub     di,bx
 4882	                dec     di
 4883	                clc
 4884	CC_end:         pop     es cx bx ax
 4885	                ret
 4886	
 4887	
 4888	
 4889	MainCommands    db      '***',0
 4890	                db      'a',0
 4891	                db      'x',0
 4892	                db      'y',0
 4893	                db      's',0
 4894	                db      'p',0
 4895	                db      'pc',0
 4896	                db      'regs',0
 4897	                db      'asm',0
 4898	                db      'ea',0
 4899	                db      'eb',0
 4900	                db      'd',0
 4901	                db      'da',0
 4902	                db      'db',0
 4903	                db      '[',0
 4904	                db      'find',0
 4905	                db      'copy',0
 4906	                db      'compare',0
 4907	                db      'break',0
 4908	                db      'go',0
 4909	Com_LLabels     db      'll',0
 4910	Com_SLabels     db      'sl',0
 4911	                db      '.',0
 4912	                db      'list',0
 4913	                db      'dl',0
 4914	                db      'labels',0              ; ON / OFF
 4915	                db      'swap',0                ; ON / OFF
 4916	                db      '?',0
 4917	                db      'reset',0
 4918	                db      'movhlp',0
 4919	                db      'pdump',0
 4920	                db      'pasm',0
 4921	                db      'sound',0
 4922	                db      'record',0
 4923	                db      'stop',0
 4924	                db      'play',0
 4925	Com_LRecord     db      'lm',0
 4926	Com_SRecord     db      'sm'
 4927	ENDScan1        db      0
 4928	
 4929	AsmInstr        db      '***',0
 4930	                db      'lda',0
 4931	                db      'ldx',0
 4932	                db      'ldy',0
 4933	                db      'sta',0
 4934	                db      'stx',0
 4935	                db      'sty',0
 4936	                db      'tax',0
 4937	                db      'tay',0
 4938	                db      'tsx',0
 4939	                db      'txa',0
 4940	                db      'txs',0
 4941	                db      'tya',0
 4942	                db      'pha',0
 4943	                db      'php',0
 4944	                db      'pla',0
 4945	                db      'plp',0
 4946	                db      'adc',0
 4947	                db      'sbc',0
 4948	                db      'inc',0
 4949	                db      'inx',0
 4950	                db      'iny',0
 4951	                db      'dec',0
 4952	                db      'dex',0
 4953	                db      'dey',0
 4954	                db      'and',0
 4955	                db      'ora',0
 4956	                db      'eor',0
 4957	                db      'asl',0
 4958	                db      'lsr',0
 4959	                db      'rol',0
 4960	                db      'ror',0
 4961	                db      'cmp',0
 4962	                db      'cpx',0
 4963	                db      'cpy',0
 4964	                db      'bit',0
 4965	                db      'bcc',0
 4966	                db      'bcs',0
 4967	                db      'beq',0
 4968	                db      'bmi',0
 4969	                db      'bne',0
 4970	                db      'bpl',0
 4971	                db      'bvc',0
 4972	                db      'bvs',0
 4973	                db      'bra',0
 4974	                db      'jmp',0
 4975	                db      'jsr',0
 4976	                db      'rts',0
 4977	                db      'rti',0
 4978	                db      'brk',0
 4979	                db      'nop',0
 4980	                db      'clc',0
 4981	                db      'cld',0
 4982	                db      'cli',0
 4983	                db      'clv',0
 4984	                db      'sec',0
 4985	                db      'sed',0
 4986	                db      'sei',0
 4987	                db      'tsb',0
 4988	                db      'trb',0
 4989	                db      'phy',0
 4990	                db      'phx',0
 4991	                db      'ply',0
 4992	                db      'plx',0
 4993	                db      'stz'
 4994	ENDScan2        db      0
 4995	
 4996	; *******************************************************************
 4997	; **                                                               **
 4998	; **                                                               **
 4999	; **                 A P P L E R   I N T E R F A C E               **
 5000	; **                                                               **
 5001	; **                                                               **
 5002	; *******************************************************************
 5003	
 5004	MSS_keys        db      'gth12fm '
 5005	MSS_subrt       dw      MSS_Graph, MSS_Text, MSS_HiGr, MSS_p1, MSS_p2
 5006	                dw      MSS_NoMix, MSS_Mix, MSS_Default
 5007	
 5008	MySetScreen:    push    ax cx di es
 5009	                mov     di,offset MSS_keys
 5010	                mov     cx,offset MSS_subrt - offset MSS_keys
 5011	                call    CalcCommand
 5012	                jc      MSS_ret
 5013	                mov     ax,seg C050
 5014	                mov     es,ax
 5015	                shl     di,1
 5016	                mov     al,C050
 5017	                mov     ah,al
 5018	                call    cs:MSS_Subrt[di]
 5019	                cmp     al,ah
 5020	                je      MSS_ret
 5021	                ScreenIOservice _SetScreen
 5022	                mov     C050,al
 5023	MSS_ret:        pop     es di cx ax
 5024	                ret
 5025	MSS_Graph:      and     al,11110110b
 5026	                ret
 5027	MSS_Text:       or      al,00000001b
 5028	                ret
 5029	MSS_HiGr:       or      al,00001000b
 5030	                and     al,11111110b
 5031	                ret
 5032	MSS_p1:         and     al,11111011b
 5033	                ret
 5034	MSS_p2:         or      al,00000100b
 5035	                ret
 5036	MSS_NoMix:      and     al,11111101b
 5037	                ret
 5038	MSS_Mix:        or      al,00000010b
 5039	                ret
 5040	MSS_Default:    mov     al,cs:OldC050
 5041	                ret
 5042	
 5043	
 5044	
 5045	DebugInit:      mov     ax,Apple
 5046	                mov     ds,ax
 5047	                call    InitGetLine
 5048	                cmp     byte ptr cs:F1_or_Invalid?,0
 5049	                jz      DI_NoInvalid
 5050	                mov     cs:GetKeyParams.RK_ErrPtr, offset InvalidOpcode
 5051	DI_NoInvalid:   mov     ax,cs:Regs.PC
 5052	                mov     cs:AssembAdr,ax
 5053	                call    ShowPrevIns
 5054	                call    InitBufferA
 5055	                call    InitBufferB
 5056	                ret
 5057	
 5058	InitGetLine:    push    cx
 5059	                mov     cs:GetLineParams.GL_Color,       0Bh
 5060	                mov     cs:GetLineParams.GL_OverCurColor,40h
 5061	                mov     cs:GetLineParams.GL_InsCurColor, 20h
 5062	                mov     cs:GetLineParams.GL_MaxPrint,    32
 5063	                mov     cs:GetLineParams.GL_MaxLength,   99
 5064	                gotoxy  17,2
 5065	                mov     cs:GetLineParams.GL_CX,cx
 5066	                pop     cx
 5067	                ret
 5068	
 5069	
 5070	
 5071	                assume  ds:Apple,es:TaskControl
 5072	GetRegisters    proc    near
 5073	                push    ax es
 5074	                mov     ax,TaskControl
 5075	                mov     es,ax
 5076	                mov     al,es:r_A
 5077	                mov     cs:Regs.A,al
 5078	                mov     al,es:r_X
 5079	                mov     cs:Regs.X,al
 5080	                mov     al,es:r_Y
 5081	                mov     cs:Regs.Y,al
 5082	                mov     al,es:r_S
 5083	                mov     cs:Regs.S,al
 5084	                mov     al,es:r_P
 5085	                mov     cs:Regs.P,al
 5086	                mov     ax,es:r_PC
 5087	                mov     cs:Regs.PC,ax
 5088	                pop     es ax
 5089	                ret
 5090	GetRegisters    endp
 5091	
 5092	SetRegisters    proc    near
 5093	                push    ax es
 5094	                mov     ax,TaskControl
 5095	                mov     es,ax
 5096	                mov     al,cs:Regs.A
 5097	                mov     es:r_A,al
 5098	                mov     al,cs:Regs.X
 5099	                mov     es:r_X,al
 5100	                mov     al,cs:Regs.Y
 5101	                mov     es:r_Y,al
 5102	                mov     al,cs:Regs.S
 5103	                mov     es:r_S,al
 5104	                mov     al,cs:Regs.P
 5105	                mov     es:r_P,al
 5106	                mov     ax,cs:Regs.PC
 5107	                mov     es:r_PC,ax
 5108	                pop     es ax
 5109	                ret
 5110	SetRegisters    endp
 5111	
 5112	
 5113	SwapTime        dw      9
 5114	                assume  es:Emulate
 5115	
 5116	GoAppleII0:     push    ax
 5117	                xor     ax,ax
 5118	                xchg    ax,cs:SwapTime
 5119	                call    GoAppleII
 5120	                mov     cs:SwapTime,ax
 5121	                pop     ax
 5122	                ret
 5123	
 5124	GoAppleII:      push    ax bx cx dx es
 5125	                call    InitBufferA
 5126	                call    InitBufferB
 5127	                mov     cx,seg C050
 5128	                mov     es,cx
 5129	                xor     ax,ax
 5130	                xchg    cs:ActiveFlags,ax
 5131	                mov     cs:GetKeyParams.RK_ErrPtr, offset ExecutingMes
 5132	                call    ShowAll
 5133	                ScreenIOService _SHOWSCREEN
 5134	                mov     cs:ActiveFlags,ax
 5135	                mov     al,0C3h
 5136	                xchg    al,es:synchro_push_ax
 5137	                mov     cs:old_synchro,al
 5138	                push    es
 5139	                mov     ax,TaskControl
 5140	                mov     es,ax
 5141	                assume  es:TaskControl
 5142	                mov     es:T_Iflags,00000001b
 5143	                SwitchToProcess PID_EMULATOR
 5144	                mov     es:T_Iflags,00000010b
 5145	                pop     es
 5146	                assume  es:Emulate
 5147	                mov     al,cs:old_synchro
 5148	                mov     es:synchro_push_ax,al
 5149	                mov     ax,cs:SwapTime
 5150	                call    ScreenSwapReq
 5151	                call    SetBreaks
 5152	                cli
 5153	                SwitchToProcess PID_EMULATOR
 5154	                mov     cs:GetKeyParams.RK_ErrPtr,0
 5155	                call    CheckBreaks
 5156	                jnc     GAII_NoInvalid
 5157	                cmp     cs:F1_or_Invalid?,0
 5158	                jz      GAII_NoInvalid
 5159	                mov     cs:GetKeyParams.RK_ErrPtr, offset InvalidOpcode
 5160	GAII_NoInvalid: mov     ax,cs:Regs.PC
 5161	                mov     cs:AssembAdr,ax
 5162	                call    BuffDisasm
 5163	                call    ShowPrevIns
 5164	                mov     al,1
 5165	                mov     cs:RE_FirstTime?,al
 5166	                mov     cs:EA_Params.EB_FirstFl,al
 5167	                mov     cs:EB_Params.EB_FirstFl,al
 5168	                pop     es dx cx bx ax
 5169	                sti
 5170	                ret
 5171	
 5172	
 5173	
 5174	old_synchro     db      ?
 5175	StepAppleII:    call    InitBufferA
 5176	                call    InitBufferB
 5177	StepAppleII_:   push    ax
 5178	                mov     al,0C3h
 5179	                xchg    al,es:synchro_push_ax
 5180	                mov     cs:old_synchro,al
 5181	                push    bx es
 5182	                mov     ax,TaskControl
 5183	                mov     es,ax
 5184	                assume  es:TaskControl
 5185	                mov     es:T_Iflags,00000001b
 5186	                mov     bx,cs:Regs.PC
 5187	                SwitchToProcess PID_EMULATOR
 5188	                mov     cs:ShowPrev?,1
 5189	                mov     cs:PrevAdr,bx
 5190	                mov     ax,cs:Regs.PC
 5191	                mov     cs:AssembAdr,ax
 5192	                call    BuffDisasm
 5193	                pop     es bx
 5194	                assume  es:Emulate
 5195	                mov     al,cs:old_synchro
 5196	                mov     es:synchro_push_ax,al
 5197	                pop     ax
 5198	                ret
 5199	
 5200	
 5201	
 5202	GL_UserCommands db      7,8,3,4
 5203	GL_UserSubrt    dw      UP,DOWN,GL_PgUp,GL_PgDn
 5204	GetLineUser     proc    far
 5205	                push    bx cx di bp ds
 5206	                mov     di,Apple
 5207	                mov     ds,di
 5208	                mov     di,offset GL_UserCommands
 5209	                mov     cx,offset GL_UserSubrt- offset GL_UserCommands
 5210	                call    CalcCommand
 5211	                jc      GLU_Ret
 5212	                shl     di,1
 5213	                call    GL_UserSubrt[di]
 5214	GLU_Ret:        pop     ds bp di cx bx
 5215	                ret
 5216	GetLineUser     endp
 5217	
 5218	GL_PgUp:        push    bx
 5219	                mov     bx,09h
 5220	GL_PU_loop:     call    UP
 5221	                dec     bx
 5222	                jnz     GL_PU_loop
 5223	                pop     bx
 5224	                clc
 5225	                ret
 5226	
 5227	GL_PgDn:        push    bx
 5228	                mov     bx,09h
 5229	GL_PD_loop:     call    DOWN
 5230	                dec     bx
 5231	                jnz     GL_PD_loop
 5232	                pop     bx
 5233	                clc
 5234	                ret
 5235	
 5236	
 5237	
 5238	; *******************************************************************
 5239	; **                                                               **
 5240	; **                                                               **
 5241	; **                          T A B L E S                          **
 5242	; **                                                               **
 5243	; **                                                               **
 5244	; *******************************************************************
 5245	
 5246	;                          0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
 5247	InstrTable      db      'BRKORA??????TSBORAASL???PHPORAASL???TSBORAASL???' ;00
 5248	                db      'BPLORAORA???TRBORAASL???CLCORAINC???TRBORAASL???' ;10
 5249	                db      'JSRAND??????BITANDROL???PLPANDROL???BITANDROL???' ;20
 5250	                db      'BMIANDAND???BITANDROL???SECANDDEC???BITANDROL???' ;30
 5251	                db      'RTIEOR?????????EORLSR???PHAEORLSR???JMPEORLSR???' ;40
 5252	                db      'BVCEOREOR??????EORLSR???CLIEORPHY??????EORLSR???' ;50
 5253	                db      'RTSADC??????STZADCROR???PLAADCROR???JMPADCROR???' ;60
 5254	                db      'BVSADCADC???STZADCROR???SEIADCPLY???JMPADCROR???' ;70
 5255	                db      'BRASTA??????STYSTASTX???DEYBITTXA???STYSTASTX???' ;80
 5256	                db      'BCCSTASTA???STYSTASTX???TYASTATXS???STZSTASTZ???' ;90
 5257	                db      'LDYLDALDX???LDYLDALDX???TAYLDATAX???LDYLDALDX???' ;A0
 5258	                db      'BCSLDALDA???LDYLDALDX???CLVLDATSX???LDYLDALDX???' ;B0
 5259	                db      'CPYCMP??????CPYCMPDEC???INYCMPDEX???CPYCMPDEC???' ;C0
 5260	                db      'BNECMPCMP??????CMPDEC???CLDCMPPHX??????CMPDEC???' ;D0
 5261	                db      'CPXSBC??????CPXSBCINC???INXSBCNOP???CPXSBCINC???' ;E0
 5262	                db      'BEQSBCSBC??????SBCINC???SEDSBCPLX??????SBCINC???' ;F0
 5263	
 5264	
 5265	
 5266	;                         0 1 2 3 4 5 6 7 8 9 A B  C  D E F
 5267	InstrLongTbl    db      82h,2,5,5,2,2,2,5,1,2,1,5, 3 ,3,3,5 ;00
 5268	                db      82h,2,2,5,2,2,2,5,1,3,1,5, 3 ,3,3,5 ;10
 5269	                db      83h,2,5,5,2,2,2,5,1,2,1,5, 3 ,3,3,5 ;20
 5270	                db      82h,2,2,5,2,2,2,5,1,3,1,5, 3 ,3,3,5 ;30
 5271	                db        1,2,5,5,5,2,2,5,1,2,1,5,83h,3,3,5 ;40
 5272	                db      82h,2,2,5,5,2,2,5,1,3,1,5, 5 ,3,3,5 ;50
 5273	                db        1,2,5,5,2,2,2,5,1,2,1,5,83h,3,3,5 ;60
 5274	                db      82h,2,2,5,2,2,2,5,1,3,1,5,83h,3,3,5 ;70
 5275	                db      82h,2,5,5,2,2,2,5,1,2,1,5, 3 ,3,3,5 ;80
 5276	                db      82h,2,2,5,2,2,2,5,1,3,1,5, 3 ,3,3,5 ;90
 5277	                db        2,2,2,5,2,2,2,5,1,2,1,5, 3 ,3,3,5 ;A0
 5278	                db      82h,2,2,5,2,2,2,5,1,3,1,5, 3 ,3,3,5 ;B0
 5279	                db        2,2,5,5,2,2,2,5,1,2,1,5, 3 ,3,3,5 ;C0
 5280	                db      82h,2,2,5,5,2,2,5,1,3,1,5, 5 ,3,3,5 ;D0
 5281	                db        2,2,5,5,2,2,2,5,1,2,1,5, 3 ,3,3,5 ;E0
 5282	                db      82h,2,2,5,5,2,2,5,1,3,1,5, 5 ,3,3,5 ;F0
 5283	
 5284	
 5285	
 5286	;            ???      0
 5287	;            #        1
 5288	;            ZP       2
 5289	;            ZP,X     3
 5290	;            Full     4
 5291	;            Full,X   5
 5292	;            Full,Y   6
 5293	;            (ZP,X)   7
 5294	;            (ZP),Y   8
 5295	;            ZP,Y     9
 5296	;            JMP      A
 5297	;            JMP ()   B
 5298	;            NoOper   C
 5299	;            BEQ      D
 5300	;            (ZP)     E
 5301	;            (....,X) F
 5302	
 5303	
 5304	;                        0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
 5305	ParamTable      db       1, 7, 0, 0, 2, 2, 2, 0,12, 1,12, 0, 4, 4, 4, 0 ; 00
 5306	                db      13, 8,14, 0, 2, 3, 3, 0,12, 6,12, 0, 4, 5, 5, 0 ; 10
 5307	                db      10, 7, 0, 0, 2, 2, 2, 0,12, 1,12, 0, 4, 4, 4, 0 ; 20
 5308	                db      13, 8,14, 0, 3, 3, 3, 0,12, 6,12, 0, 5, 5, 5, 0 ; 30
 5309	                db      12, 7, 0, 0, 0, 2, 2, 0,12, 1,12, 0,10, 4, 4, 0 ; 40
 5310	                db      13, 8,14, 0, 0, 3, 3, 0,12, 6,12, 0, 0, 5, 5, 0 ; 50
 5311	                db      12, 7, 0, 0, 2, 2, 2, 0,12, 1,12, 0,11, 4, 4, 0 ; 60
 5312	                db      13, 8,14, 0, 3, 3, 3, 0,12, 6,12, 0,15, 5, 5, 0 ; 70
 5313	                db      13, 7, 0, 0, 2, 2, 2, 0,12, 1,12, 0, 4, 4, 4, 0 ; 80
 5314	                db      13, 8,14, 0, 3, 3, 9, 0,12, 6,12, 0, 4, 5, 5, 0 ; 90
 5315	                db       1, 7, 1, 0, 2, 2, 2, 0,12, 1,12, 0, 4, 4, 4, 0 ; A0
 5316	                db      13, 8,14, 0, 3, 3, 9, 0,12, 6,12, 0, 5, 5, 6, 0 ; B0
 5317	                db       1, 7, 0, 0, 2, 2, 2, 0,12, 1,12, 0, 4, 4, 4, 0 ; C0
 5318	                db      13, 8,14, 0, 0, 3, 3, 0,12, 6,12, 0, 0, 5, 5, 0 ; D0
 5319	                db       1, 7, 0, 0, 2, 2, 2, 0,12, 1,12, 0, 4, 4, 4, 0 ; E0
 5320	                db      13, 8,14, 0, 0, 3, 3, 0,12, 6,12, 0, 0, 5, 5, 0 ; F0
 5321	
 5322	
 5323	
 5324	;                       NoOp #$   $.   $.X  $.Y  $..  $..X $..Y (X)  ()Y  ()   (....,X)
 5325	AsmTab1         db      0FFh,0A9h,0A5h,0B5h,0FFh,0ADh,0BDh,0B9h,0A1h,0B1h,0B2h,0FFh ;LDA
 5326	                db      0FFh,0A2h,0A6h,0FFh,0B6h,0AEh,0FFh,0BEh,0FFh,0FFh,0FFh,0FFh ;LDX
 5327	                db      0FFh,0A0h,0A4h,0B4h,0FFh,0ACh,0BCh,0FFh,0FFh,0FFh,0FFh,0FFh ;LDY
 5328	                db      0FFh,0FFh,085h,095h,0FFh,08Dh,09Dh,099h,081h,091h,092h,0FFh ;STA
 5329	                db      0FFh,0FFh,086h,0FFh,096h,08Eh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;STX
 5330	                db      0FFh,0FFh,084h,094h,0FFh,08Ch,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;STY
 5331	                db      0AAh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;TAX
 5332	                db      0A8h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;TAY
 5333	                db      0BAh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;TSX
 5334	                db      08Ah,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;TXA
 5335	                db      09Ah,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;TXS
 5336	                db      098h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;TYA
 5337	                db      048h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;PHA
 5338	                db      008h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;PHP
 5339	                db      068h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;PLA
 5340	                db      028h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;PLP
 5341	                db      0FFh,069h,065h,075h,0FFh,06Dh,07Dh,079h,061h,071h,072h,0FFh ;ADC
 5342	                db      0FFh,0E9h,0E5h,0F5h,0FFh,0EDh,0FDh,0F9h,0E1h,0F1h,0F2h,0FFh ;SBC
 5343	                db      01Ah,0FFh,0E6h,0F6h,0FFh,0EEh,0FEh,0FFh,0FFh,0FFh,0FFh,0FFh ;INC
 5344	                db      0E8h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;INX
 5345	                db      0C8h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;INY
 5346	                db      03Ah,0FFh,0C6h,0D6h,0FFh,0CEh,0DEh,0FFh,0FFh,0FFh,0FFh,0FFh ;DEC
 5347	                db      0CAh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;DEX
 5348	                db      088h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;DEY
 5349	                db      0FFh,029h,025h,035h,0FFh,02Dh,03Dh,039h,021h,031h,032h,0FFh ;AND
 5350	                db      0FFh,009h,005h,015h,0FFh,00Dh,01Dh,019h,001h,011h,012h,0FFh ;ORA
 5351	                db      0FFh,049h,045h,055h,0FFh,04Dh,05Dh,059h,041h,051h,052h,0FFh ;EOR
 5352	                db      00Ah,0FFh,006h,016h,0FFh,00Eh,01Eh,0FFh,0FFh,0FFh,0FFh,0FFh ;ASL
 5353	                db      04Ah,0FFh,046h,056h,0FFh,04Eh,05Eh,0FFh,0FFh,0FFh,0FFh,0FFh ;LSR
 5354	                db      02Ah,0FFh,026h,036h,0FFh,02Eh,03Eh,0FFh,0FFh,0FFh,0FFh,0FFh ;ROL
 5355	                db      06Ah,0FFh,066h,076h,0FFh,06Eh,07Eh,0FFh,0FFh,0FFh,0FFh,0FFh ;ROR
 5356	                db      0FFh,0C9h,0C5h,0D5h,0FFh,0CDh,0DDh,0D9h,0C1h,0D1h,0D2h,0FFh ;CMP
 5357	                db      0FFh,0E0h,0E4h,0FFh,0FFh,0ECh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;CPX
 5358	                db      0FFh,0C0h,0C4h,0FFh,0FFh,0CCh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;CPY
 5359	                db      0FFh,089h,024h,034h,0FFh,02Ch,03Ch,0FFh,0FFh,0FFh,0FFh,0FFh ;BIT
 5360	                db      0FFh,0FFh,0FFh,0FFh,0FFh,090h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BCC
 5361	                db      0FFh,0FFh,0FFh,0FFh,0FFh,0B0h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BCS
 5362	                db      0FFh,0FFh,0FFh,0FFh,0FFh,0F0h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BEQ
 5363	                db      0FFh,0FFh,0FFh,0FFh,0FFh,030h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BMI
 5364	                db      0FFh,0FFh,0FFh,0FFh,0FFh,0D0h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BNE
 5365	                db      0FFh,0FFh,0FFh,0FFh,0FFh,010h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BPL
 5366	                db      0FFh,0FFh,0FFh,0FFh,0FFh,050h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BVC
 5367	                db      0FFh,0FFh,0FFh,0FFh,0FFh,070h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BVS
 5368	                db      0FFh,0FFh,0FFh,0FFh,0FFh,080h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BRA
 5369	                db      0FFh,0FFh,0FFh,0FFh,0FFh,04Ch,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;JMP
 5370	                db      0FFh,0FFh,0FFh,0FFh,0FFh,020h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;JSR
 5371	                db      060h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;RTS
 5372	                db      040h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;RTI
 5373	                db      0FFh,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;BRK
 5374	                db      0EAh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;NOP
 5375	                db      018h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;CLC
 5376	                db      0D8h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;CLD
 5377	                db      058h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;CLI
 5378	                db      0B8h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;CLV
 5379	                db      038h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;SEC
 5380	                db      0F8h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;SED
 5381	                db      078h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;SEI
 5382	                db      0FFh,0FFh,004h,0FFh,0FFh,00Ch,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;TSB
 5383	                db      0FFh,0FFh,014h,0FFh,0FFh,01Ch,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;TRB
 5384	                db      05Ah,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;PHY
 5385	                db      0DAh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;PHX
 5386	                db      07Ah,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;PLY
 5387	                db      0FAh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ;PLX
 5388	                db      0FFh,0FFh,064h,074h,0FFh,09Ch,09Eh,0FFh,0FFh,0FFh,0FFh,0FFh ;STZ
 5389	
 5390	Debug           ends
 5391	
 5392	                END
 5393	

Generated by GNU Enscript 1.6.6, and GophHub 1.3.