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