home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Emulatoren / AMORICV0.LHA / AmoricV0_8b / src / memwrite_020.asm < prev    next >
Encoding:
Assembly Source File  |  1995-10-14  |  13.7 KB  |  553 lines

  1. ; *** ORIC Emulator. Amiga Version 680x0 ***
  2. ; *** Copyright 1995/96 JF FABRE (fabre@cert.fr) ***
  3. ; *** Memory Write Access Routines ***
  4.  
  5. ; d1.b : A
  6. ; d2.b : X
  7. ; d3.b : Y
  8. ; d4.b : P
  9. ; d5.b : S
  10. ; D6   : **scratch**
  11. ; D7   : **scratch**
  12.  
  13. ; a0.l : Mem Ptr
  14. ; a1.l : Mem Ptr + $304
  15. ; a2.l : Functable pour les instructions
  16. ; a3.l : Pointeur sur diverses tables
  17. ; a4.l : PC+Base Adr
  18. ; a5.l : Retour apres traitement d'instruction
  19. ; a6.l : **Scratch**
  20.  
  21.     MACHINE    68020
  22.  
  23.     include "my_defs.i"
  24.     include "my_macros.asm"
  25.  
  26.         XDEF    _Place
  27.         XDEF    @Place
  28.         XDEF    _FinPlace
  29.         XDEF    _case300
  30.  
  31.     XDEF    _PagexAddTableText
  32.     XDEF    _PagexAddTableHires
  33.     XDEF    _MemPagePtr
  34.  
  35.     XDEF    _UserLoadT1
  36.     XDEF    _UserLoadT2
  37.  
  38.         XREF    _Reg8912
  39.         XREF    _Reg8912Req
  40.         XREF    _CB2_CA2
  41.         XREF    _OricMem
  42.  
  43.         XREF    _TestClavierOric
  44.     XREF    _JoyTest
  45.         XREF    _WhichReg
  46.         
  47.         XREF    _CurrentContext
  48.     XREF    _BreakReason
  49.  
  50.         XREF    _BaseAdr
  51.         XREF    _dispmode
  52.         XREF    _gctxt
  53.         XREF    _gcink
  54.         XREF    _gcdbl
  55.         XREF    _gcpap
  56.         XREF    _gcchm
  57.         XREF    _ScreenGridText
  58.         XREF    _ColumnGridText
  59.         XREF    _ScreenGridHires
  60.         XREF    _ColumnGridHires
  61.  
  62.     XREF    _RefreshCtl
  63.  
  64.     XREF    _SetGridHires
  65.     XREF    _SetGridText
  66.         
  67.     XREF    _MainLoop
  68.  
  69.     
  70. ;*** Place un octet en memoire ***
  71. ;*** Point d'entree du C ***
  72. ;*** Prototype : void Place(UBYTE octet,UWORD adresse) ***
  73. _Place:
  74.     move.l    8(A7),addr
  75.     move.l    4(A7),vh
  76.     STORE_REGS
  77.     move.l    _OricMem,A0
  78.     move.l    addr(PC),D6
  79.     move.l    vh(PC),D7
  80.     bsr.b    @Place
  81.     RESTORE_REGS
  82.     rts
  83.  
  84. vh:
  85.     dc.l    0
  86. addr:
  87.     dc.l    0
  88.  
  89. ;*** Place un octet en memoire ***
  90. ;*** D7 : donnee, D6 : emplacement ***
  91.  
  92. @Place:
  93.     MOVEM.L    A3/A4/D4/D5,-(A7)
  94.  
  95.     and.l    #$FFFF,D6
  96.     move.w    D6,D5
  97.     lsr.w    #8,D5
  98.     move.l    _MemPagePtr(PC),A6
  99.     move.l    (A6,D5.W*4),A6
  100.     jmp    (A6)
  101.  
  102. Page03:
  103.  
  104. ;*** Page 3 : 6522 registers ***
  105.             
  106.     move.l    D6,D5
  107.     and.w    #$0F,D5
  108.     lea    Page3AddTable(PC),A6
  109.     move.l    (A6,D5.L*4),A6
  110.     jmp    (A6)
  111.  
  112. ;*** VIA Port B ***
  113.  
  114. _case300:
  115.     ; ** Registre 0E du 8912 : Clavier **
  116.  
  117.     cmp.b    #$0E,_Reg8912
  118.     bne.w    FinPlace
  119.     jsr    _TestClavierOric
  120.     ECRIRE_PAGE3    #0
  121.     bra.w    FinPlace
  122.  
  123. ;*** VIA Port A ***
  124.  
  125. case301:
  126. PortA:
  127.     move.b    -1(A1),D6    ; D6 = $303
  128.     and.b    D6,D7        ; D7 = Juste les sorties
  129.     moveq.l    #$-1,D5
  130.     jsr    _JoyTest
  131.     not.b    D6
  132.     and.b    D6,D5        ; D5 = Juste les entrees
  133.     or.b    D5,D7        ; On reunit le tout dans D7
  134.     ECRIRE_PAGE3    #$1    ; Et on ecrit dans le port A
  135.     ECRIRE_PAGE3    #$F    ; (Les 2 adresses)
  136.     bra.w    FinPlace
  137.  
  138. case302:
  139. case303:
  140.     ECRIRE_PAGE3    D5
  141.     bra.w    FinPlace
  142.  
  143.  
  144. ; *** 304-305 : T1C H-L ***
  145.  
  146. case305:
  147.     st.b    _UserLoadT1
  148.     bclr    #6,$9(A1)    ; Clr IER bit 6
  149. case304:
  150.     ECRIRE_PAGE3    D5
  151.     bra    FinPlace
  152.  
  153. ; *** 306-307 : T1L H-L ***
  154.  
  155. case306:
  156. case307:
  157.     ECRIRE_PAGE3    D5
  158.     bra.w    FinPlace
  159.  
  160. ; *** 308-309 : T2C H-L ***
  161.  
  162. case309:
  163.     st.b    _UserLoadT2
  164.     bclr    #5,$9(A1)    ; Clr IER bit 5
  165. case308:
  166.     ECRIRE_PAGE3    D5
  167.     bra    FinPlace
  168.  
  169. ; *** 30A : SR ***
  170.  
  171. case30A:
  172.     ECRIRE_PAGE3    D5
  173.     bra    FinPlace
  174.  
  175. ; *** 30B : ACR ***
  176.  
  177. case30B:
  178.     ECRIRE_PAGE3    D5
  179.     bra.w    FinPlace
  180.  
  181. ; *** 30C : PCR ***
  182.     
  183. case30C:
  184.     and.b    #$EE,D7
  185.     ECRIRE_PAGE3    #$C
  186.     cmp.b    #$CC,D7
  187.     bne.b    LoadSomething
  188.  
  189.     ;*** Lecture du no de registre ou de la donnee
  190.  
  191.     cmp.b    #$EE,_CB2_CA2
  192.     beq.s    Change8912Register
  193.  
  194.     ; *** C'est une donnee : le 8912 execute son truc
  195.     
  196.     move.b    D7,_CB2_CA2
  197.     move.b    $B(A1),D7    ; $30F
  198.     bra.w    _WhichReg    
  199.     
  200.     ; *** Il faut changer le numero du registre 8912
  201.  
  202. Change8912Register:
  203.     move.b    $B(A1),_Reg8912
  204.     move.b    D7,_CB2_CA2
  205.     bra.s    FinPlace
  206.     
  207.     ; *** Requete de charger un truc :
  208.     ; *** soit changer de registre, soit stocker une valeur
  209.  
  210. LoadSomething:    
  211.     move.b    D7,_CB2_CA2    ; Pour qu'au prochain appel PCR avec CC,
  212. ;    cmp.b    #$EE,D7        ; on sache quoi faire
  213. ;    bne.s    LoadValue
  214.  
  215.     ; *** Requete changer de registre
  216.  
  217. Load8912Register:
  218.     bra.s    FinPlace
  219.  
  220.     ; *** Requete charger une valeur
  221.  
  222. LoadValue:
  223.     bra.s    FinPlace
  224.             
  225. case30D:
  226.     and.b    #$7F,D7    ; Virer le bit 8
  227.     not.b    D7
  228.     move.b    $9(A1),D6    ; valeur 30D
  229.     and.b    D6,D7
  230.     bne.b    IFRNotCleared
  231.     bclr    #7,D7
  232.     bra.b    StoreIxR
  233. IFRNotCleared:
  234.     bset    #7,D7
  235. StoreIxR:
  236.     ECRIRE_PAGE3    D5
  237.     bra.b    FinPlace
  238.  
  239. case30E:
  240.     move.b    $A(A1),D6    ; valeur 30E
  241.     tst.b    D7
  242.     bmi.b    SetIER
  243. ClrIER:
  244.     not.b    D7
  245.     and.b    D6,D7
  246.     bset    #1,D7    
  247.     bra.s    StoreIxR
  248. SetIER:
  249.     or.b    D6,D7
  250.     bra.s    StoreIxR
  251.  
  252. case30F:
  253.     ECRIRE_PAGE3    D5
  254.     ECRIRE_PAGE3    #1
  255.     bra.s    FinPlace
  256.  
  257. ; Page de BB00 a BC00
  258.  
  259. PageTexMem:
  260.     cmp.w    #$BFE0,D6
  261.     bcc    Pagexx
  262.     bra.b    PageTex
  263.  
  264. PageMemTex:
  265.     cmp.w    #$BB80,D6
  266.     bcs    Pagexx
  267.  
  268. PageTex:
  269.     ; *** On est dans l'ecran texte, en mode texte
  270.     ; *** Ou HIRES dans les 3 dernieres lignes de l'ecran.
  271.  
  272.     move.b    D7,(A0,D6.L)    ; Place la donnee en memoire    
  273.  
  274.     ; On va maintenant tester si c'est un attribut qui est affiche
  275.     ; auquel cas il faut rafraichir la fin de la ligne egalement
  276.  
  277.     bclr    #7,D7
  278.     cmp.b    #' ',D7
  279.     bcc.b    MT_PasAttribut
  280.  
  281.     cmp.b    #$18,D7
  282.     bcs.b    MT_PasScreenAttribut
  283.  
  284.     lea    ScreenAttTable(PC),A6
  285.     moveq.l    #0,D0
  286.     move.b    D7,D0
  287.     move.l    (A6,D0.W*4),A6
  288.     jsr    (A6)
  289.  
  290. MT_PasScreenAttribut:
  291.     moveq.l    #0,D7
  292.     move.w    D6,D7
  293.     sub.w    #$BB80,D7    ; D7 = X+Y*X_MAX ecran
  294.     lea    _ScreenGridText,A3
  295.     lea    _ColumnGridText,A4
  296.     bra    MT_AttributModifie
  297.     
  298.     ; On va maintenant tester si un attribut a ete ecrase
  299.     ; auquel cas il faut egalement rafraichir la fin de la ligne
  300.  
  301.     ; Preparation de la mise a jour du ScreenGrid
  302.     ; Afin de dire a l'IT Refresh quels caracteres
  303.     ; doivent etre redessines
  304.  
  305. MT_PasAttribut:
  306.     moveq.l    #0,D7
  307.     move.w    D6,D7
  308.     sub.w    #$BB80,D7    ; D7 = X+Y*X_MAX ecran
  309.     lea    _ScreenGridText,A3
  310.     lea    _ColumnGridText,A4
  311.  
  312.     ; Test de l'attribut ecrase
  313.  
  314.     bclr    #7,D4
  315.     cmp.b    #' ',D4
  316.     bcs    MT_AttributModifie
  317.  
  318.     ; *** Aucun attribut n'a ete ecrase
  319.  
  320.     move.w    D7,D6        ; On garde D7 tel quel
  321.     divu.w    #X_MAX,D6    ; D6h=X, D6l=Y
  322.     st.b    (A3,D7.L)    ; Positionnement de ScreenGrid pour le caractere
  323.     st.b    (A4,D6.W)    ; Positionnement de ColumnGrid pour la ligne courante
  324.  
  325.     move.b    #DO_REFRESH,_RefreshCtl    ; Declenche le rafraichissement ecran
  326.     bra    FinPlace
  327.  
  328.     ; *** Un attribut a ete ecrase/modifie
  329.  
  330. MT_AttributModifie:
  331.     
  332.     ; *** Il faut calculer combien de caracteres sont a redessiner
  333.  
  334.     move.w    D7,D6        ; On garde D7 tel quel
  335.     divu.w    #X_MAX,D6    ; D6h=X, D6l=Y
  336.     st.b    (A4,D6.W)    ; Positionnement de ColumnGrid pour la ligne courante
  337.     swap.w    D6        ; Seul X nous interesse
  338. MT_AMLoop:
  339.     st.b    (A3,D7.L)    ; Positionnement de ScreenGrid pour les caracteres
  340.     addq.w    #1,D7
  341.     addq.w    #1,D6
  342.     cmp.b    #X_MAX,D6        ; Jusqu'a la fin de la ligne
  343.     bcs.b    MT_AMLoop
  344.  
  345.     move.b    #DO_REFRESH,_RefreshCtl    ; Declenche le rafraichissement ecran
  346.     bra    FinPlace
  347.  
  348. ; De BF00 a BF3F : Hires de BF3F a BFDF : Text et de BFDF a BFFF memoire normale
  349.  
  350. PageHiTexMem:
  351.     cmp.w    #$BF3F,D6
  352.     bcc.b    Test3Lignes
  353.  
  354.     ; *** On est en mode HIRES c'est a dire 1 octet = 1x6 pixels
  355.  
  356. PageHi:
  357.  
  358.     ; *** On est dans l'ecran texte, en mode texte
  359.     ; *** Ou HIRES dans les 3 dernieres lignes de l'ecran.
  360.  
  361.     move.b    D7,(A0,D6.L)    ; Place la donnee en memoire    
  362.  
  363.     ; On va maintenant tester si c'est un attribut qui est affiche
  364.     ; auquel cas il faut rafraichir la fin de la ligne egalement
  365.  
  366.     bclr    #7,D7
  367.     cmp.b    #' ',D7
  368.     bcc.b    MH_PasAttribut
  369.  
  370.     cmp.b    #$18,D7
  371.     bcs.b    MH_PasScreenAttribut
  372.  
  373.     lea    ScreenAttTable(PC),A6
  374.     moveq.l    #0,D0
  375.     move.b    D7,D0
  376.     move.l    (A6,D0.W*4),A6
  377.     jsr    (A6)
  378.  
  379. MH_PasScreenAttribut:
  380.     moveq.l    #0,D7
  381.     move.w    D6,D7
  382.     sub.w    #$A000,D7    ; D7 = X+Y*X_MAX ecran
  383.     lea    _ScreenGridHires,A3
  384.     lea    _ColumnGridHires,A4
  385.     bra    MT_AttributModifie
  386.     
  387.     ; On va maintenant tester si un attribut a ete ecrase
  388.     ; auquel cas il faut egalement rafraichir la fin de la ligne
  389.  
  390.     ; Preparation de la mise a jour du ScreenGrid
  391.     ; Afin de dire a l'IT Refresh quels caracteres
  392.     ; doivent etre redessines
  393.  
  394. MH_PasAttribut:
  395.     moveq.l    #0,D7
  396.     move.w    D6,D7
  397.     sub.w    #$A000,D7    ; D7 = X+Y*X_MAX ecran
  398.     lea    _ScreenGridHires,A3
  399.     lea    _ColumnGridHires,A4
  400.  
  401.     ; Test de l'attribut ecrase
  402.  
  403.     bclr    #7,D4
  404.     cmp.b    #' ',D4
  405.     bcs    MT_AttributModifie    ; Meme routine qu'en TEXT
  406.  
  407.     ; *** Aucun attribut n'a ete ecrase
  408.  
  409.     move.w    D7,D6        ; On garde D7 tel quel
  410.     divu.w    #X_MAX,D6    ; D6h=X, D6l=Y
  411.     st.b    (A3,D7.L)    ; Positionnement de ScreenGrid pour le caractere
  412.     st.b    (A4,D6.W)    ; Positionnement de ColumnGrid pour la ligne courante
  413.  
  414.     move.b    #DO_REFRESH,_RefreshCtl    ; Declenche le rafraichissement ecran
  415.     bra    FinPlace
  416.  
  417. Test3Lignes:
  418.     cmp.w    #$BF68,D6
  419.     bcs.b    Pagexx        ; Skip 1 ligne
  420.     cmp.w    #$BFE0,D6
  421.     bcs.w    PageTex
  422.  
  423. ; Page Normale, aucun probleme
  424.  
  425. Pagexx:
  426.     move.b    D7,(A0,D6.L)    ; Place la donnee en memoire    
  427.  
  428. ; ROM : Ne fait rien
  429.  
  430. PageRom:
  431. FinPlace:        
  432. _FinPlace:
  433.     MOVEM.L    (A7)+,A3/A4/D4/D5
  434.     RTS
  435.  
  436.  
  437. ATT_TEXT60:
  438. ATT_TEXT50:
  439.     cmp.b    #MODE_TEXT,_dispmode
  440.     beq.b    DoRTS
  441.     jsr    _SetGridText
  442. DoRTS:
  443.     rts
  444.  
  445. ATT_HIRES60:
  446. ATT_HIRES50:
  447.     rts
  448.     cmp.b    #MODE_HIRES,_dispmode
  449.     beq.b    DoRTS
  450.     jsr    _SetGridHires
  451.     rts
  452.  
  453. Page3AddTable:
  454.     dc.l    _case300,case301,case302,case303,case304,case305
  455.     dc.l    case306,case307,case308,case309,case30A,case30B
  456.     dc.l    case30C,case30D,case30E,case30F
  457.  
  458. _PagexAddTableText:
  459.     dc.l    Pagexx,Pagexx,Pagexx,Page03,Pagexx,Pagexx,Pagexx,Pagexx ; $0000-$07FF
  460.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $0800-$0FFF
  461.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $1000-$17FF
  462.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $1800-$1FFF
  463.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $2000-$27FF
  464.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $2800-$2FFF
  465.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $3000-$37FF
  466.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $3800-$3FFF
  467.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $4000-$47FF
  468.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $4800-$4FFF
  469.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $5000-$57FF
  470.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $5800-$5FFF
  471.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $6000-$67FF
  472.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $6800-$6FFF
  473.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $7000-$77FF
  474.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $7800-$7FFF
  475.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $8000-$87FF
  476.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $8800-$8FFF
  477.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $9000-$97FF
  478.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $9800-$9FFF
  479.  
  480.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $A000-$A7FF
  481.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $A800-$AFFF
  482.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $B000-$B7FF
  483.     dc.l    Pagexx,Pagexx,Pagexx,PageMemTex,PageTex,PageTex,PageTex,PageTexMem ; $B800-$BFFF
  484.  
  485.     ; ROM Area
  486.  
  487.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $C000-$C7FF
  488.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $C800-$CFFF
  489.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $D000-$D7FF
  490.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $D800-$DFFF
  491.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $E000-$E7FF
  492.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $E800-$EFFF
  493.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $F000-$F7FF
  494.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $F800-$FFFF
  495.  
  496. _PagexAddTableHires:
  497.     dc.l    Pagexx,Pagexx,Pagexx,Page03,Pagexx,Pagexx,Pagexx,Pagexx ; $0000-$07FF
  498.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $0800-$0FFF
  499.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $1000-$17FF
  500.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $1800-$1FFF
  501.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $2000-$27FF
  502.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $2800-$2FFF
  503.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $3000-$37FF
  504.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $3800-$3FFF
  505.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $4000-$47FF
  506.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $4800-$4FFF
  507.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $5000-$57FF
  508.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $5800-$5FFF
  509.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $6000-$67FF
  510.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $6800-$6FFF
  511.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $7000-$77FF
  512.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $7800-$7FFF
  513.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $8000-$87FF
  514.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $8800-$8FFF
  515.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $9000-$97FF
  516.     dc.l    Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx,Pagexx ; $9800-$9FFF
  517.  
  518.     dc.l    PageHi,PageHi,PageHi,PageHi,PageHi,PageHi,PageHi,PageHi ; $A000-$A7FF
  519.     dc.l    PageHi,PageHi,PageHi,PageHi,PageHi,PageHi,PageHi,PageHi ; $A800-$AFFF
  520.     dc.l    PageHi,PageHi,PageHi,PageHi,PageHi,PageHi,PageHi,PageHi ; $B000-$B7FF
  521.     dc.l    PageHi,PageHi,PageHi,PageHi,PageHi,PageHi,PageHi,PageHiTexMem ; $B800-$BFFF
  522.  
  523.     ; ROM Area
  524.  
  525.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $C000-$C7FF
  526.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $C800-$CFFF
  527.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $D000-$D7FF
  528.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $D800-$DFFF
  529.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $E000-$E7FF
  530.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $E800-$EFFF
  531.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $F000-$F7FF
  532.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $F800-$FFFF
  533.     dc.l    PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom,PageRom ; $F800-$FFFF
  534.  
  535. ScreenAttTable:
  536.     dc.l    0,0,0,0,0,0,0,0
  537.     dc.l    0,0,0,0,0,0,0,0
  538.     dc.l    0,0,0,0,0,0,0,0
  539.     dc.l    ATT_TEXT60,ATT_TEXT60,ATT_TEXT50,ATT_TEXT50
  540.     dc.l    ATT_HIRES60,ATT_HIRES60,ATT_HIRES50,ATT_HIRES50
  541.  
  542. _MemPagePtr:
  543.     dc.l    _PagexAddTableText
  544.  
  545. ; ** 6522
  546.  
  547. _UserLoadT2:
  548.     dc.b    0
  549.     even
  550. _UserLoadT1:
  551.     dc.b    0
  552.     even
  553.