home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Emulatoren / amigacpe.lzh / cpe1.asm < prev    next >
Encoding:
Assembly Source File  |  1995-02-14  |  43.6 KB  |  2,328 lines

  1. ; *******************************************************************
  2. ; * Amstrad CPC emulator v1.02 - Amiga version                *
  3. ; * © 1991/92/95 Bernd Schmidt                        *
  4. ; *                                    *
  5. ; * Registers: A2: pointer to memory map                *
  6. ; *           A3: pointer to opcode table                *
  7. ; *           A4: pointer to 64K system RAM                *
  8. ; *           A5: sPCA pointer to simulated pc's base address      *
  9. ; *           A6: Flag table                        *
  10. ; *           A1: return adress                    *
  11. ; *           D0: A'A  D1: F'F D2: BC'BC D3: DE'DE D4: HL'HL       *
  12. ; *           D7: PC                            *
  13. ; *                                    *
  14. ; *******************************************************************
  15.  
  16.     INCLUDE "cpe.inc"
  17.  
  18.     XDEF rambase,amsdos,basic,sysstat,scrbase,stack,ix,iy,xh,yh,xl,yl
  19.     XDEF DoScr,regop1,regop2,regop3,inp,outp,service,memmap
  20.     XDEF inthandler,intena,ffly,codecheck,RedrawArea
  21.     XDEF amscode,ro7code,bascode
  22.     XDEF dosbase,fhandle,DiskBuf
  23.     XDEF DCSeekCurr,idfield,IDTPtr,CurrTrack,trackoffs
  24.     XDEF KeyMatrix,cleanup,crux
  25.  
  26.     XREF simz80,sz80l,calcpca,daasp
  27.     XREF wword,wbyte,gword,gbyte
  28.  
  29.     XREF initcode
  30.  
  31.     SECTION emulator,CODE
  32.  
  33. start:    move.l    a7,SPSave
  34.     clr.w    fileopen
  35.     clr.l    cpcwin
  36.     clr.l    cpcscr
  37.     clr.w    dbflag
  38.  
  39.     move.l    4,a6            ; open libraries
  40.     lea    dosname,a1
  41.     clr.l    d0
  42.     jsr    _OpenLibrary(a6)
  43.     move.l    d0,dosbase
  44.  
  45.     lea    intname,a1
  46.     clr.l    d0
  47.     jsr    _OpenLibrary(a6)
  48.     move.l    d0,intbase
  49.  
  50.     lea    gfxname,a1
  51.     clr.l    d0
  52.     jsr    _OpenLibrary(a6)
  53.     move.l    d0,gfxbase
  54.  
  55.     jsr    OpenDBugWin
  56.  
  57.     jsr    OpenScrMode1
  58.     clr.l    fhandle
  59.     move.l    dosbase,a6        ; load lower rom
  60.     move.l    #lrname,d1
  61.     move.l    #1005,d2
  62.     jsr    _Open(a6)
  63.     tst.l    d0
  64.     bne    lropen
  65.     move.l    #lrname2,d1
  66.     move.l    #1005,d2
  67.     jsr    _Open(a6)
  68.     tst.l    d0
  69.     beq    cleanup
  70. lropen    move.l    d0,fhandle
  71.     move.l    d0,d1
  72.     move.l    #16384,d3
  73.     move.l    #amsdos,d2
  74.     jsr    _Read(a6)
  75.     move.l    fhandle,d1
  76.     jsr    _Close(a6)
  77.  
  78.     clr.l    fhandle
  79.     move.l    #urname,d1        ; load upper (basic) rom
  80.     move.l    #1005,d2
  81.     jsr    _Open(a6)
  82.     tst.l    d0
  83.     bne    uropen
  84.     move.l    #urname2,d1
  85.     move.l    #1005,d2
  86.     jsr    _Open(a6)
  87.     tst.l    d0
  88.     beq    cleanup
  89. uropen    move.l    d0,fhandle
  90.     move.l    d0,d1
  91.     move.l    #16384,d3
  92.     move.l    #basic,d2
  93.     jsr    _Read(a6)
  94.     move.l    fhandle,d1
  95.     jsr    _Close(a6)
  96.  
  97.     clr.l    fhandle
  98.     move.l    #frname,d1        ; load floppy rom
  99.     move.l    #1005,d2
  100.     jsr    _Open(a6)
  101.     tst.l    d0
  102.     bne    fropen
  103.     move.l    #frname2,d1
  104.     move.l    #1005,d2
  105.     jsr    _Open(a6)
  106.     tst.l    d0
  107.     beq    cleanup
  108. fropen    move.l    d0,fhandle
  109.     move.l    d0,d1
  110.     move.l    #16384,d3
  111.     move.l    #rom7,d2
  112.     jsr    _Read(a6)
  113.     move.l    fhandle,d1
  114.     jsr    _Close(a6)
  115.  
  116.     clr.l    fhandle
  117.     move.l    #draname,d1         ; open disk emulation file
  118.     move.l    #1005,d2
  119.     jsr    _Open(a6)
  120.     tst.l    d0
  121.     beq    cleanup
  122.     move.l    d0,fhandle
  123.     move.w    #1,fileopen
  124.  
  125.     bsr    InitCRTC
  126.     bsr    InitScroff
  127.     bsr    reset
  128.     jsr    initcode
  129.  
  130.     jmp    simz80
  131.  
  132. InitScroff
  133.     movem.l d0-d7,-(sp)
  134.     lea    Scroff,a0
  135.     move.w    #7,d7
  136.     move.w    #0,d0    ; line offset
  137.     cmp.b    #0,CRTCregs+1
  138.     beq    ISC_AllNull
  139. ISC_Loop1
  140.     move.w    d0,d1
  141.     move.w    #24,d6
  142.     move.w    #2047,d4
  143. ISC_Loop2
  144.     moveq    #0,d5
  145.     move.b    CRTCregs+1,d5
  146.     add.w    d5,d5
  147.     sub.w    d5,d4
  148.     subq.w    #1,d5
  149.     move.w    d1,d2
  150. ISC_Loop3
  151.     move.w    d2,(a0)+
  152.     addq.w    #1,d2
  153.     dbf    d5,ISC_Loop3
  154.     add.w    #640,d1
  155.     dbf    d6,ISC_Loop2
  156. ISC_Loop4
  157.     move.w    #16000,(a0)+    ; invisible bytes
  158.     dbf    d4,ISC_Loop4
  159.     add.w    #80,d0
  160.     dbf    d7,ISC_Loop1
  161.     movem.l (sp)+,d0-d7
  162.     rts
  163. ISC_AllNull:
  164.     move.w    #16000,(a0)+
  165.     addq.w    #1,d0
  166.     cmp.w    #16384,d0
  167.     bne    ISC_AllNull
  168.     movem.l (sp)+,d0-d7
  169.     rts
  170.  
  171. cleanup move.l    SPSave,a7
  172.     tst.w    fileopen
  173.     beq    cu_dontclose
  174.     move.l    fhandle,d1
  175.     move.l    dosbase,a6
  176.     jsr    _Close(a6)
  177. cu_dontclose
  178.     jsr    CloseWin
  179.     jsr    CloseDBugWin
  180. ;     move.l  dosbase,a6
  181. ;     move.l  #cxname,d1
  182. ;     move.l  #1006,d2
  183. ;     jsr     _Open(a6)
  184. ;     move.l  d0,fhandle
  185. ;     move.l  d0,d1
  186. ;     move.l  #65535,d3
  187. ;     move.l  #rambase,d2
  188. ;     jsr     _Write(a6)
  189. ;     move.l  fhandle,d1
  190. ;     jsr     _Close(a6)
  191.     rts
  192.  
  193. reset    move.b    #9,sysstat
  194.     jsr    RethinkMemMap
  195.     clr.l    d7
  196.     jsr    calcpca
  197.     clr.l    d5
  198.     clr.l    d6
  199.     move.w    #400,intspeed
  200.     move.w    intspeed,intcount
  201.     clr.w    ffly
  202.     clr.w    intena
  203.     move.w    #6,ffcount
  204.     clr.w    intreq
  205.     clr.w    ColMode
  206.     clr.w    Qual
  207.     clr.w    dcstat
  208.     move.l    #idfield,IDTPtr
  209.     move.b    #19,CurrTrack
  210.     movem.l d0-d7/a0-a6,-(sp)
  211.     jsr    DCSeekCurr
  212.     movem.l (sp)+,d0-d7/a0-a6
  213.     rts
  214.  
  215. InitCRTC:
  216.     lea    CRTCregs,a0
  217.     move.b    #40,1(a0)
  218.     move.b    #25,6(a0)
  219.     move.b    #8,9(a0)
  220.     move.w    #$3000,12(a0)
  221.     move.b    #1,crtcscrwidth
  222.     rts
  223.  
  224. inthandler:
  225.     tst.w    ReDrawCount
  226.     beq    ihd_countdown
  227.     subq.w    #1,ReDrawCount
  228.     bne    ihd_countdown
  229.     jsr    RedrawScreen
  230. ihd_countdown
  231.     subq.w    #1,intcount
  232.     bcs    ihd_IRQ
  233. ihd_checkei
  234.     cmp.w    #2,intena
  235.     bne    ihd_testIRQ
  236.     move.w    #1,intena
  237. ihd_end cmp.w    #2,dbflag
  238.     beq    debug
  239.     rts
  240. ihd_IRQ move.w    intspeed,intcount
  241.     addq.w    #1,intreq
  242.     jsr    UpdateKeyMatrix
  243.     move.w    Qual,d6
  244.     and.w    #$7FFF,d6
  245.     cmp.w    #$30,d6
  246.     beq    cleanup
  247.     cmp.w    #$28,d6
  248.     bne    ihd_nodebug
  249.     tst.w    dbflag
  250.     bne    ihd_nodebug
  251.     move.w    #2,dbflag
  252. ihd_nodebug
  253.     cmp.w    #$19,d6
  254.     bne    ihd_noreset
  255.     bsr    reset
  256. ihd_noreset
  257.     moveq.l #0,d6
  258.     subq.w    #1,ffcount
  259.     bcc    ihd_noff
  260.     moveq.l #1,d6
  261.     move.w    #6,ffcount
  262. ihd_noff
  263.     move.w    d6,ffly
  264.     cmp.w    #1,intena
  265.     bne    ihd_checkei
  266. ihd_DoInt
  267.     clr.w    intreq
  268.  ;   move.w  #$888,$DFF180
  269.     subq.w    #2,stack
  270.     addq.l    #4,daasp
  271.     move.w    stack,d5
  272.     move.w    sPC,d6
  273.     jsr    wword
  274.     move.w    #$38,sPC
  275.     jsr    calcpca
  276.     rts
  277. ihd_testIRQ
  278.     tst.w    intreq
  279.     beq    ihd_end
  280.     cmp.w    #1,intena
  281.     bne    ihd_end
  282.     bra    ihd_DoInt
  283.  
  284. debug:    clr.w    Qual
  285.     move.w    #1,dbflag
  286.     movem.l a1-a6,dbadrsave
  287.     movem.l d0-d7,dbregsave
  288. dbinploop:
  289.     move.l    dbhandle,d1
  290.     beq    dbend
  291.     move.l    dosbase,a6
  292.     jsr    dbprintregs
  293.     jsr    dbprintins
  294.     move.l    dbhandle,d1
  295.     move.l    #inpline,d2
  296.     move.l    #255,d3
  297.     jsr    _Read(a6)
  298.     move.w    inpline,d0
  299.     cmp.w    #'i1',d0
  300.     beq    dbinter1
  301.     cmp.w    #'i2',d0
  302.     beq    dbinter2
  303.     cmp.w    #'i3',d0
  304.     beq    dbinter3
  305.     move.b    inpline,d0
  306.     cmp.b    #'c',d0
  307.     beq    dbcolmode
  308.     cmp.b    #'x',d0
  309.     beq    dbend
  310.     cmp.b    #'m',d0
  311.     beq    dbmoni
  312.     cmp.b    #'z',d0
  313.     beq    dbzip
  314.     cmp.b    #'f',d0
  315.     beq    dbfwd
  316.     cmp.b    #'t',d0
  317.     bne    dbwaaaas
  318.     movem.l a1-a6,-(sp)
  319.     movem.l dbadrsave,a1-a6
  320.     movem.l dbregsave,d0-d7
  321.     lea    dbreturn,a1
  322.     jmp    sz80l
  323. dbreturn:
  324.     movem.l d0-d7,dbregsave
  325.     movem.l a1-a6,dbadrsave
  326.     movem.l (sp)+,a1-a6
  327.     bra    dbinploop
  328.  
  329. dbend:    movem.l dbadrsave,a1-a6
  330.     movem.l dbregsave,d0-d7
  331.     clr.w    dbflag
  332. dbret:    lea    sz80l,a1
  333.     rts
  334.  
  335. dbinter1:
  336.     move.w    #400,intspeed
  337.     bra    dbinploop
  338.  
  339. dbinter2:
  340.     move.w    #1000,intspeed
  341.     bra    dbinploop
  342.  
  343. dbinter3:
  344.     move.w    #5000,intspeed
  345.     bra    dbinploop
  346.  
  347. dbcolmode:
  348.     eor.w    #$FFFF,ColMode
  349.     jsr    SetColors
  350.     bra    dbinploop
  351.  
  352. dbmoni: lea    inpline+1,a0
  353.     bsr    gethex
  354.     lea    memmap,a3
  355.     move.w    d0,dbmonad
  356.     moveq    #15,d7
  357. dbmonoutloop:
  358.     move.l    d7,-(sp)
  359.     lea    dbmonistr+3,a2
  360.     lea    hexnums,a1
  361.     move.l    d0,-(sp)
  362.     moveq    #3,d7
  363.     bsr    copyhex
  364.     move.l    (sp)+,d0
  365.     moveq    #15,d6
  366. dbmoninloop:
  367.     lea    dbmonistr,a2
  368.     moveq    #15,d5
  369.     sub.w    d6,d5
  370.     add.w    d5,a2
  371.     add.w    d5,d5
  372.     add.w    d5,a2
  373.     add.w    #6,a2
  374.     move.w    d0,d5
  375.     and.w    #$C000,d5
  376.     rol.w    #4,d5
  377.     move.l    0(a3,d5.w),a0
  378.     movem.l d0/d6,-(sp)
  379.     move.b    0(a0,d0.w),d0
  380.     moveq    #1,d7
  381.     bsr    copyhex
  382.     move.b    #32,(a2)
  383.     movem.l (sp)+,d0/d6
  384.     addq.w    #1,d0
  385.     dbf    d6,dbmoninloop
  386.     move.l    dbhandle,d1
  387.     move.l    #dbmonistr,d2
  388.     moveq    #53,d3
  389.     move.b    #10,dbmonistr+52
  390.     move.l    d0,-(sp)
  391.     jsr    _Write(a6)
  392.     move.l    (sp)+,d0
  393.     move.l    (sp)+,d7
  394.     dbf    d7,dbmonoutloop
  395.     move.w    d0,dbmonad
  396.     bra    dbinploop
  397.  
  398. dbzip:    move.w    dbregsave+30,d5     ; ZIP through a CALL or DJNZ
  399.     move.w    d5,d0
  400.     move.w    d5,d6
  401.     rol.w    #4,d6
  402.     and.w    #$C,d6
  403.     lea    memmap,a3
  404.     move.l    0(a3,d6.w),a3
  405.     moveq    #0,d6
  406.     move.b    0(a3,d5.w),d6
  407.     cmp.b    #$CD,d6
  408.     beq    dbzip_3byt
  409.     cmp.b    #$C3,d6
  410.     beq    dbzip_3byt
  411.     move.b    d6,d5
  412.     and.b    #7,d6
  413.     and.b    #$C0,d5
  414.  
  415.     cmp.b    #$C0,d5
  416.     bne    dbzip_nocall
  417.     cmp.b    #4,d6
  418.     beq    dbzip_3byt
  419.     cmp.b    #2,d6
  420.     beq    dbzip_3byt
  421. dbzip_nocall:
  422.     tst.b    d6
  423.     bne    dbzip_nojr
  424.     tst.b    d5
  425.     beq    dbzip_2byt
  426. dbzip_nojr
  427.     addq.w    #1,d0
  428.     bra    dbfwdcont
  429. dbzip_3byt
  430.     addq.w    #3,d0
  431.     bra    dbfwdcont
  432. dbzip_2byt
  433.     addq.w    #2,d0
  434.     bra    dbfwdcont
  435.  
  436. dbfwd:    lea    inpline+1,a0
  437.     bsr    gethex
  438. dbfwdcont:
  439.     move.w    d0,dbwaitad
  440.     movem.l a1-a6,-(sp)
  441.     movem.l dbadrsave,a1-a6
  442.     movem.l dbregsave,d0-d7
  443.     lea    dbfwdret,a1
  444. dbfwdloop:
  445.     jmp    sz80l
  446. dbfwdret:
  447.     move.w    Qual,d6
  448.     cmp.b    #$28,d6
  449.     beq    dbfwdend
  450.     cmp.w    dbwaitad,d7
  451.     bne    dbfwdloop
  452. dbfwdend:
  453.     movem.l d0-d7,dbregsave
  454.     movem.l a1-a6,dbadrsave
  455.     movem.l (sp)+,a1-a6
  456.     bra    dbinploop
  457.  
  458. dbwaaaas:
  459.     move.l    #SyntaxError,d2
  460.     move.l    dbhandle,d1
  461.     move.l    #SynErrEnd-SyntaxError,d3
  462.     jsr    _Write(a6)
  463.     bra    dbinploop
  464.  
  465. dbprintins:
  466.     lea    dbinsstr,a0
  467.     lea    hexnums,a1
  468.     lea    3(a0),a2
  469.     moveq    #3,d7
  470.     move.w    dbregsave+30,d0  ; PC
  471.     bsr    copyhex
  472.  
  473.     move.w    dbregsave+30,d5
  474.     move.w    d5,d6
  475.     rol.w    #4,d6
  476.     and.w    #$C,d6
  477.     lea    memmap,a3
  478.     move.l    0(a3,d6.w),a3
  479.     add.w    d5,a3
  480.     moveq.l #3,d4
  481.     moveq.l #6,d3
  482.     move.b    (a3),d6
  483.     move.w    d6,-(sp)
  484.     lea    dbinsbytes,a4
  485. dbins_pbytes
  486.     lea    0(a0,d3.w),a2
  487.     move.b    (a3)+,d0
  488.     move.b    d0,(a4)+
  489.     moveq    #1,d7
  490.     bsr    copyhex
  491.     addq.w    #2,d3
  492.     dbf    d4,dbins_pbytes
  493.     move.w    (sp)+,d6
  494.     lea    14(a0),a2
  495.     cmp.b    #$CB,d6
  496.     beq    dbins_preCB
  497.     cmp.b    #$ED,d6
  498.     beq    dbins_preED
  499.     cmp.b    #$40,d6
  500.     bcs    dbins_lower40
  501.     cmp.b    #$C0,d6
  502.     bcc    dbins_upper40
  503.     cmp.b    #$80,d6
  504.     bcs    dbins_lds
  505.     bsr    dbins_pt80BF
  506.     bra    dbins_nxt
  507. dbins_lds
  508.     bsr    dbins_pt407F
  509.     bra    dbins_nxt
  510. dbins_lower40
  511.     bsr    dbins_pt003F
  512.     bra    dbins_nxt
  513. dbins_upper40
  514.     bsr    dbins_ptC0FF
  515.     bra    dbins_nxt
  516. dbins_preCB:
  517.     bsr    dbins_CBxx
  518.     bra    dbins_nxt
  519. dbins_preED:
  520.     bsr    dbins_EDxx
  521.     bra    dbins_nxt
  522. dbins_nxt:
  523.     move.l    dbhandle,d1
  524.     move.l    #dbinsstr,d2
  525.     move.l    d2,a0
  526.     moveq    #0,d3
  527. dbins_count
  528.     addq.w    #1,d3
  529.     move.b    (a0)+,d0
  530.     bne    dbins_count
  531.     lea    dbinsbytes+1,a4
  532.     move.l    a0,a2
  533. dbins_findnn
  534.     subq.w    #1,a2
  535. dbins_testnn
  536.     move.b    (a2),d0
  537.     cmp.b    #32,d0
  538.     beq    dbins_nnend
  539.     cmp.b    #'n',d0
  540.     bne    dbins_findnn
  541.     move.b    (a4)+,d0
  542.     moveq    #1,d7
  543.     bsr    copyhex
  544.     bra    dbins_testnn
  545. dbins_nnend
  546.     move.b    #0,(a0)
  547.     move.b    #10,-1(a0)
  548.     jsr    _Write(a6)
  549.     rts
  550.  
  551. dbins_EDxx:
  552.     move.l    dbinsbytes,d0
  553.     lsl.l    #8,d0
  554.     move.l    d0,dbinsbytes
  555.     move.b    dbinsbytes,d6
  556.     move.b    d6,d5
  557.     cmp.w    #$40,d6
  558.     bcs    dbED_illg
  559.     cmp.b    #$BC,d6
  560.     bcc    dbED_illg
  561.     sub.w    #$40,d6     ; lowest ED command $40
  562.     lea    EDTab,a3
  563.     add.w    d6,d6
  564.     add.w    d6,d6
  565.     and.w    #$1ff,d6
  566.     move.l    0(a3,d6.w),a3
  567.     bsr    CopyA3A2
  568.     rts
  569. dbED_illg
  570.     move.w    #$4C,d6     ; illegal code
  571.     bra    dbins_EDxx
  572.  
  573. dbins_CBxx:
  574.     move.l    dbinsbytes,d0
  575.     lsl.l    #8,d0
  576.     move.l    d0,dbinsbytes
  577.     move.b    dbinsbytes,d6
  578.     move.b    d6,d5
  579.     cmp.b    #$40,d6
  580.     bcc    dbCB_BRS
  581.     lea    CBRLTab,a3
  582.     and.w    #$38,d5
  583.     lsr.w    #1,d5
  584.     move.l    0(a3,d5.w),a3
  585.     bsr    CopyA3A2
  586.     subq.w    #1,a2
  587.     lea    opertab,a3
  588.     and.w    #7,d6
  589.     add.w    d6,d6
  590.     add.w    d6,d6
  591.     move.l    0(a3,d6.w),a3
  592.     bsr    CopyA3A2
  593.     rts
  594. dbCB_BRS
  595.     and.w    #$C0,d5
  596.     sub.w    #$40,d5
  597.     lsr.w    #4,d5
  598.     lea    BRSTab,a3
  599.     move.l    0(a3,d5.w),a3
  600.     bsr    CopyA3A2
  601.     move.b    #',',(a2)
  602.     move.w    d6,d5
  603.     and.w    #$38,d5
  604.     lsr.w    #3,d5
  605.     add.b    #'0',d5
  606.     move.b    d5,-1(a2)
  607.     addq.w    #1,a2
  608.     lea    opertab,a3
  609.     and.w    #7,d6
  610.     add.w    d6,d6
  611.     add.w    d6,d6
  612.     move.l    0(a3,d6.w),a3
  613.     bsr    CopyA3A2
  614.  
  615. dbins_pt003F:
  616.     lea    instab1,a3
  617.     add.w    d6,d6
  618.     add.w    d6,d6
  619.     and.w    #$3FF,d6
  620.     move.l    0(a3,d6.w),a3
  621.     bsr    CopyA3A2
  622.     rts
  623.  
  624. dbins_pt407F:
  625.     move.b    #'L',(a2)+
  626.     move.b    #'D',(a2)+
  627.     move.b    #32,(a2)+
  628.     move.b    #32,(a2)+
  629.     lea    opertab,a3
  630.     move.w    d6,d5
  631.     and.w    #$38,d5
  632.     lsr.w    #1,d5
  633.     move.l    0(a3,d5.w),a3
  634.     bsr    CopyA3A2
  635.     move.b    #',',-1(a2)
  636.     lea    opertab,a3
  637.     and.w    #7,d6
  638.     add.w    d6,d6
  639.     add.w    d6,d6
  640.     move.l    0(a3,d6.w),a3
  641.     bsr    CopyA3A2
  642.     rts
  643.  
  644. dbins_pt80BF:
  645.     move.w    d6,d5
  646.     and.w    #$38,d5
  647.     lea    aritab,a3
  648.     lsr.w    #1,d5
  649.     move.l    0(a3,d5.w),a3
  650.     bsr    CopyA3A2
  651.     subq.w    #1,a2
  652.     lea    opertab,a3
  653.     and.w    #7,d6
  654.     add.w    d6,d6
  655.     add.w    d6,d6
  656.     move.l    0(a3,d6.w),a3
  657.     bsr    CopyA3A2
  658.     rts
  659.  
  660. dbins_ptC0FF:
  661.     lea    instab1,a3
  662.     add.w    d6,d6
  663.     add.w    d6,d6
  664.     and.w    #$FF,d6
  665.     add.w    #$100,d6
  666.     move.l    0(a3,d6.w),a3
  667.     bsr    CopyA3A2
  668.     rts
  669.  
  670. CopyA3A2:
  671.     move.b    (a3)+,d0
  672.     move.b    d0,(a2)+
  673.     tst.b    d0
  674.     bne    CopyA3A2
  675.     rts
  676.  
  677. dbprintregs:
  678.     lea    dbregstr,a0
  679.     lea    hexnums,a1
  680.     move.l    a0,d2
  681.     lea    3(a0),a2
  682.     moveq    #1,d7
  683.     move.b    dbregsave+3,d0     ; A
  684.     bsr    copyhex
  685.     lea    8(a0),a2
  686.     moveq    #1,d7
  687.     move.b    dbregsave+7,d0     ; F
  688.     bsr    copyhex
  689.     lea    16(a0),a2
  690.     moveq    #3,d7
  691.     move.w    dbregsave+10,d0  ; BC
  692.     bsr    copyhex
  693.     lea    24(a0),a2
  694.     moveq    #3,d7
  695.     move.w    dbregsave+14,d0  ; DE
  696.     bsr    copyhex
  697.     lea    32(a0),a2
  698.     moveq    #3,d7
  699.     move.w    dbregsave+18,d0  ; HL
  700.     bsr    copyhex
  701.     lea    40(a0),a2
  702.     moveq    #3,d7
  703.     move.w    ix,d0         ; IX
  704.     bsr    copyhex
  705.     lea    48(a0),a2
  706.     moveq    #3,d7
  707.     move.w    iy,d0         ; IY
  708.     bsr    copyhex
  709.     lea    56(a0),a2
  710.     moveq    #3,d7
  711.     move.w    stack,d0     ; SP
  712.     bsr    copyhex
  713.     lea    64(a0),a2
  714.     moveq    #1,d7
  715.     move.w    dbregsave+18,d5  ; (HL)
  716.     move.w    d5,d6
  717.     rol.w    #4,d6
  718.     and.w    #$C,d6
  719.     lea    memmap,a3
  720.     move.l    0(a3,d6.w),a3
  721.     add.w    d5,a3
  722.     move.b    (a3),d0
  723.     bsr    copyhex
  724.  
  725.     lea    74(a0),a2
  726.     moveq    #3,d7
  727.     move.w    stack,d5  ; (SP)
  728.     move.w    d5,d6
  729.     rol.w    #4,d6
  730.     and.w    #$C,d6
  731.     lea    memmap,a3
  732.     move.l    0(a3,d6.w),a3
  733.     add.w    d5,a3
  734.     move.b    1(a3),d0
  735.     lsl.w    #8,d0
  736.     move.b    (a3),d0
  737.     bsr    copyhex
  738.     move.l    #dbregstrend-dbregstr,d3
  739.     jsr    _Write(a6)
  740.     rts
  741.  
  742. copyhex move.b    d0,d6
  743.     and.w    #$F,d6
  744.     move.b    0(a1,d6.w),(a2)
  745.     subq.w    #1,a2
  746.     lsr.w    #4,d0
  747.     dbf    d7,copyhex
  748.     rts
  749.  
  750. gethex: moveq    #0,d0
  751. ghx_loop1
  752.     move.b    (a0)+,d6
  753.     cmp.b    #32,d6
  754.     beq    ghx_loop1
  755.     cmp.b    #0,d6
  756.     beq    ghx_end
  757.     cmp.b    #10,d6
  758.     beq    ghx_end
  759.     subq.w    #1,a0
  760. ghx_loop2
  761.     move.b    (a0)+,d6
  762.     cmp.b    #32,d6
  763.     beq    ghx_end
  764.     cmp.b    #0,d6
  765.     beq    ghx_end
  766.     cmp.b    #10,d6
  767.     beq    ghx_end
  768.     move.w    d6,d5
  769.     cmp.b    #65,d5
  770.     bcc    ghx_alph
  771.     sub.w    #'0',d6
  772.     lsl.w    #4,d0
  773.     add.b    d6,d0
  774.     bra    ghx_loop2
  775. ghx_alph
  776.     bclr    #5,d6
  777.     sub.w    #'A'-10,d6
  778.     lsl.w    #4,d0
  779.     add.b    d6,d0
  780.     bra    ghx_loop2
  781. ghx_end rts
  782.  
  783. RedrawArea:              ; redraw a defined part of screen
  784.     movem.l a1-a6/d0-d7,-(sp) ; D5: CPC start addr; D6: -endaddr
  785.     moveq.l #0,d0
  786.     move.w    d5,d0
  787.     move.w    d6,d1
  788.     sub.w    d5,d1
  789.     bra    RDS_contd
  790.  
  791. RedrawScreen:
  792.     movem.l a1-a6/d0-d7,-(sp)
  793.     moveq.l #0,d0
  794.     move.w    scrbase,d0
  795.     move.w    #$3FFF,d1
  796. RDS_contd:
  797.     lea    Scroff,a0    ; A0 = OffTab
  798.     move.l    cpcplns,a1    ; A1 = Planes
  799.     lea    rambase,a2
  800.     add.w    d0,a2        ; A2 = CPCScreenPtr
  801.     moveq.l #0,d3        ; D3 = CPCScreenOffset
  802.     move.w    d0,d3
  803.     and.w    #$3fff,d3
  804.     move.w    scroff,d4    ; D4 = ScrOff
  805.  
  806.     move.b    sysstat,d2    ; calculate screen mode routine address
  807.     and.w    #3,d2
  808.     add.w    d2,d2
  809.     add.w    d2,d2
  810.     lea    RDSModeTab,a4
  811.     move.l    0(a4,d2.w),a4
  812.     move.w    #$7ff,d0
  813.     move.w    #$3800,d2
  814. RDS_Loop
  815.     move.w    d3,d5
  816.     sub.w    d4,d5
  817.     and.w    d0,d5
  818.     move.w    d3,d6
  819.     and.w    d2,d6
  820.     or.w    d6,d5
  821.     add.w    d5,d5
  822.     move.w    0(a0,d5.w),d5    ; D5 = PlaneOffset
  823.     moveq    #0,d6
  824.     move.b    (a2)+,d6
  825.     jsr    (a4)
  826.     addq.w    #1,d3
  827.     dbra    d1,RDS_Loop
  828. RDS_End:
  829.     movem.l (sp)+,a1-a6/d0-d7
  830.     rts
  831.  
  832. RDS0    movem.w d1/d3,-(sp)
  833.     add.w    d6,d6
  834.     lea    m0cols,a5
  835.     move.w    0(a5,d6.w),d7
  836.     move.w    d5,d6
  837.     lsr.w    #1,d5
  838.     move.w    #$F,d3
  839.     and.w    #1,d6
  840.     bne    RDS0_RightNibble
  841.     rol.w    #4,d7
  842.     move.w    #$F0,d3
  843. RDS0_RightNibble:
  844.     move.l    (a1),a5
  845.     move.b    0(a5,d5.w),d6
  846.     or.w    d3,d6
  847.     eor.w    d3,d6
  848.     move.w    d7,d1
  849.     and.w    d3,d1
  850.     or.w    d1,d6
  851.     move.b    d6,0(a5,d5.w)
  852.     ror.w    #4,d7
  853.     move.l    4(a1),a5
  854.     move.b    0(a5,d5.w),d6
  855.     or.w    d3,d6
  856.     eor.w    d3,d6
  857.     move.w    d7,d1
  858.     and.w    d3,d1
  859.     or.w    d1,d6
  860.     move.b    d6,0(a5,d5.w)
  861.     ror.w    #4,d7
  862.     move.l    8(a1),a5
  863.     move.b    0(a5,d5.w),d6
  864.     or.w    d3,d6
  865.     eor.w    d3,d6
  866.     move.w    d7,d1
  867.     and.w    d3,d1
  868.     or.w    d1,d6
  869.     move.b    d6,0(a5,d5.w)
  870.     ror.w    #4,d7
  871.     move.l    12(a1),a5
  872.     move.b    0(a5,d5.w),d6
  873.     or.w    d3,d6
  874.     eor.w    d3,d6
  875.     move.w    d7,d1
  876.     and.w    d3,d1
  877.     or.w    d1,d6
  878.     move.b    d6,0(a5,d5.w)
  879. RDS0_End:
  880.     movem.w (sp)+,d1/d3
  881.     rts
  882.  
  883. RDS2    move.l    (a1),a5        ; mode 2 is nice and simple :-)
  884.     move.b    d6,0(a5,d5.w)
  885.     rts
  886.  
  887. RDS1    add.w    d6,d6
  888.     lea    m1cols,a5
  889.     move.w    0(a5,d6.w),d7
  890.     move.l    (a1),a5
  891.     move.b    d7,0(a5,d5.w)
  892.     lsr.w    #8,d7
  893.     move.l    4(a1),a5
  894.     move.b    d7,0(a5,d5.w)
  895.     rts
  896.  
  897. RDSModeTab  dc.l    RDS0,RDS1,RDS2,RDS0
  898.  
  899. DoScr    move.b    sysstat,d6    ; update display after Z80
  900.     and.w    #3,d6        ; wrote data into video ram
  901.     add.w    d6,d6
  902.     add.w    d6,d6
  903.     lea    ModeTab,a0
  904.     move.l    0(a0,d6.w),a0
  905.     jmp    (a0)
  906.  
  907. DoMode2 bsr    getscad
  908.     move.l    (a0),a0
  909.     move.b    d6,0(a0,d5.w)
  910.     rts
  911.  
  912. DoMode1 bsr    getscad
  913.     and.w    #$FF,d6
  914.     add.w    d6,d6
  915.     lea    m1cols,a4
  916.     move.w    0(a4,d6.w),d6
  917.     move.l    (a0),a4
  918.     move.b    d6,0(a4,d5.w)
  919.     lsr.w    #8,d6
  920.     move.l    4(a0),a4
  921.     move.b    d6,0(a4,d5.w)
  922.     lea    rambase,a4
  923.     rts
  924.  
  925. DoMode0 movem.l d0-d3/a1,-(sp)
  926.     move.b    0(a4,d5.w),d0    ; get byte from cpc's video ram
  927.     lea    Scroff,a0
  928.     move.w    d5,d6
  929.     and.w    #$3800,d6
  930.     sub.w    scroff,d5
  931.     and.w    #$7FF,d5
  932.     add.w    d6,d5
  933.     add.w    d5,d5
  934.     move.w    0(a0,d5.w),d5
  935.     move.w    d5,d1
  936.     lea    m0cols,a1
  937.     and.w    #$FF,d0
  938.     add.w    d0,d0
  939.     move.w    0(a1,d0.w),d0    ; D0 = Farbcodes; 4 nibbles
  940.     lsr.w    #1,d5        ; divide by 2
  941.     move.w    #$F,d3
  942.     and.w    #1,d1
  943.     bne    DM0_RightNibble
  944.     rol.w    #4,d0        ; one up
  945.     move.w    #$F0,d3
  946. DM0_RightNibble
  947.     move.l    cpcplns,a0
  948.     move.l    (a0)+,a1    ; 4 planes
  949.     move.b    0(a1,d5.w),d2
  950.     or.w    d3,d2
  951.     eor.w    d3,d2
  952.     move.w    d0,d1
  953.     and.w    d3,d1
  954.     or.w    d1,d2
  955.     move.b    d2,0(a1,d5.w)
  956.     ror.w    #4,d0
  957.     move.l    (a0)+,a1
  958.     move.b    0(a1,d5.w),d2
  959.     or.w    d3,d2
  960.     eor.w    d3,d2
  961.     move.w    d0,d1
  962.     and.w    d3,d1
  963.     or.w    d1,d2
  964.     move.b    d2,0(a1,d5.w)
  965.     ror.w    #4,d0
  966.     move.l    (a0)+,a1
  967.     move.b    0(a1,d5.w),d2
  968.     or.w    d3,d2
  969.     eor.w    d3,d2
  970.     move.w    d0,d1
  971.     and.w    d3,d1
  972.     or.w    d1,d2
  973.     move.b    d2,0(a1,d5.w)
  974.     ror.w    #4,d0
  975.     move.l    (a0)+,a1
  976.     move.b    0(a1,d5.w),d2
  977.     or.w    d3,d2
  978.     eor.w    d3,d2
  979.     move.w    d0,d1
  980.     and.w    d3,d1
  981.     or.w    d1,d2
  982.     move.b    d2,0(a1,d5.w)
  983.     lea    sz80l,a1
  984.     movem.l (sp)+,d0-d3/a1
  985.     rts
  986.  
  987. getscad move.b    0(a4,d5.w),d6    ; get byte from cpc's video ram
  988.     lea    Scroff,a0
  989.     move.w    d6,-(sp)
  990.     move.w    d5,d6
  991.     and.w    #$3800,d6
  992.     sub.w    scroff,d5
  993.     and.w    #$7FF,d5
  994.     add.w    d6,d5
  995.     add.w    d5,d5
  996.     move.w    0(a0,d5.w),d5
  997.     move.l    cpcplns,a0
  998.     move.w    (sp)+,d6
  999.     rts
  1000.  
  1001. service clr.w    intcount    ; interrupt before next instruction
  1002.     rts
  1003.  
  1004. outp    cmp.b    #$7F,d5
  1005.     beq    outga
  1006.     cmp.b    #$F4,d5
  1007.     beq    out8255a
  1008.     cmp.b    #$F5,d5
  1009.     beq    out8255b
  1010.     cmp.b    #$F6,d5
  1011.     beq    out8255c
  1012.     cmp.b    #$F7,d5
  1013.     beq    out8255control
  1014.     cmp.b    #$BC,d5
  1015.     beq    outCRTCreg
  1016.     cmp.b    #$BD,d5
  1017.     beq    outCRTCwr
  1018.     cmp.b    #$DF,d5
  1019.     beq    outROMnum
  1020.     cmp.b    #$FB,d5
  1021.     beq    outFB
  1022.     cmp.b    #$FA,d5
  1023.     beq    outFA
  1024.     rts
  1025.  
  1026.  ; about the floppy code...
  1027.  ; Can't say I knew what I was doing. I only had a ROM 7 listing I had
  1028.  ; printed out myself and from that I tried to guess how the FDC works.
  1029.  ; This is somewhat better in the PC version, but not much.
  1030.  ; Unfortunately, the two versions use different disk files.
  1031.  
  1032. outFA:    moveq    #0,d5
  1033.     move.b    sBC,d5
  1034.     lea    dcFAxx,a0
  1035.     move.b    d6,0(a0,d5.w)
  1036.     rts
  1037.  
  1038. outFB:    moveq    #0,d5
  1039.     cmp.b    #$7E,sBC
  1040.     beq    outFB7E
  1041.     cmp.b    #$7F,sBC
  1042.     beq    outFB7F
  1043.     lea    dcFBxx,a0
  1044. outFBend
  1045.     rts
  1046.  
  1047. outFB7E:
  1048.     rts
  1049.  
  1050. outFB7F:
  1051.     move.b    dcstat,d5
  1052.     tst.b    d5
  1053.     beq    oFB7F_newcmd
  1054.     subq.b    #1,d5
  1055.     beq    oFB7F_parms
  1056.     move.b    dcbytecnt,d5
  1057.     subq.b    #1,d5
  1058.     bcs    outFB7F_cmdfinish
  1059.     move.b    d5,dcbytecnt
  1060.     move.l    dcdpt,a0
  1061.     move.b    d6,(a0)+
  1062.     move.l    a0,dcdpt
  1063. outFB7F_end
  1064.     rts
  1065. outFB7F_cmdfinish
  1066.     clr.b    dcstat
  1067.     rts
  1068. oFB7F_parms:
  1069.     move.l    dccppt,a0
  1070.     move.b    d6,(a0)+
  1071.     move.l    a0,dccppt
  1072.     move.b    dcbytecnt,d5
  1073.     subq.b    #1,d5
  1074.     move.b    d5,dcbytecnt
  1075.     tst.b    d5
  1076.     bne    outFB7F_end
  1077. oFB7F_stage2
  1078.     move.l    dccommand,a0
  1079.     move.b    2(a0),dcbytecnt
  1080.     move.l    4(a0),a0
  1081.     move.b    #2,dcstat
  1082.     tst.b    dcbytecnt
  1083.     bne    oFB7F_2ok
  1084.     clr.b    dcstat
  1085. oFB7F_2ok
  1086.     clr.w    dcextdata
  1087.     jmp    (a0)
  1088. oFB7F_newcmd:
  1089.     lea    dccommands,a0
  1090. oFB7Fnc_loop
  1091.     tst.l    (a0)
  1092.     beq    outFB7F_end
  1093.     cmp.b    (a0),d6
  1094.     beq    oFB7Fnc_found
  1095.     add.w    #8,a0
  1096.     bra    oFB7Fnc_loop
  1097. oFB7Fnc_found
  1098.     move.l    a0,dccommand
  1099.     move.b    1(a0),dcbytecnt
  1100.     move.l    #dccmdparms,dccppt
  1101.     move.l    #dcdata,dcdpt
  1102.     move.b    #1,dcstat
  1103.     tst.b    dcbytecnt
  1104.     beq    oFB7F_stage2
  1105.     rts
  1106.  
  1107. outROMnum:
  1108.     move.w    romnum,d5
  1109.     cmp.b    d5,d6
  1110.     beq    outROM_old
  1111.     move.b    d6,d5
  1112.     move.w    d5,romnum
  1113.     bsr    RethinkMemMap
  1114. outROM_old:
  1115.     rts
  1116.  
  1117. outCRTCreg:
  1118.     move.b    d6,CRTCregnum
  1119.     rts
  1120.  
  1121. outCRTCwr:
  1122.     moveq.l #0,d5
  1123.     move.b    CRTCregnum,d5
  1124.     lea    CRTCregs,a0
  1125.     move.b    d6,0(a0,d5.w)
  1126.     cmp.w    #1,d5
  1127.     beq    CRTC_NewWidth
  1128.     cmp.w    #12,d5
  1129.     bcs    CRTC_nonewparms
  1130.     cmp.w    #14,d5
  1131.     bcc    CRTC_nonewparms
  1132.     move.w    12(a0),d5
  1133.     add.w    d5,d5
  1134.     move.w    d5,d6
  1135.     add.w    d6,d6
  1136.     and.w    #$7FE,d5
  1137.     and.w    #$C000,d6
  1138.     cmp.w    scrbase,d6
  1139.     bne    CRTC_newparms
  1140.     cmp.w    scroff,d5
  1141.     beq    CRTC_nonewparms
  1142. CRTC_newparms
  1143.     move.w    d6,scrbase
  1144.     move.w    d5,scroff
  1145.     move.w    #20,ReDrawCount
  1146. CRTC_nonewparms
  1147.     rts
  1148.  
  1149. CRTC_NewWidth
  1150.     cmp.b    crtcscrwidth,d6
  1151.     beq    CRTC_nonewparms
  1152.     move.w    #20,ReDrawCount
  1153.     move.b    d6,crtcscrwidth
  1154.     jmp    InitScroff
  1155.  
  1156. out8255a:
  1157.     move.b    d6,port8255a
  1158.     rts
  1159.  
  1160. out8255b:
  1161.     move.b    d6,port8255b
  1162.     rts
  1163.  
  1164. out8255c:
  1165.     move.b    d6,port8255c
  1166.     lsr.w    #6,d6
  1167.     and.w    #3,d6
  1168.     beq    inactivepsg
  1169.     cmp.w    #3,d6
  1170.     beq    latchpsg
  1171.     cmp.w    #2,d6
  1172.     beq    writepsg
  1173.     rts
  1174.  
  1175. out8255control:
  1176.     move.b    d6,control8255
  1177.     rts
  1178.  
  1179.  ; sorry, no sound on the Amiga :-(
  1180.  
  1181. inactivepsg:
  1182.     rts
  1183.  
  1184. writepsg:
  1185.     moveq.l #0,d5
  1186.     move.b    psgregnum,d5
  1187.     lea    psgregs,a0
  1188.     move.b    port8255a,0(a0,d5.w)
  1189.     rts
  1190.  
  1191. latchpsg:
  1192.     move.b    port8255a,d6
  1193.     and.b    #15,d6
  1194.     move.b    d6,psgregnum
  1195.     rts
  1196.  
  1197. outga    move.w    d6,d5
  1198.     lsr.w    #6,d5
  1199.     and.w    #$3,d5
  1200.     lea    rgsgarr,a0
  1201.     and.b    #$3F,d6
  1202.     move.b    d6,0(a0,d5.w)
  1203.     cmp.w    #2,d5
  1204.     bne    1$
  1205.     bsr    RethinkMemMap
  1206.     bsr    RethinkMode
  1207. 1$    cmp.w    #1,d5
  1208.     beq    ga_setcol
  1209.     rts
  1210.  
  1211. ga_setcol
  1212.     movem.l d0/d1/d2/d3/a1/a6,-(sp)
  1213.     move.l    cpcvp,a0
  1214.     moveq.l #0,d0
  1215.     move.b    rgsgarr,d0
  1216.     cmp.b    #16,d0
  1217.     beq    ga_sc_end
  1218.     and.w    #15,d0
  1219.     move.w    d0,d1
  1220.     add.w    d1,d1
  1221.     add.w    d1,d1
  1222.     move.b    rgsgarr+1,d6
  1223.     and.w    #$1f,d6
  1224.     cmp.w    #20,d6
  1225.     bne    ga_sc_nobreak
  1226.     cmp.w    #0,d1
  1227.     bne    ga_sc_nobreak
  1228.     nop
  1229. ga_sc_nobreak:
  1230.     add.w    d6,d6
  1231.     add.w    d6,d6
  1232.     lea    CMap,a6
  1233.     lea    ColorTab,a1
  1234.     move.l    0(a1,d6.w),0(a6,d1.w)
  1235.     tst.w    ColMode
  1236.     beq    ga_sc_norm
  1237.     lea    ColorTabA,a1
  1238.     moveq    #0,d6
  1239.     move.b    rgsgarr,d6
  1240.     add.w    d6,d6
  1241.     add.w    d6,d6
  1242. ga_sc_norm
  1243.     move.b    1(a1,d6.w),d1
  1244.     move.b    2(a1,d6.w),d2
  1245.     move.b    3(a1,d6.w),d3
  1246.     move.l    gfxbase,a6
  1247.     jsr    -288(a6)    ; SetRGB4
  1248. ga_sc_end
  1249.     movem.l (sp)+,d0/d1/d2/d3/a1/a6
  1250.     rts
  1251.  
  1252. SetColors
  1253.     movem.l d0-d3/a4-a6,-(sp)
  1254.     lea    CMap,a4
  1255.     tst.w    ColMode
  1256.     beq    SCL_Norm
  1257.     lea    CMapSpecial,a4
  1258. SCL_Norm
  1259.     move.l    gfxbase,a6
  1260.     moveq    #0,d0
  1261.     moveq    #15,d6
  1262. SCL_Loop
  1263.     move.w    (a4)+,d1
  1264.     move.b    (a4)+,d2
  1265.     move.b    (a4)+,d3
  1266.     move.l    cpcvp,a0
  1267.     move.w    d0,-(sp)
  1268.     jsr    -288(a6)
  1269.     move.w    (sp)+,d0
  1270.     addq.w    #1,d0
  1271.     dbf    d6,SCL_Loop
  1272.     movem.l (sp)+,d0-d3/a4-a6
  1273.     rts
  1274.  
  1275. inp    cmp.b    #$F4,d5
  1276.     beq    inpioA
  1277.     cmp.b    #$F5,d5
  1278.     beq    inpioB
  1279.     cmp.b    #$F6,d5
  1280.     beq    inpioC
  1281.     cmp.b    #$FB,d5
  1282.     beq    inpFB
  1283.     move.b    $DFF014,d6
  1284.     move.b    $DFF006,d5
  1285.     eor.b    d5,d6
  1286.     rts
  1287.  
  1288. inpFB:    cmp.b    #$7F,sBC
  1289.     beq    inpFB7F
  1290.     cmp.b    #$7E,sBC
  1291.     beq    inpFB7E
  1292. inpFBxx move.w    #$FF,d6
  1293.     rts
  1294.  
  1295. inpFB7E move.w    #$80,d6
  1296.     cmp.b    #2,dcstat
  1297.     bne    inpFB7Eend
  1298.     or.w    #$40,d6
  1299.     tst.w    dcextdata
  1300.     beq    inpFB7Enoext
  1301.     or.w    #$20,d6
  1302.     bra    inpFB7Eend
  1303. inpFB7Enoext
  1304.     tst.b    dcbytecnt
  1305.     beq    inpFB7Ffinish
  1306.     or.w    #$10,d6
  1307. inpFB7Eend
  1308.     rts
  1309.  
  1310. inpFB7F move.b    dcstat,d5
  1311.     cmp.b    #1,d5
  1312.     beq    oFB7F_parms
  1313.     cmp.b    #2,d5
  1314.     bne    inpFB7Fend
  1315.     move.w    dcextdata,d5
  1316.     beq    inpFB7F_normdata
  1317.     subq.w    #1,d5
  1318.     move.w    d5,dcextdata
  1319.     move.l    dcedp,a0
  1320.     move.b    (a0)+,d6
  1321.     move.l    a0,dcedp
  1322.     bra    inpFB7Fend
  1323. inpFB7F_normdata
  1324.     move.b    dcbytecnt,d5
  1325.     subq.b    #1,d5
  1326.     bcs    inpFB7Ffinish
  1327.     move.b    d5,dcbytecnt
  1328.     move.l    dcdpt,a0
  1329.     move.b    (a0)+,d6
  1330.     move.l    a0,dcdpt
  1331. inpFB7Fend
  1332.     rts
  1333.  
  1334. inpFB7Ffinish
  1335.     clr.b    dcstat
  1336.     rts
  1337.  
  1338. inpioA:
  1339.     move.b    port8255c,d6
  1340.     lsr.w    #6,d6
  1341.     and.w    #3,d6
  1342.     cmp.w    #1,d6
  1343.     beq    readpsg
  1344.     move.b    port8255a,d6
  1345.     rts
  1346.  
  1347. readpsg:
  1348.     move.b    psgregnum,d6
  1349.     cmp.b    #14,d6
  1350.     beq    readpsgext
  1351.     rts
  1352.  
  1353. readpsgext:
  1354.     move.b    #$FF,d6
  1355.     move.b    port8255c,d5
  1356.     and.w    #$F,d5
  1357.     lea    KeyMatrix,a0
  1358.     move.b    0(a0,d5.w),d6
  1359.     rts
  1360.  
  1361. inpioB: move.w    #$1E,d6     ; company: AMSTRAD, freq: 50HZ
  1362.     or.w    ffly,d6
  1363.     rts            ; Printer not busy
  1364.  
  1365. inpioC: move.b    port8255c,d6
  1366.     rts
  1367.  
  1368. RethinkMode:
  1369.     move.b    sysstat,d6
  1370.     and.w    #$3,d6
  1371.     cmp.w    videomode,d6
  1372.     beq    RTM_End
  1373.     movem.l d0-d3/a0-a6,-(sp)
  1374.     jsr    CloseWin
  1375.     move.w    d6,videomode
  1376.     cmp.b    #1,d6
  1377.     beq    RTM_1
  1378.     cmp.b    #2,d6
  1379.     beq    RTM_2
  1380.     bsr    OpenScrMode0
  1381.     bra    RTM_cont
  1382. RTM_2    bsr    OpenScrMode2
  1383.     bra    RTM_cont
  1384. RTM_1    bsr    OpenScrMode1
  1385. RTM_cont
  1386.     movem.l (sp)+,d0-d3/a0-a6
  1387.     move.w    #20,ReDrawCount
  1388. RTM_End rts
  1389.  
  1390. OpenScrMode1:
  1391.     move.w    #1,videomode
  1392.     move.l    intbase,a6        ; open screen
  1393.     lea    nscreen,a0
  1394.     move.w    #640,4(a0)
  1395.     move.w    #2,8(a0)        ; 2 planes
  1396.     move.w    #$8000,12(a0)
  1397.     jsr    _OpenScreen(a6)
  1398.     tst.l    d0
  1399.     beq    cleanup
  1400.     move.l    d0,cpcscr
  1401.     move.l    d0,nwindow+30
  1402.     move.l    d0,a0
  1403.     lea    44(a0),a0
  1404.     move.l    a0,cpcvp
  1405.     lea    nwindow,a0        ; open window
  1406.     move.w    #640,4(a0)
  1407.     jsr    _OpenWindow(a6)
  1408.     tst.l    d0
  1409.     beq    cleanup
  1410.     move.l    d0,cpcwin
  1411.     move.l    d0,a0
  1412.     move.l    86(a0),cpcup
  1413.     move.l    50(a0),cpcrp
  1414.     move.l    50(a0),a0
  1415.     move.l    4(a0),a0
  1416.     lea    8(a0),a0
  1417.     move.l    a0,cpcplns
  1418.     bsr    SetColors
  1419.     rts
  1420.  
  1421. OpenScrMode2:
  1422.     move.w    #2,videomode
  1423.     move.l    intbase,a6        ; open screen
  1424.     lea    nscreen,a0
  1425.     move.w    #640,4(a0)
  1426.     move.w    #1,8(a0)
  1427.     move.w    #$8000,12(a0)
  1428.     jsr    _OpenScreen(a6)
  1429.     tst.l    d0
  1430.     beq    cleanup
  1431.     move.l    d0,nwindow+30
  1432.     move.l    d0,cpcscr
  1433.     move.l    d0,a0
  1434.     lea    44(a0),a0
  1435.     move.l    a0,cpcvp
  1436.     lea    nwindow,a0        ; open window
  1437.     move.w    #640,4(a0)
  1438.     jsr    _OpenWindow(a6)
  1439.     tst.l    d0
  1440.     beq    cleanup
  1441.     move.l    d0,cpcwin
  1442.     move.l    d0,a0
  1443.     move.l    86(a0),cpcup
  1444.     move.l    50(a0),cpcrp
  1445.     move.l    50(a0),a0
  1446.     move.l    4(a0),a0
  1447.     lea    8(a0),a0
  1448.     move.l    a0,cpcplns
  1449.     bsr    SetColors
  1450.     rts
  1451.  
  1452. OpenScrMode0:
  1453.     move.w    #0,videomode
  1454.     move.l    intbase,a6        ; open screen
  1455.     lea    nscreen,a0
  1456.     move.w    #320,4(a0)
  1457.     move.w    #4,8(a0)        ; 4 planes
  1458.     move.w    #0,12(a0)
  1459.     jsr    _OpenScreen(a6)
  1460.     tst.l    d0
  1461.     beq    cleanup
  1462.     move.l    d0,cpcscr
  1463.     move.l    d0,a0
  1464.     move.l    d0,nwindow+30
  1465.     lea    44(a0),a0
  1466.     move.l    a0,cpcvp
  1467.     lea    nwindow,a0        ; open window
  1468.     move.w    #320,4(a0)
  1469.     jsr    _OpenWindow(a6)
  1470.     tst.l    d0
  1471.     beq    cleanup
  1472.     move.l    d0,cpcwin
  1473.     move.l    d0,a0
  1474.     move.l    86(a0),cpcup
  1475.     move.l    50(a0),cpcrp
  1476.     move.l    50(a0),a0
  1477.     move.l    4(a0),a0
  1478.     lea    8(a0),a0
  1479.     move.l    a0,cpcplns
  1480.     bsr    SetColors
  1481.     rts
  1482.  
  1483. CloseWin:
  1484.     move.l    intbase,a6
  1485.     move.l    cpcwin,d0
  1486.     beq    CLOSE_NoWin
  1487.     jsr    ClearWindowPort
  1488.     move.l    cpcwin,a0        ; close all
  1489.     jsr    _CloseWindow(a6)
  1490.     clr.l    cpcwin
  1491. CLOSE_NoWin
  1492.     move.l    cpcscr,d0
  1493.     beq    CLOSE_Ret
  1494.     move.l    d0,a0
  1495.     jsr    _CloseScreen(a6)
  1496.     clr.l    cpcscr
  1497. CLOSE_Ret
  1498.     rts
  1499.  
  1500. RethinkMemMap:
  1501.     move.b    sysstat,d6
  1502.     lea    memmap,a0
  1503.     btst    #2,d6
  1504.     beq    RMM_LRomEnable
  1505.     move.l    #rambase,(a0)
  1506.     move.l    #0,codemap
  1507.     bra    RMM_TestUpper
  1508. RMM_LRomEnable
  1509.     move.l    #amsdos,(a0)
  1510.     move.l    #amscode,codemap
  1511. RMM_TestUpper
  1512.     btst    #3,d6
  1513.     beq    RMM_URomEnable
  1514.     move.l    #rambase,12(a0)
  1515.     move.l    #0,codemap+12
  1516.     rts
  1517. RMM_URomEnable
  1518.     cmp.w    #7,romnum
  1519.     beq    RMM_SetFloppy
  1520.     move.l    #basic+$4000,12(a0)
  1521.     move.l    #bascode-$30000,codemap+12
  1522.     rts
  1523. RMM_SetFloppy
  1524.     move.l    #rom7+$4000,12(a0)
  1525.     move.l    #ro7code-$30000,codemap+12
  1526.     rts
  1527.  
  1528. UpdateKeyMatrix:
  1529.     movem.l d0/d1/a1/a4-a6,-(sp)
  1530.     move.l    4,a6
  1531.     lea    KeyMatrix,a5
  1532.     lea    KeyCodeTab,a4
  1533. UKM_Loop:
  1534.     move.l    cpcup,a0
  1535.     jsr    _GetMsg(a6)
  1536.     tst.l    d0
  1537.     beq    UKM_End
  1538.     move.l    d0,a1
  1539.     move.l    20(a1),d0
  1540.     cmp.w    #$400,d0
  1541.     bne    UKM_Reply
  1542.     move.w    24(a1),d0
  1543.     move.w    26(a1),Qual
  1544.     move.w    d0,d1
  1545.     and.w    #$7F,d0
  1546.     and.w    #$80,d1
  1547.     beq    UKM_Pressed
  1548.     move.b    0(a4,d0.w),d0
  1549.     move.b    d0,d1
  1550.     lsr.w    #4,d1
  1551.     and.w    #$F,d0
  1552.     and.w    #$F,d1
  1553.     move.b    0(a5,d1.w),d6
  1554.     bset    d0,d6
  1555.     move.b    d6,0(a5,d1.w)
  1556.     bra    UKM_Reply
  1557. UKM_Pressed:
  1558.     move.b    0(a4,d0.w),d0
  1559.     move.b    d0,d1
  1560.     lsr.w    #4,d1
  1561.     and.w    #$F,d0
  1562.     and.w    #$F,d1
  1563.     move.b    0(a5,d1.w),d6
  1564.     bclr    d0,d6
  1565.     move.b    d6,0(a5,d1.w)
  1566. UKM_Reply:
  1567.     jsr    _ReplyMsg(a6)
  1568.     bra    UKM_Loop
  1569. UKM_End:
  1570.     movem.l (sp)+,d0/d1/a1/a4-a6
  1571.     rts
  1572.  
  1573. GetWindowMsg:        ; returns Msgpt in d6 or NULL
  1574.     movem.l d0/d1/a0/a1/a6,-(sp)
  1575.     move.l    4,a6
  1576.     move.l    cpcup,a0
  1577.     jsr    _GetMsg(a6)
  1578.     move.l    d0,d6
  1579.     beq    GWM_End
  1580.     move.l    d0,a0
  1581.     move.l    20(a0),Class
  1582.     move.w    24(a0),Code
  1583.     move.w    26(a0),Qual
  1584.     move.l    a0,a1
  1585.     jsr    _ReplyMsg(a6)
  1586. GWM_End:
  1587.     movem.l (sp)+,d0/d1/a0/a1/a6
  1588.     rts
  1589.  
  1590. ClearWindowPort:
  1591.     movem.l d0/d1/a0/a1/a6,-(sp)
  1592.     move.l    4,a6
  1593. CWP_Loop:
  1594.     move.l    cpcup,a0
  1595.     jsr    _GetMsg(a6)
  1596.     tst.l    d0
  1597.     beq    CWP_End
  1598.     move.l    d0,a1
  1599.     jsr    _ReplyMsg(a6)
  1600.     bra    CWP_Loop
  1601. CWP_End:
  1602.     movem.l (sp)+,d0/d1/a0/a1/a6
  1603.     rts
  1604.  
  1605. OpenDBugWin:
  1606.     movem.l d0/d1/a0/a1/a6,-(sp)
  1607.     move.l    #newdbstr,d1
  1608.     move.l    #1006,d2
  1609.     move.l    dosbase,a6
  1610.     jsr    _Open(a6)
  1611.     move.l    d0,dbhandle
  1612.     movem.l (sp)+,d0/d1/a0/a1/a6
  1613.     rts
  1614.  
  1615. CloseDBugWin:
  1616.     movem.l d0/d1/a0/a1/a6,-(sp)
  1617.     move.l    dosbase,a6
  1618.     move.l    dbhandle,d1
  1619.     beq    CDBW_Xit
  1620.     jsr    _Close(a6)
  1621.     clr.l    dbhandle
  1622. CDBW_Xit
  1623.     movem.l (sp)+,d0/d1/a0/a1/a6
  1624.     rts
  1625.  
  1626.  ; This one traps certain addresses in CPC space and replaces Z80 code
  1627.  ; with native Amiga code. This was done mainly for floppy stuff, which
  1628.  ; is no longer needed now. This is DISABLED! The patches only works for
  1629.  ; the 664 ROM!
  1630.  
  1631. codecheck:
  1632.     move.w    d7,d5
  1633.     rol.w    #4,d5
  1634.     and.w    #$C,d5
  1635.     lea    codemap,a0
  1636.     move.l    0(a0,d5.w),d5
  1637.     beq    cck_ret
  1638.     move.l    d5,a0
  1639.     moveq    #0,d5
  1640.     move.w    d7,d5
  1641.     add.l    d5,d5
  1642.     add.l    d5,d5
  1643.     move.l    0(a0,d5.l),d5
  1644.     beq    cck_ret
  1645.     move.l    d5,a0
  1646.     jsr    (a0)
  1647.     moveq    #0,d5
  1648. cck_ret
  1649.     rts
  1650.  
  1651.  ; more floppy stuff... everything a bit awkward
  1652.  
  1653. DCNop:    rts
  1654.  
  1655. DCGetTrack:
  1656.     cmp.w    #1,dcflagntr
  1657.     bne    DCGT_oldtr
  1658.     move.b    CurrTrack,dcdata+1
  1659.     move.b    #32,dcdata
  1660.     subq.w    #1,dcflagntr
  1661.     rts
  1662. DCGT_oldtr
  1663.     tst.w    dcflagntr
  1664.     beq    DCGT_clear
  1665.     move.w    #$8080,dcdata
  1666.     rts
  1667. DCGT_clear
  1668.     clr.w    dcdata
  1669.     subq.w    #1,dcflagntr
  1670.     rts
  1671.  
  1672. DCSeek0:
  1673.     clr.b    CurrTrack
  1674.     bra    DCSeekctd
  1675.  
  1676. DCReadSec:
  1677.     move.l    d7,-(sp)
  1678.     bsr    DCGetID
  1679.     move.b    dccmdparms+3,d5
  1680.     move.b    #$40,dcdata
  1681.     move.b    #$80,dcdata+1
  1682.     moveq.l #0,d7
  1683. DCRS_ReadLoop
  1684.     movem.l d0-d7/a0-a6,-(sp)
  1685.     lea    idfield,a0
  1686.     move.l    trackoffs,d0
  1687.     add.l    #66,d0
  1688.     move.b    d5,dcdata+5
  1689. DCRS_Loop1
  1690.     cmp.b    #$FF,(a0)
  1691.     beq    DCRS_Erreur
  1692.     cmp.b    (a0)+,d5
  1693.     beq    DCRS_found
  1694.     add.l    #512,d0
  1695.     bra    DCRS_Loop1
  1696. DCRS_found
  1697.     move.l    fhandle,d1
  1698.     move.l    d0,d2
  1699.     moveq.l #-1,d3
  1700.     move.l    dosbase,a6
  1701.     jsr    _Seek(a6)
  1702.     move.l    fhandle,d1
  1703.     move.l    #DiskBuf,d2
  1704.     add.l    d7,d2
  1705.     move.l    #512,d3
  1706.     jsr    _Read(a6)
  1707.     movem.l (sp)+,d0-d7/a0-a6
  1708.     add.l    #512,d7
  1709.     move.b    dccmdparms+5,d6
  1710.     cmp.b    d6,d5
  1711.     beq    DCRS_AllRead
  1712.     addq.b    #1,d5
  1713.     bra    DCRS_ReadLoop
  1714. DCRS_AllRead
  1715.     move.w    d7,dcextdata
  1716.     move.l    #DiskBuf,dcedp
  1717.     move.l    (sp)+,d7
  1718.     rts
  1719. DCRS_Erreur:
  1720.     movem.l (sp)+,d0-d7/a0-a6
  1721.     move.b    #4,dcdata+1        ; DC Fehlerkennung
  1722.     bra    DCRS_AllRead
  1723.  
  1724. DCSeek: move.b    dccmdparms+1,CurrTrack
  1725. DCSeekctd:
  1726.     movem.l d0-d7/a1-a6,-(sp)
  1727.     jsr    DCSeekCurr
  1728.     movem.l (sp)+,d0-d7/a1-a6
  1729.     rts
  1730.  
  1731. DCGetID:
  1732.     lea    dcdata,a0
  1733.     moveq    #0,d5
  1734.     move.b    CurrTrack,d5
  1735.     move.l    d5,(a0)+
  1736.     move.b    #2,2(a0)
  1737.     move.l    a1,-(sp)
  1738.  
  1739.     move.l    IDTPtr,a1
  1740.     move.b    (a1)+,d5
  1741.     cmp.b    #$FF,d5
  1742.     bne    DCGI_Wback
  1743.     lea    idfield,a1
  1744.     move.b    (a1)+,d5
  1745. DCGI_Wback
  1746.     move.l    a1,IDTPtr
  1747.     move.w    d5,(a0)
  1748.     cmp.w    #$65,d5
  1749.     bne    DCGI_SizeOK
  1750.     move.b    #3,2(a0)
  1751. DCGI_SizeOK
  1752.     move.l    (sp)+,a1
  1753.     rts
  1754.  
  1755. DCSeekCurr:
  1756.     move.w    #1,dcflagntr
  1757.     moveq    #0,d5
  1758.     move.b    CurrTrack,d5
  1759.     add.w    d5,d5    ; x2
  1760.     move.l    d5,d6
  1761.     lsl.l    #5,d6    ; x64
  1762.     add.l    d6,d5    ; x66
  1763.     lsl.l    #4,d6    ; x1024
  1764.     add.l    d6,d5
  1765.     add.l    d6,d6
  1766.     add.l    d6,d6    ; x4096
  1767.     add.l    d6,d5    ; x5186
  1768.     move.l    d5,d2
  1769.     move.l    d5,trackoffs
  1770.     moveq    #-1,d3
  1771.     move.l    fhandle,d1
  1772.     move.l    dosbase,a6
  1773.     jsr    _Seek(a6)
  1774.     move.l    fhandle,d1
  1775.     move.l    #idfield,d2
  1776.     move.l    d2,IDTPtr
  1777.     move.l    #66,d3
  1778.     jsr    _Read(a6)
  1779.     rts
  1780.  
  1781.     SECTION data,DATA
  1782. dosname dc.b 'dos.library',0
  1783.     EVEN
  1784. intname dc.b 'intuition.library',0
  1785.     EVEN
  1786. gfxname dc.b 'graphics.library',0
  1787.     EVEN
  1788. lrname    dc.b 'Lrom',0
  1789.     EVEN
  1790. lrname2 dc.b 'CPE:LRom',0
  1791.     EVEN
  1792. urname    dc.b 'Urom',0
  1793.     EVEN
  1794. urname2 dc.b 'CPE:URom',0
  1795.     EVEN
  1796. frname    dc.b 'rom7',0
  1797.     EVEN
  1798. frname2 dc.b 'CPE:Rom7',0
  1799.     EVEN
  1800. draname dc.b 'drivea.dat',0
  1801.     EVEN
  1802. newdbstr dc.b 'CON:0/1/640/255/CPE Z80 debugger',0
  1803.     EVEN
  1804. dbregstr dc.b 'A xx F xx BC xxxx DE xxxx HL xxxx IX xxxx IY xxxx SP xxxx (HL) xx (SP) xxxx',10,0
  1805. dbregstrend
  1806.     EVEN
  1807. dbinsstr dc.b 'xxxx xxxxxxxx LD   (IX+4),nnnn',10,0,0,0,0,0
  1808.     EVEN
  1809. hexnums dc.b '0123456789ABCDEF'
  1810.     EVEN
  1811. SyntaxError dc.b    'You typed garbage. No offense meant.',10,0
  1812. SynErrEnd:
  1813.     EVEN
  1814. ins0    dc.b    "NOP",0
  1815. ins1    dc.b    "LD  BC,nnnn",0
  1816. ins2    dc.b    "LD  (BC),A",0
  1817. ins3    dc.b    "INC BC",0
  1818. ins4    dc.b    "INC B",0
  1819. ins5    dc.b    "DEC B",0
  1820. ins6    dc.b    "LD  B,nn",0
  1821. ins7    dc.b    "RLCA",0
  1822. ins8    dc.b    "EX  AF,AF'",0
  1823. ins9    dc.b    "ADD HL,BC",0
  1824. insa    dc.b    "LD  A,(BC)",0
  1825. insb    dc.b    "DEC BC",0
  1826. insc    dc.b    "INC C",0
  1827. insd    dc.b    "DEC C",0
  1828. inse    dc.b    "LD  C,nn",0
  1829. insf    dc.b    "RRCA",0
  1830. ins10    dc.b    "DJNZ nn",0
  1831. ins11    dc.b    "LD  DE,nnnn",0
  1832. ins12    dc.b    "LD  (DE),A",0
  1833. ins13    dc.b    "INC DE",0
  1834. ins14    dc.b    "INC D",0
  1835. ins15    dc.b    "DEC D",0
  1836. ins16    dc.b    "LD  D,nn",0
  1837. ins17    dc.b    "RLA",0
  1838. ins18    dc.b    "JR  nn",0
  1839. ins19    dc.b    "ADD HL,DE",0
  1840. ins1a    dc.b    "LD  A,(DE)",0
  1841. ins1b    dc.b    "DEC DE",0
  1842. ins1c    dc.b    "INC E",0
  1843. ins1d    dc.b    "DEC E",0
  1844. ins1e    dc.b    "LD  E,nn",0
  1845. ins1f    dc.b    "RRA",0
  1846. ins20    dc.b    "JR  NZ,nn",0
  1847. ins21    dc.b    "LD  HL,nnnn",0
  1848. ins22    dc.b    "LD  (nnnn),HL",0
  1849. ins23    dc.b    "INC HL",0
  1850. ins24    dc.b    "INC H",0
  1851. ins25    dc.b    "DEC H",0
  1852. ins26    dc.b    "LD  H,nn",0
  1853. ins27    dc.b    "DAA",0
  1854. ins28    dc.b    "JR  Z,nn",0
  1855. ins29    dc.b    "ADD HL,HL",0
  1856. ins2a    dc.b    "LD  HL,(nnnn)",0
  1857. ins2b    dc.b    "DEC HL",0
  1858. ins2c    dc.b    "INC L",0
  1859. ins2d    dc.b    "DEC L",0
  1860. ins2e    dc.b    "LD  L,nn",0
  1861. ins2f    dc.b    "CPL",0
  1862. ins30    dc.b    "JR  NC,nn",0
  1863. ins31    dc.b    "LD  SP,nnnn",0
  1864. ins32    dc.b    "LD  (nnnn),A",0
  1865. ins33    dc.b    "INC SP",0
  1866. ins34    dc.b    "INC (HL)",0
  1867. ins35    dc.b    "DEC (HL)",0
  1868. ins36    dc.b    "LD  (HL),nn",0
  1869. ins37    dc.b    "SCF",0
  1870. ins38    dc.b    "JR  C,nn",0
  1871. ins39    dc.b    "ADD HL,SP",0
  1872. ins3a    dc.b    "LD  A,(nnnn)",0
  1873. ins3b    dc.b    "DEC SP",0
  1874. ins3c    dc.b    "INC A",0
  1875. ins3d    dc.b    "DEC A",0
  1876. ins3e    dc.b    "LD  A,nn",0
  1877. ins3f    dc.b    "CCF",0
  1878.  
  1879. insc0    dc.b    "RET NZ",0
  1880. insc1    dc.b    "POP BC",0
  1881. insc2    dc.b    "JP  NZ,nnnn",0
  1882. insc3    dc.b    "JP  nnnn",0
  1883. insc4    dc.b    "CALL NZ,nnnn",0
  1884. insc5    dc.b    "PUSH BC",0
  1885. insc6    dc.b    "ADD A,nn",0
  1886. insc7    dc.b    "RST &00",0
  1887. insc8    dc.b    "RET Z",0
  1888. insc9    dc.b    "RET",0
  1889. insca    dc.b    "JP  Z,nnnn",0
  1890. inscb    dc.b    "Crux Me Do!",0
  1891. inscc    dc.b    "CALL Z,nnnn",0
  1892. inscd    dc.b    "CALL nnnn",0
  1893. insce    dc.b    "ADC A,nn",0
  1894. inscf    dc.b    "RST &08",0
  1895. insd0    dc.b    "RET NC",0
  1896. insd1    dc.b    "POP DE",0
  1897. insd2    dc.b    "JP  NC,nnnn",0
  1898. insd3    dc.b    "OUT (nn),A",0
  1899. insd4    dc.b    "CALL NC,nnnn",0
  1900. insd5    dc.b    "PUSH DE",0
  1901. insd6    dc.b    "SUB nn",0
  1902. insd7    dc.b    "RST &10",0
  1903. insd8    dc.b    "RET C",0
  1904. insd9    dc.b    "EXX",0
  1905. insda    dc.b    "JP  C,nnnn",0
  1906. insdb    dc.b    "IN  A,(nn)",0
  1907. insdc    dc.b    "CALL C,nnnn",0
  1908. insdd    dc.b    "preDD",0
  1909. insde    dc.b    "SBC A,nn",0
  1910. insdf    dc.b    "RST &18",0
  1911. inse0    dc.b    "RET PO",0
  1912. inse1    dc.b    "POP HL",0
  1913. inse2    dc.b    "JP  PO,nnnn",0
  1914. inse3    dc.b    "EX  (SP),HL",0
  1915. inse4    dc.b    "CALL PO,nnnn",0
  1916. inse5    dc.b    "PUSH HL",0
  1917. inse6    dc.b    "AND nn",0
  1918. inse7    dc.b    "RST &20",0
  1919. inse8    dc.b    "RET PE",0
  1920. inse9    dc.b    "JP  (HL)",0
  1921. insea    dc.b    "JP  PE,nnnn",0
  1922. inseb    dc.b    "EX  DE,HL",0
  1923. insec    dc.b    "CALL PE,nnnn",0
  1924. insed    dc.b    0
  1925. insee    dc.b    "XOR nn",0
  1926. insef    dc.b    "RST &28",0
  1927. insf0    dc.b    "RET P",0
  1928. insf1    dc.b    "POP AF",0
  1929. insf2    dc.b    "JP  P,nnnn",0
  1930. insf3    dc.b    "DI",0
  1931. insf4    dc.b    "CALL P,nnnn",0
  1932. insf5    dc.b    "PUSH AF",0
  1933. insf6    dc.b    "OR  nn",0
  1934. insf7    dc.b    "RST &30",0
  1935. insf8    dc.b    "RET M",0
  1936. insf9    dc.b    "LD  SP,HL",0
  1937. insfa    dc.b    "JP  M,nnnn",0
  1938. insfb    dc.b    "EI",0
  1939. insfc    dc.b    "CALL M,nnnn",0
  1940. insfd    dc.b    "preFD",0
  1941. insfe    dc.b    "CP  nn",0
  1942. insff    dc.b    "RST &38",0
  1943.  
  1944. oper0    dc.b    "B",0
  1945. oper1    dc.b    "C",0
  1946. oper2    dc.b    "D",0
  1947. oper3    dc.b    "E",0
  1948. oper4    dc.b    "H",0
  1949. oper5    dc.b    "L",0
  1950. oper6    dc.b    "(HL)",0
  1951. oper7    dc.b    "A",0
  1952.  
  1953. ari0    dc.b    'ADD A,',0
  1954. ari1    dc.b    'ADC A,',0
  1955. ari2    dc.b    'SUB ',0
  1956. ari3    dc.b    'SBC A,',0
  1957. ari4    dc.b    'AND ',0
  1958. ari5    dc.b    'XOR ',0
  1959. ari6    dc.b    'OR  ',0
  1960. ari7    dc.b    'CP  ',0
  1961.  
  1962. CBRL0    dc.b    'RLC ',0
  1963. CBRL1    dc.b    'RRC ',0
  1964. CBRL2    dc.b    'RL  ',0
  1965. CBRL3    dc.b    'RR  ',0
  1966. CBRL4    dc.b    'SLA ',0
  1967. CBRL5    dc.b    'SRA ',0
  1968. CBRL6    dc.b    'ILLGCB ',0
  1969. CBRL7    dc.b    'SRL ',0
  1970.  
  1971. BRS0    dc.b    'BIT ',0
  1972. BRS1    dc.b    'RES ',0
  1973. BRS2    dc.b    'SET ',0
  1974.  
  1975. EDil    dc.b    'ILLGED ',0
  1976. ED40    dc.b    'IN  B,(C)',0
  1977. ED41    dc.b    'OUT (C),B',0
  1978. ED42    dc.b    'SBC HL,BC',0
  1979. ED43    dc.b    'LD  (nnnn),BC',0
  1980. ED44    dc.b    'NEG',0
  1981. ED45    dc.b    'RETN',0
  1982. ED46    dc.b    'IM  0',0
  1983. ED47    dc.b    'LD  I,A',0
  1984. ED48    dc.b    'IN  C,(C)',0
  1985. ED49    dc.b    'OUT (C),C',0
  1986. ED4a    dc.b    'ADC HL,BC',0
  1987. ED4b    dc.b    'LD  BC,(nnnn)',0
  1988. ED4d    dc.b    'RETI',0
  1989. ED4f    dc.b    'LD  R,A',0
  1990. ED50    dc.b    'IN  D,(C)',0
  1991. ED51    dc.b    'OUT (C),D',0
  1992. ED52    dc.b    'SBC HL,DE',0
  1993. ED53    dc.b    'LD  (nnnn),DE',0
  1994. ED56    dc.b    'IM  1',0
  1995. ED57    dc.b    'LD  A,I',0
  1996. ED58    dc.b    'IN  E,(C)',0
  1997. ED59    dc.b    'OUT (C),E',0
  1998. ED5a    dc.b    'ADC HL,DE',0
  1999. ED5b    dc.b    'LD  DE,(nnnn)',0
  2000. ED5e    dc.b    'IM  2',0
  2001. ED5f    dc.b    'LD  A,R',0
  2002. ED60    dc.b    'IN  H,(C)',0
  2003. ED61    dc.b    'OUT (C),H',0
  2004. ED62    dc.b    'SBC HL,HL',0
  2005. ED63    dc.b    'LD  (nnnn),HL',0
  2006. ED67    dc.b    'RRD',0
  2007. ED68    dc.b    'IN  L,(C)',0
  2008. ED69    dc.b    'OUT (C),L',0
  2009. ED6a    dc.b    'ADC HL,HL',0
  2010. ED6b    dc.b    'LD  HL,(nnnn)',0
  2011. ED6f    dc.b    'RLD',0
  2012. ED72    dc.b    'SBC HL,SP',0
  2013. ED73    dc.b    'LD  (nnnn),SP',0
  2014. ED78    dc.b    'IN  A,(C)',0
  2015. ED79    dc.b    'OUT (C),A',0
  2016. ED7a    dc.b    'ADC HL,SP',0
  2017. ED7b    dc.b    'LD  SP,(nnnn)',0
  2018. EDa0    dc.b    'LDI',0
  2019. EDa1    dc.b    'CPI',0
  2020. EDa2    dc.b    'INI',0
  2021. EDa3    dc.b    'OUTI',0
  2022. EDa8    dc.b    'LDD',0
  2023. EDa9    dc.b    'CPD',0
  2024. EDaa    dc.b    'IND',0
  2025. EDab    dc.b    'OUTD',0
  2026. EDb0    dc.b    'LDIR',0
  2027. EDb1    dc.b    'CPIR',0
  2028. EDb2    dc.b    'INIR',0
  2029. EDb3    dc.b    'OTIR',0
  2030. EDb8    dc.b    'LDDR',0
  2031. EDb9    dc.b    'CPDR',0
  2032. EDba    dc.b    'INDR',0
  2033. EDbb    dc.b    'OTDR',0
  2034.     EVEN
  2035. instab1 dc.l    ins0,ins1,ins2,ins3,ins4,ins5,ins6,ins7
  2036.     dc.l    ins8,ins9,insa,insb,insc,insd,inse,insf
  2037.     dc.l    ins10,ins11,ins12,ins13,ins14,ins15,ins16,ins17
  2038.     dc.l    ins18,ins19,ins1a,ins1b,ins1c,ins1d,ins1e,ins1f
  2039.     dc.l    ins20,ins21,ins22,ins23,ins24,ins25,ins26,ins27
  2040.     dc.l    ins28,ins29,ins2a,ins2b,ins2c,ins2d,ins2e,ins2f
  2041.     dc.l    ins30,ins31,ins32,ins33,ins34,ins35,ins36,ins37
  2042.     dc.l    ins38,ins39,ins3a,ins3b,ins3c,ins3d,ins3e,ins3f
  2043.     dc.l    insc0,insc1,insc2,insc3,insc4,insc5,insc6,insc7
  2044.     dc.l    insc8,insc9,insca,inscb,inscc,inscd,insce,inscf
  2045.     dc.l    insd0,insd1,insd2,insd3,insd4,insd5,insd6,insd7
  2046.     dc.l    insd8,insd9,insda,insdb,insdc,insdd,insde,insdf
  2047.     dc.l    inse0,inse1,inse2,inse3,inse4,inse5,inse6,inse7
  2048.     dc.l    inse8,inse9,insea,inseb,insec,insed,insee,insef
  2049.     dc.l    insf0,insf1,insf2,insf3,insf4,insf5,insf6,insf7
  2050.     dc.l    insf8,insf9,insfa,insfb,insfc,insfd,insfe,insff
  2051.  
  2052. opertab dc.l    oper0,oper1,oper2,oper3,oper4,oper5,oper6,oper7
  2053. aritab    dc.l    ari0,ari1,ari2,ari3,ari4,ari5,ari6,ari7
  2054. CBRLTab dc.l    CBRL0,CBRL1,CBRL2,CBRL3,CBRL4,CBRL5,CBRL6,CBRL7
  2055. BRSTab    dc.l    BRS0,BRS1,BRS2
  2056. EDTab    dc.l    ED40,ED41,ED42,ED43,ED44,ED45,ED46,ED47
  2057.     dc.l    ED48,ED49,ED4a,ED4b,EDil,ED4d,EDil,ED4f
  2058.     dc.l    ED50,ED51,ED52,ED53,EDil,EDil,ED56,ED57
  2059.     dc.l    ED58,ED59,ED5a,ED5b,EDil,EDil,ED5e,ED5f
  2060.     dc.l    ED60,ED61,ED62,ED63,EDil,EDil,EDil,ED67
  2061.     dc.l    ED68,ED69,ED6a,ED6b,EDil,EDil,EDil,ED6f
  2062.     dc.l    EDil,EDil,ED72,ED73,EDil,EDil,EDil,EDil
  2063.     dc.l    ED78,ED79,ED7a,ED7b,EDil,EDil,EDil,EDil
  2064.     dc.l    EDil,EDil,EDil,EDil,EDil,EDil,EDil,EDil
  2065.     dc.l    EDil,EDil,EDil,EDil,EDil,EDil,EDil,EDil
  2066.     dc.l    EDil,EDil,EDil,EDil,EDil,EDil,EDil,EDil
  2067.     dc.l    EDil,EDil,EDil,EDil,EDil,EDil,EDil,EDil
  2068.     dc.l    EDa0,EDa1,EDa2,EDa3,EDil,EDil,EDil,EDil
  2069.     dc.l    EDa8,EDa9,EDaa,EDab,EDil,EDil,EDil,EDil
  2070.     dc.l    EDb0,EDb1,EDb2,EDb3,EDil,EDil,EDil,EDil
  2071.     dc.l    EDb8,EDb9,EDba,EDbb,EDil,EDil,EDil,EDil
  2072.  
  2073. nscreen dc.w 0,0,640,256,2
  2074.     dc.b 1,0
  2075.     dc.w $8000,$F
  2076.     dc.l 0,0,0,0
  2077. nwindow dc.w 0,0,640,256
  2078.     dc.b -1,-1
  2079.     dc.l $400,$1900 ; RAWKEY / Borderless|Activate
  2080.     dc.l 0,0,0,0,0
  2081.     dc.w 0,0,0,0
  2082.     dc.w $F
  2083.  
  2084. scrbase dc.w $C000
  2085. scroff    dc.w 0
  2086.  
  2087. ModeTab dc.l DoMode0,DoMode1,DoMode2,DoMode0
  2088.  
  2089. m1cols:
  2090.  dc.b $00,$00,$03,$00,$0C,$00,$0F,$00,$30,$00,$33,$00,$3C,$00,$3F,$00
  2091.  dc.b $C0,$00,$C3,$00,$CC,$00,$CF,$00,$F0,$00,$F3,$00,$FC,$00,$FF,$00
  2092.  dc.b $00,$03,$03,$03,$0C,$03,$0F,$03,$30,$03,$33,$03,$3C,$03,$3F,$03
  2093.  dc.b $C0,$03,$C3,$03,$CC,$03,$CF,$03,$F0,$03,$F3,$03,$FC,$03,$FF,$03
  2094.  dc.b $00,$0C,$03,$0C,$0C,$0C,$0F,$0C,$30,$0C,$33,$0C,$3C,$0C,$3F,$0C
  2095.  dc.b $C0,$0C,$C3,$0C,$CC,$0C,$CF,$0C,$F0,$0C,$F3,$0C,$FC,$0C,$FF,$0C
  2096.  dc.b $00,$0F,$03,$0F,$0C,$0F,$0F,$0F,$30,$0F,$33,$0F,$3C,$0F,$3F,$0F
  2097.  dc.b $C0,$0F,$C3,$0F,$CC,$0F,$CF,$0F,$F0,$0F,$F3,$0F,$FC,$0F,$FF,$0F
  2098.  dc.b $00,$30,$03,$30,$0C,$30,$0F,$30,$30,$30,$33,$30,$3C,$30,$3F,$30
  2099.  dc.b $C0,$30,$C3,$30,$CC,$30,$CF,$30,$F0,$30,$F3,$30,$FC,$30,$FF,$30
  2100.  dc.b $00,$33,$03,$33,$0C,$33,$0F,$33,$30,$33,$33,$33,$3C,$33,$3F,$33
  2101.  dc.b $C0,$33,$C3,$33,$CC,$33,$CF,$33,$F0,$33,$F3,$33,$FC,$33,$FF,$33
  2102.  dc.b $00,$3C,$03,$3C,$0C,$3C,$0F,$3C,$30,$3C,$33,$3C,$3C,$3C,$3F,$3C
  2103.  dc.b $C0,$3C,$C3,$3C,$CC,$3C,$CF,$3C,$F0,$3C,$F3,$3C,$FC,$3C,$FF,$3C
  2104.  dc.b $00,$3F,$03,$3F,$0C,$3F,$0F,$3F,$30,$3F,$33,$3F,$3C,$3F,$3F,$3F
  2105.  dc.b $C0,$3F,$C3,$3F,$CC,$3F,$CF,$3F,$F0,$3F,$F3,$3F,$FC,$3F,$FF,$3F
  2106.  dc.b $00,$C0,$03,$C0,$0C,$C0,$0F,$C0,$30,$C0,$33,$C0,$3C,$C0,$3F,$C0
  2107.  dc.b $C0,$C0,$C3,$C0,$CC,$C0,$CF,$C0,$F0,$C0,$F3,$C0,$FC,$C0,$FF,$C0
  2108.  dc.b $00,$C3,$03,$C3,$0C,$C3,$0F,$C3,$30,$C3,$33,$C3,$3C,$C3,$3F,$C3
  2109.  dc.b $C0,$C3,$C3,$C3,$CC,$C3,$CF,$C3,$F0,$C3,$F3,$C3,$FC,$C3,$FF,$C3
  2110.  dc.b $00,$CC,$03,$CC,$0C,$CC,$0F,$CC,$30,$CC,$33,$CC,$3C,$CC,$3F,$CC
  2111.  dc.b $C0,$CC,$C3,$CC,$CC,$CC,$CF,$CC,$F0,$CC,$F3,$CC,$FC,$CC,$FF,$CC
  2112.  dc.b $00,$CF,$03,$CF,$0C,$CF,$0F,$CF,$30,$CF,$33,$CF,$3C,$CF,$3F,$CF
  2113.  dc.b $C0,$CF,$C3,$CF,$CC,$CF,$CF,$CF,$F0,$CF,$F3,$CF,$FC,$CF,$FF,$CF
  2114.  dc.b $00,$F0,$03,$F0,$0C,$F0,$0F,$F0,$30,$F0,$33,$F0,$3C,$F0,$3F,$F0
  2115.  dc.b $C0,$F0,$C3,$F0,$CC,$F0,$CF,$F0,$F0,$F0,$F3,$F0,$FC,$F0,$FF,$F0
  2116.  dc.b $00,$F3,$03,$F3,$0C,$F3,$0F,$F3,$30,$F3,$33,$F3,$3C,$F3,$3F,$F3
  2117.  dc.b $C0,$F3,$C3,$F3,$CC,$F3,$CF,$F3,$F0,$F3,$F3,$F3,$FC,$F3,$FF,$F3
  2118.  dc.b $00,$FC,$03,$FC,$0C,$FC,$0F,$FC,$30,$FC,$33,$FC,$3C,$FC,$3F,$FC
  2119.  dc.b $C0,$FC,$C3,$FC,$CC,$FC,$CF,$FC,$F0,$FC,$F3,$FC,$FC,$FC,$FF,$FC
  2120.  dc.b $00,$FF,$03,$FF,$0C,$FF,$0F,$FF,$30,$FF,$33,$FF,$3C,$FF,$3F,$FF
  2121.  dc.b $C0,$FF,$C3,$FF,$CC,$FF,$CF,$FF,$F0,$FF,$F3,$FF,$FC,$FF,$FF,$FF
  2122.     EVEN
  2123. m0cols:
  2124.  dc.w $0000,$3000,$C000,$F000,$0030,$3030,$C030,$F030
  2125.  dc.w $00C0,$30C0,$C0C0,$F0C0,$00F0,$30F0,$C0F0,$F0F0
  2126.  dc.w $0300,$3300,$C300,$F300,$0330,$3330,$C330,$F330
  2127.  dc.w $03C0,$33C0,$C3C0,$F3C0,$03F0,$33F0,$C3F0,$F3F0
  2128.  dc.w $0C00,$3C00,$CC00,$FC00,$0C30,$3C30,$CC30,$FC30
  2129.  dc.w $0CC0,$3CC0,$CCC0,$FCC0,$0CF0,$3CF0,$CCF0,$FCF0
  2130.  dc.w $0F00,$3F00,$CF00,$FF00,$0F30,$3F30,$CF30,$FF30
  2131.  dc.w $0FC0,$3FC0,$CFC0,$FFC0,$0FF0,$3FF0,$CFF0,$FFF0
  2132.  dc.w $0003,$3003,$C003,$F003,$0033,$3033,$C033,$F033
  2133.  dc.w $00C3,$30C3,$C0C3,$F0C3,$00F3,$30F3,$C0F3,$F0F3
  2134.  dc.w $0303,$3303,$C303,$F303,$0333,$3333,$C333,$F333
  2135.  dc.w $03C3,$33C3,$C3C3,$F3C3,$03F3,$33F3,$C3F3,$F3F3
  2136.  dc.w $0C03,$3C03,$CC03,$FC03,$0C33,$3C33,$CC33,$FC33
  2137.  dc.w $0CC3,$3CC3,$CCC3,$FCC3,$0CF3,$3CF3,$CCF3,$FCF3
  2138.  dc.w $0F03,$3F03,$CF03,$FF03,$0F33,$3F33,$CF33,$FF33
  2139.  dc.w $0FC3,$3FC3,$CFC3,$FFC3,$0FF3,$3FF3,$CFF3,$FFF3
  2140.  dc.w $000C,$300C,$C00C,$F00C,$003C,$303C,$C03C,$F03C
  2141.  dc.w $00CC,$30CC,$C0CC,$F0CC,$00FC,$30FC,$C0FC,$F0FC
  2142.  dc.w $030C,$330C,$C30C,$F30C,$033C,$333C,$C33C,$F33C
  2143.  dc.w $03CC,$33CC,$C3CC,$F3CC,$03FC,$33FC,$C3FC,$F3FC
  2144.  dc.w $0C0C,$3C0C,$CC0C,$FC0C,$0C3C,$3C3C,$CC3C,$FC3C
  2145.  dc.w $0CCC,$3CCC,$CCCC,$FCCC,$0CFC,$3CFC,$CCFC,$FCFC
  2146.  dc.w $0F0C,$3F0C,$CF0C,$FF0C,$0F3C,$3F3C,$CF3C,$FF3C
  2147.  dc.w $0FCC,$3FCC,$CFCC,$FFCC,$0FFC,$3FFC,$CFFC,$FFFC
  2148.  dc.w $000F,$300F,$C00F,$F00F,$003F,$303F,$C03F,$F03F
  2149.  dc.w $00CF,$30CF,$C0CF,$F0CF,$00FF,$30FF,$C0FF,$F0FF
  2150.  dc.w $030F,$330F,$C30F,$F30F,$033F,$333F,$C33F,$F33F
  2151.  dc.w $03CF,$33CF,$C3CF,$F3CF,$03FF,$33FF,$C3FF,$F3FF
  2152.  dc.w $0C0F,$3C0F,$CC0F,$FC0F,$0C3F,$3C3F,$CC3F,$FC3F
  2153.  dc.w $0CCF,$3CCF,$CCCF,$FCCF,$0CFF,$3CFF,$CCFF,$FCFF
  2154.  dc.w $0F0F,$3F0F,$CF0F,$FF0F,$0F3F,$3F3F,$CF3F,$FF3F
  2155.  dc.w $0FCF,$3FCF,$CFCF,$FFCF,$0FFF,$3FFF,$CFFF,$FFFF
  2156.     EVEN
  2157. memmap        dc.l    amsdos,rambase,rambase,rambase
  2158. codemap     dc.l    amscode,0,0,0
  2159.  
  2160. CMapSpecial:
  2161. ColorTabA   dc.l    $00000000,$00000007,$0000000F,$00070000
  2162.         dc.l    $00070007,$0007000f,$000f0000,$000f0007
  2163.         dc.l    $000f000f,$00000700,$00000707,$0000070f
  2164.         dc.l    $00070700,$00070707,$0007070f,$000f0700
  2165.         dc.l    $000f0707,$000F070f,$00000f00,$00000f07
  2166.         dc.l    $00000f0f,$00070f00,$00070f07,$00070F0F
  2167.         dc.l    $000f0f00,$000F0F07,$000F0F0F,$00000000
  2168.         dc.l    0,0,0,0,0,0,0,0
  2169.  
  2170. ColorTab    dc.l    $00070707,$000fffff,$00000F07,$000f0f07
  2171.         dc.l    $00000007,$000f0007,$00000707,$000f0707 ;4
  2172.         dc.l    $000fffff,$000fffff,$000f0f00,$000f0f0f
  2173.         dc.l    $000f0000,$000f000f,$000f0700,$000f070f ;12
  2174.         dc.l    $000fffff,$000fffff,$00000f00,$00000f0f
  2175.         dc.l    $00000000,$0000000f,$00000700,$0000070f ;20
  2176.         dc.l    $00070007,$00070F07,$00070f00,$00070f0f
  2177.         dc.l    $00070000,$0007000f,$00070700,$0007070f
  2178.  
  2179. KeyMatrix:
  2180.     dc.b    $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  2181.     dc.b    $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  2182.     EVEN
  2183. KeyCodeTab:    ; F0 = not on cpc keyboard
  2184.  ;         `   1   2   3   4   5   6   7   8   9   0   ß      \
  2185.     dc.b    $F0,$80,$81,$71,$70,$61,$60,$51,$50,$41,$40,$36,$30,$26,$F0,$F0
  2186.  ;         Q   W     E   R     T   Z     U   I     O   P     Ü   +        JDN
  2187.     dc.b    $83,$73,$72,$62,$63,$87,$52,$43,$42,$33,$32,$21,$f0,$f0,$91,$f0
  2188.  ;         A   S     D   F     G   H     J   K     L   Ö     Ä   ^        JLF     JRT
  2189.     dc.b    $85,$74,$75,$65,$64,$54,$55,$45,$44,$35,$34,$23,$f0,$92,$94,$93
  2190.  ;         <   Y     X   C     V   B     N   M     ,   .     -        JUP
  2191.     dc.b    $F0,$53,$77,$76,$67,$66,$56,$46,$47,$37,$31,$f0,$f0,$f0,$90,$f0
  2192.  ;        SPC BS    TAB ENT RET ESC DEL xxx xxx xxx xxx xxx UP  DN    RT  LF
  2193.     dc.b    $57,$97,$84,$06,$22,$82,$20,$F0,$F0,$F0,$F0,$F0,$00,$02,$01,$10
  2194.  ;        F1  F2 ...                            HELP
  2195.     dc.b    $15,$16,$05,$24,$14,$04,$12,$13,$03,$17,$F0,$F0,$F0,$F0,$F0,$11
  2196.  ;        LSH RSH CAP CTL LAL RAL LAM RAM
  2197.     dc.b    $25,$25,$86,$27,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0
  2198.  
  2199.     EVEN
  2200. FCMD    MACRO
  2201.     dc.b    \1,\2,\3,0
  2202.     dc.l    \4
  2203.     ENDM
  2204.  
  2205. dccommands    FCMD    8,0,2,DCGetTrack
  2206.         FCMD    7,1,0,DCSeek0
  2207.         FCMD    3,2,0,DCNop
  2208.         FCMD    15,2,0,DCSeek
  2209.         FCMD    $4A,1,7,DCGetID
  2210.         FCMD    $46,8,7,DCReadSec
  2211.         FCMD    $66,8,7,DCReadSec
  2212.         dc.l    0
  2213.  
  2214.     SECTION bss,BSS
  2215.  
  2216. dosbase ds.l    1        ; some system vars
  2217. gfxbase ds.l    1
  2218. intbase ds.l    1
  2219. cpcscr    ds.l    1
  2220. cpcwin    ds.l    1
  2221. cpcvp    ds.l    1
  2222. cpcrp    ds.l    1
  2223. cpcup    ds.l    1
  2224. cpcplns ds.l    1
  2225. fhandle ds.l    1
  2226. dbhandle ds.l    1
  2227. Class    ds.l    1
  2228. Code    ds.w    1
  2229. Qual    ds.w    1
  2230. SPSave    ds.l    1
  2231.  
  2232. regop1    ds.b    1
  2233. regop2    ds.b    1
  2234. regop3    ds.b    1
  2235. regopd    ds.b    1
  2236.  
  2237.     SECTION ram,BSS
  2238.     ds.b    32768    ; cpc's memory in two halves 8000-FFFF;0000-7FFF
  2239. rambase ds.b    32768    ; 16-bit addressable.
  2240.     SECTION amsdos,BSS
  2241. amsdos    ds.b    16384
  2242.     SECTION basic,BSS
  2243. basic    ds.b    16384
  2244.     SECTION from,BSS
  2245. rom7    ds.b    16384
  2246.  
  2247.     SECTION amscode,BSS
  2248. amscode ds.l    16384
  2249.     SECTION bascode,BSS
  2250. bascode ds.l    16384
  2251.     SECTION r7code,BSS
  2252. ro7code ds.l    16384
  2253.  
  2254. stack    ds.w    1        ; the remaining Z80 registers not emulated in
  2255.                 ; 68000 registers
  2256. ix
  2257. xh    dc.b    0
  2258. xl    dc.b    0
  2259.  
  2260. iy
  2261. yh    dc.b    0
  2262. yl    dc.b    0
  2263.  ; CPC-Ports
  2264.  
  2265. CRTCregnum  ds.w    1    ; BCxx
  2266. CRTCregs    ds.w    9    ; BDxx/BFxx 18 regs of video controller
  2267. rgsgarr     ds.w    1    ; 7Fxx 4  regs of gate array
  2268. sysstat     ds.w    1    ; 7Fxx this and the last line MUST be adjacent
  2269. romnum        ds.w    1    ; this is the DFxx port
  2270. videomode   ds.w    1
  2271. crtcscrwidth ds.w   1
  2272.  
  2273. port8255a   ds.b    1    ; F4
  2274. port8255b   ds.b    1    ; F5
  2275. port8255c   ds.b    1    ; F6
  2276. control8255 ds.b    1    ; F7
  2277.  
  2278. psgregnum   ds.w    1
  2279. psgregs     ds.w    16
  2280.  
  2281. dcFBxx        ds.w    128
  2282. dcFAxx        ds.w    128
  2283. dcdataempty ds.w    1
  2284. dccommand   ds.l    1
  2285. dcstat        ds.w    1
  2286. dcbytecnt   ds.w    1
  2287. dccmdparms  ds.w    10
  2288. dcdata        ds.w    20
  2289. dcextdata   ds.w    1
  2290. dcedp        ds.l    1
  2291. dcdpt        ds.l    1
  2292. dccppt        ds.l    1
  2293. dcflagntr   ds.w    1
  2294.  
  2295. intcount    ds.w    1
  2296. intena        ds.w    1
  2297. intreq        ds.w    1
  2298. ffly        ds.w    1
  2299. ffcount     ds.w    1
  2300.  
  2301. fileopen    ds.w    1
  2302. idfield     ds.w    33
  2303. trackoffs   ds.l    1
  2304. IDTPtr        ds.l    1
  2305. CurrTrack   ds.w    1
  2306. DiskBuf     ds.w    2400
  2307.  
  2308. ReDrawCount ds.w    1
  2309.  
  2310. CMap        ds.w    32
  2311.  
  2312. dbregsave   ds.l    8
  2313. dbadrsave   ds.l    8
  2314. dbinsbytes  ds.l    2
  2315. inpline     ds.l    128
  2316. dbmonistr   ds.l    20    ; 80 bytes
  2317. dbflag        ds.w    1
  2318. dbwaitad    ds.w    1
  2319. dbmonad     ds.w    1
  2320.  
  2321. intspeed    dc.w    400
  2322.  
  2323. ColMode     ds.w    1
  2324. crux        ds.b    $20000
  2325.     SECTION ScreenOffsets,BSS
  2326. Scroff        ds.w    $4000
  2327.     END
  2328.