home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / emulaton / trash80 / !Trash80 / c / EmuWriteT < prev    next >
Text File  |  1992-10-08  |  2KB  |  116 lines

  1. #include  <stdio.h>
  2. #include  <string.h>
  3. #include  "bbc.h"
  4.  
  5. #include  "general.h"
  6. #include  "Externals.h"
  7.  
  8. /* Ecran texte Apple */
  9. #define MODE_TRS 0
  10. #define MODE_TRS32 4
  11.  
  12.  
  13. BOOL UpdWInter(u_int ad, u_char vx)
  14. {
  15. switch(ad & 0xff)
  16.     {
  17.     extern void SelK7(u_char vx), WrDisk(u_char lad, u_char vx);
  18.     case 0xe4:
  19.         SelK7(vx);
  20.         return(FALSE);
  21.     case 0xe1: /* Drive selection 1 <= vx <= 4 */
  22.  
  23.     case 0xec: /* command */
  24.     case 0xed: /* track */
  25.     case 0xee: /* sector */
  26.     case 0xef: /* data */
  27.         WrDisk(ad & 0xff, vx);
  28.         return(TRUE);
  29.     }
  30. return(FALSE);
  31. }
  32.  
  33. BOOL (*EmuWrite[SIZE_CODE>>8])(u_int ax, u_char vx);
  34. void RafEcrAC64(void);
  35. void RafEcrAC32(void);
  36. void (*RafEcr3264)(void)= RafEcrAC64;
  37.  
  38. BOOL UpdScreen64(u_int ax, u_char vx);
  39.  
  40. static int offset[8] =
  41.     {
  42.     0x40, 0x00, 0x00, 0x00,
  43.     -0x40, -0x60, -0x80, -0xa0
  44.     };
  45.  
  46. BOOL UpdScreen64(u_int ad, u_char vx)
  47. {
  48. bbc_tab(ad & 0x3f, (ad - 0x3c00)>>6);
  49. bbc_vdu(vx+offset[vx>>5]);
  50. return(FALSE);
  51. }
  52.  
  53. BOOL UpdScreen32(u_int ad,u_char vx)
  54. {
  55. if(!(ad & 1))
  56.     {
  57.     bbc_tab((ad & 0x3f)>>1,(ad - 0x3c00)>>6);
  58.     bbc_vdu(vx+offset[vx>>5]);
  59.     }
  60. return(FALSE);
  61. }
  62.  
  63. void RafEcrAC64()
  64. {
  65. u_int ad;
  66. u_int p;
  67.  
  68. for(ad=0x3c00; ad< 0x4000; ad+= 0x40)
  69.     {
  70.     bbc_tab(0, (ad - 0x3c00)>>6);
  71.     for(p=0; p<0x40; p++)
  72.         {
  73.         u_char vx= TRSCode->bytes[ad+p]; 
  74.         bbc_vdu(vx+offset[vx>>5]);
  75.         }
  76.     }
  77. }
  78.  
  79. void RafEcrAC32()
  80. {
  81. u_int ad;
  82. u_int p;
  83.  
  84. for(ad=0x3c00; ad< 0x4000; ad+= 0x40)
  85.     {
  86.     bbc_tab(0, (ad - 0x3c00)>>6);
  87.     for(p=0; p<0x40; p+= 2) 
  88.         {
  89.         u_char vx= TRSCode->bytes[ad+p]; 
  90.         bbc_vdu(vx+offset[vx>>5]);
  91.         }
  92.     }
  93. }
  94.  
  95. void SRd32vidTrue()
  96. {
  97. extern void French_bbc_mode(u_char mode);
  98.  
  99. French_bbc_mode(MODE_TRS32);
  100. RafEcr3264= RafEcrAC32;
  101. EmuWrite[0x3c] = EmuWrite[0x3d] =
  102.     EmuWrite[0x3e] = EmuWrite[0x3f] = UpdScreen32;
  103. (*RafEcr3264)();
  104. }
  105.  
  106. void SRd32vidFalse()
  107. {
  108. extern void French_bbc_mode(u_char mode);
  109.  
  110. French_bbc_mode(MODE_TRS);
  111. RafEcr3264= RafEcrAC64;
  112. EmuWrite[0x3c] = EmuWrite[0x3d] =
  113.     EmuWrite[0x3e] = EmuWrite[0x3f] = UpdScreen64;
  114. (*RafEcr3264)();
  115. }
  116.