Datacartridge HBI-55 Onbekend, 00-00-00 +-----------------------------+ ||| Sony Datacartridge HBI-55 ||| +-----------------------------+ Een aantal jaren geleden werd deze cartridge in grote aantallen gedumpt op de beurs in Tilburg. Thuisgekomen bleek echter dat je een Sony HB-55P of HB-75P/B computer moest hebben om dat ding te kunnen gebruiken. Ik ben echter een stukje tegengekomen waarin de bouw en de werking wordt uitgelegd. Hier volgt dat stukje (in een iets vereenvoudigde vorm). Het blokschema: IRQ en A2-A7 A0-A1 RD/WR D0-D7 +-------------+ | | | | |||||||| |Adresdecoding+-+ | | | | |||||||| +-------------+ | | | | | |||||||| +---------------+--+-+---+-+--++++++++-+ |8255 Programmable Peripheral Interface| +---++++++++----++++++++----++++++++---+ C|||||||| B|||||||| A|||||||| |||||||| |||||||+---+|||||||| |||||||| ||||||+---+||||||||| |||||||| || |+---+|||||||||| |||||||| || +---+||||||||||| +-++++++++----++------++++++++++++-+ | D0-D7 W/R EN A0-A11 | | 4 Kilobyte statisch RAM | +----------------------------------+ De communicatie vindt plaats via de I/O poorten &HB0-&HB3. De verdeling is als volgt: &HB0 : lezen/schrijven poort A van de PPI &HB1 : lezen/schrijven poort B van de PPI &HB2 : lezen/schrijven poort C van de PPI &HB3 : lezen/schrijven controleregister PPI De PPI (Programmable Perpheral Interface) verzorgt de communicatie tussen het geheugen in de cartridge en de MSX. Deze is verder niet van belang. Het controleregeister dient om de poorten A,B en C te selecteren voor lezen of schrijven en om in te stellen op wat voor manier die poorten precies moeten werken. Voor ons zijn slecht twee instellingen van belang. nl.: &H80 - om in het geheugen te schrijven, en &H89 - om uit het geheugen te lezen. Lezen en schrijven loopt altijd via poort C. Poort A wordt gebruikt voor de laagste 8 adreslijnen. Bij poort B moet bit 6 altijd 1 zijn. Bit 7 geeft aan of er gelezen (1) of geschreven (0) moet worden. Bit 0-3 zijn de hoge adreslijnen. Nu voor de duidelijkheid even een voorbeeld: Om op adres &H0AC2 de waarde &HD3 te schrijven moet er het volgende gebeuren: OUT &HB3,&H80 ' geeft aan dat er geschreven moet worden OUT &HB0,&HC2 ' lage deel van het adres OUT &HB1,&H4A ' = &H40 (schrijven) + &H0A (hoge deel v.h. adres) OUT &HB2,&HD3 ' de te schrijven waarde Het hoge deel van het adres volgt uit: adres \ 256 Het lage deel van het adres volgt uit: adres mod 256 Omdat het maar een 4KB geheugen is lopen de geheugen adressen van &H000 tot &HFFF. De te schrijven waarde ligt tussen 0 en 255. Teruglezen van deze waarde kan door middel van: OUT &HB3,&H89 ' geeft aan dat er gelezen moet worden OUT &HB0,&HC2 ' lage deel van het adres OUT &HB1,&HCA ' = &HC0 (lezen) + &H0A (hoge deel v.h. adres) PRINT INP(&HB2) ' de inhoud van &H0AC2 U ziet (hopelijk) dat het lezen en schrijven uit en naar de data-cartridge helemaal niet moeilijk is. U gebruikt gewoon de laatste twee voorbeelden. Tenslotte nog een laatste voorbeeld. 10 REM lezen & schrijven in de Sony HBI-55 20 REM een 4KB data-cartridge 30 REM 40 SCREEN0: CLS: KEY OFF 50 LINEINPUT"Adres (&H000-&HFFF): &H";A$ 60 H=VAL("&H"+A$): IF H<0 OR H>4095 THEN GOTO 50 70 PRINT:PRINT"Op adres &H";A$;" staat nu de waarde"; 80 LO=H MOD 256: HI=H\256: GOSUB 180: PRINT WA 90 PRINT: LINEINPUT"Nieuwe waarde (0-255): ";WA$: WA=VAL(WA$) 100 IF WA<0 OR WA>255 THEN GOTO 90 110 GOSUB 120: GOTO 40 120 ' schrijven 130 OUT &HB3,&H80 140 OUT &HB0,LO 150 OUT &HB1,&H40+HI 160 OUT &HB2,WA 170 RETURN 180 ' lezen 190 OUT &HB3,&H89 200 OUT &HB0,LO 210 OUT &HB1,&HC0+HI 220 WA=INP(&HB2) 230 RETURN |