@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:}DISK OPERATING SYSTEM II VERSIONˠMODIFIED 1987 S.A.G.HOLLANDA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED BANKSW ATW 013 COPYING---D2:BANKSW.ATWl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 164ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u00} Setting up ATARI 130XE Ram Disk } Setting up ATARI 256Kb Ram Disk T} DDӅ)ӈDD̍DD)DDХ̍ӥ ` O2L1 BD0EGHI VU}01    BםD1EJK V B۝D1EJK VBDHPEI V` B V V}BD1EJK V BDPEHI V B V BD1EJK V B V8?`D8:D1:DUP.SYSD8:DW}UP.SYSD8:MEM.1m2SAV̅Ω˅͠H)xHIhͭIhXئ׆ǭIӎ` BGD0EGX}HI V`0m4 5L̺8!LPL`RLSL ICBLLHH ICBLHIR ICAX1J\ ICAX2K p}f CIOVVp DOSINI z!CHKSUM1;;Temporary checksum1BUFRLO2;;Temporary pointer to user's buffer)ZTEMP4;;Tem q}porary miscellaneous use)ZTEM28;;Temporary miscellaneous use"STACKP;;Stack pointer save1PORTB;;PIA port B- r}memory control register"PORTA;;PIA port A register*PACTL;;PIA port A control register NMIENX;X; s}X; Check for 64,128 or 256 KX;'X; Load-time code - Copy OS into RAMX;0X;$X;.TXT130 A} A8) AS t}etting up ATARI 130XE Ram DiskA=B A AL AAVTXT256 A} A`) ASetting up ATARI 2 u}56Kb Ram DiskA=j A At AA~X;X; IF $D0=1 THEN 130XEX;X; IF $D0=2 THEN 256Kb XL v}X;GO%>;;START TEST'DD QPORTBPM> PPORTB1'DD Q PPORTB)DD( FNOXE2Q<M>F w} PPORTBP)DDZ HXL256d XE130Q>nPx HNOXE XL256Q>PЖ NOXEQ̠ PPORTBQдR>FXER>F x}XL: XL PTEXT!COS XE$>Q>  PICCOM9Q>TXT130" PICBAL9,Q>TXT1306 PICBAH9@Q>GJ PICBL y}L9TQ>^ PICBLH9h CIOVrQ>|PP Q L>P  $> Q> PICCOM9Q>DRVNUM PIC z}BAL9Q>DRVNUM PICBAH9Q> PICAX19 PICAX29 CIOV&$> 0Q>: PICCOM9D Q>DUP1N PICBAL9XQ>D {}UP1b PICBAH9lQ>v PICAX19Q> PICAX29 CIOVQ> PICCOM9Q> PICBAL9 PICBLL9Q>P PICB |}AH9 PICBLH9 CIOVINXT)> FNXT:  NXTQ> * PICCOM94 CIOV>Q>H$> R PICCOM9\ Q>DUP8f PI }}CBAL9pQ>DUP8z PICBAH9Q> PICAX19Q> PICAX29 CIOVQ>  PICCOM9Q> PICBAL9Q>P PIC ~}BAH9Q> PICBLL9 Q> PICBLH9 CIOV$ Q> . PICCOM98 CIOVB Q>L $> V PICCOM9` Q>MEM8j PICBAL9 }t Q>MEM8~ PICBAH9 Q> PICAX19 Q> PICAX29 CIOV Q> PICCOM9 CIOV Q> 8 P? : DRVNUM } AD8:A= DUP1 AD1:DUP.SYSA= DUP8 AD8:DUP.SYSA= MEM8 AD8:MEM.SAVA= COSQ>;;Zero page pointer( P2 X };< PF Q>P PZ Pd %>n LOOPx "QNMIEN;;Disable NMI interrupts 5;;Save NMIEN M> PNMIEN =;;Disable IRQ } Q@7;;Copy OS 5;;save value QPORTB N>;;Disable OS Rom PPORTB 7 P@7 QPORTB N>;;Enable OS Rom P }PORTB 7 PNMIEN;;Restore NMIEN" .;;Enable IRQ, 36 HLOOP@ $J (>;;Skip pages $CC to D7T HNXPG^ $>h &r N }XPG| #Ά 2 &̚ HLOOP QPORTB N>;;Enable RAM OS X; PPORTB &PORTA;;PA7 = 0 : X; PTEXT $> Q> }  PICCOM9 Q>TXT256 PICBAL9& Q>TXT2560 PICBAH9: Q>GD PICBLL9N Q>X PICBLH9b CIOVl :v   }GO X; X; X; Ramdisk controller code "X;ˠŠӠ̯Š "X;̠ҮԠ  X;  }X; HOOK ,;;Hook into all SIO calls QDDEVIC ODUNIT %>;;Drive A offset %R>1DRIVEA;;Right drive number ? F }HOOKED %>;;DRIVEB offset* R>1DRIVEB4 FHOOKED> OLDVEC H ! ;;If not go to SIOR HOOKED\ @;;If so interceptf }&STACKP;;Save stack pointerp 'ZTEM2;;Store offsetz QDCOMND;;Examine command R> !;;Format ? HNOFMT !FORMAT NO }FMT R> P;;Put sector ? HNOPUT !PUTSEC NOPUT R> R;;Read sector ? HNOSET !GETSEC NOSET R> S;;Read statu }s ? HNOSTT !STATUS NOSTT$R> W;;Write sector ?. HNAKRET8 !PUTSECBX;LBX; Returns-Restore stack pointer,report } error status and returnVX;` NAKRETj $STACKPtB~$%>;;NAK error for improper cmnd 'DSTATSQ> PPAFLG !PA }OUT ERRRET $STACKPB%>;;Bad sector erro 'DSTATSQ> PPAFLG !PAOUT SUCRET  $STACKPB%>;;N }o error( 'DSTATS2Q>< PPAFLGF !PAOUTPX;Z-X; Subroutine - Set pointer to user bufferdX;n SETBUFx'QDBUFLO;;Mo }ve from DCB to zero page PBUFRLOQDBUFLOPBUFRLO:X;5X; Subroutine - Prepare to acces sector of ramdisk }X; SETSEC Q>DENSITYPSECLEN;;Set sector lengthQDAUX1;;Check sector # HNDTZ QDAUX1FOUTRS;;Sector }0 invalidR> EINRNS"*Q>;;Sectors 1-3 always 128 bytes long, PSECLEN6 HINRNS@ OUTRSJ"!NAKRET;;Sector # out o }f rangeTNDTZ^R>;;Check for sectorh DINRNSr HOUTRS|Q>І RDAUX1 DOUTRS INRNSQDAUX1;;Sector # valid }PZTEMP QDAUX1 TZTEMP;U?;;Divide # by 64-Result is bank #, remainder is page # TZTEMPU?O>;;Bank #> } QZTEMPV?V?O>@;;Remainder+64&X;0+X; Subroutine- Prepaire to switch banks;:X; X is bank, A is page #DX;N S }ETBNKXPZTEM2;;Save page #bQ>;;PA7 outputl PPAFLGv PAOUT QPORTBPPBN;;Normal bankM>PPB;;Bank 0 }Q>PPAA;;Bank# in accu,R> ;;Bank# <12 ?DSBNKA;;Yes,jumpQ>;;Banks 12 to 15PPA;;PA7 = 1 SBNKA }A;;Bank# in accu ,R>;;Bank# <8 ? DSBNKB;;Yes, jump*Q>@;;Banks 8 to 154LPB>PPB;;PB4 & PB6= 1H SBNKBRA; };Bank# in accu\M>;;Only bits 0 and 1fT?pT?;;Shift 2 pos leftzLPBPPB;;Bank X in PBQ;;NMI vector PZTEMP }Q PZTEMP%>Q>@;;RTI opcode=;;Disable IRQ3P@ZTEMP7;;Place RTI in NMI routine-disables NMI:;;Leave } 0 in Y, bank # in XX;X; Format routineX; FORMAT$>;;Clear banks 4 to F CLOOP1$Q>@. SETBNK;;Prepare }for switch8QPAB PPORTALQPBVPPORTB;;Switch bank in`Cj CLOOP2t P@ZTEM27;;Zero entire sector~3 )SECLEN H }CLOOP2?#ZTEM2;;Next page ICLOOP2QPBNPPORTB;;Switch bank outQ> PPORTAQNMIP@ZTEMP7;;Enabl }e interrupts.2;;Next bank (>;;Done ? DCLOOP1 SETBUF(5Q>;;Return a sector with 2 FF's and the rest 0's2% }>< FLOOPF)>P HNOTFFZQ>d NOTFFn P@BUFRLO7x3 )SECLEN HFLOOP!SUCRET;;DoneX;X; Write sector r }outineX; PUTSEC SETBUFQ>PCHKSUM;;Zero checksum$ SETSEC;;Point to ramdisk sector PLOOP*Q@BUFRLO7;; }Get byte from user's buffer$PA &PORTA$PB"&PORTB;;Switch bank,#P@ZTEM27;;Put byte into ramdisk6$PBN@&POR }TB;;Normal bankJ$>T &PORTA^,h!OCHKSUM;;Add byte to checksumr PCHKSUM|3!)SECLEN;;Proper sector lenhth HPLO }OP$$>;;Bank F holds checksum table QDAUX1T? QDAUX1U?(L>`;;Sector # indexes checksum table SETBNK }QDAUX1M>? QCHKSUM$PA &PORTA$PB&&PORTB;;Switch bank0P@ZTEM27;;Store checksum:$PBND&PORTB;;N }ormal bankN$>X &PORTAb%>lQNMIvP@ZTEMP7;;Enable interrupts.!SUCRET;;DoneX;X; Read sector routine }X; GETSEC SETBUFQ>PCHKSUM;;Zero checksum SETSEC GLOOP$PA &PORTA$PB &PORTB;;Switch bank }#Q@ZTEM27;;Get byte from ramdisk $PBN*&PORTB;;Normal bank4$>> &PORTAH*P@BUFRLO7;;Put byte into user's buffer }R,\OCHKSUM;;Add to checksumf PCHKSUMp3z!)SECLEN;;Proper sector length HGLOOP"$>;;Bank F for checksum table } QDAUX1T? QDAUX1U?L>` SETBNK QDAUX1M>?$PA &PORTA$PB&PORTB;;Switch bank#Q@Z }TEM27;;Set original checksum$$PBN.&PORTB;;Normal bank8$>B &PORTAL>V%>`QNMIjP@ZTEMP7;;Enable interrupt }st.~(CHKSUM;;Compare checksums FSCSOK$!ERRRET;;If different bad sector SCSOK!SUCRET;;If same, doneX;X }; Read status routineX; STATUS SETBUF%>;;Returns 4 bytesQ>;;All 0's SLOOP P@BUFRLO7 1 ISLOOP } R>DENSITY( HSDONE2Q> <3F0P@BUFRLO7;;First byte tells density of driveP SDONEZ!SUCRET;;DonedX;nX;Subroutin }e for PA7 outputxX; PAOUTX; QPACTLN> PPACTL QPAFLG PPORTA QPACTLN> PPACTLQ> PPORT }A:X;X; Variable storage areaX;"-PAFLG ;;Flag PORTA,$80=output,0=input,6PA ;;value of mem.contr.reg. f }or selected bank66PB ;;Value of mem.contr.reg. for selected bank@5PBN ;;Value of mem.contr.reg. for normal bankJ }=NMI ;;First opcode in NMI routine-Used to restore NMIT)SECLEN ;;Length of current sector^X;h"X; RESET initiali }sation routinerX;|;;Hidden (hopefully !!!)X; NEWINI"PORTB;;Enable RAM OSQ> PPAFLG PAOUTOLDI }NI # ;;Call original DOSINI routine MODINI(Q>NEWINI;;Set hook for next RESET PDOSINIQ>NEWINIPD }OSINI:X;$X; Load-time code-Install ramdisk&X;0B:DODQNR>X FCONTb!ENDlCONTv!QZ;;Save or }iginal SIO vector POLDVECQ[POLDVEC%Q>HOOK;;Install new SIO vectorPZQ>HOOKP[)Q;;Sa }ve first opcode in NMI routinePQP%>Q@7PNMI (QDOSINI;;Save original dosini vector POLDINI  }QDOSINI*POLDINI4 MODINI;;Install new one>Q HL> ;;DRIVE #3&4RP \1 ;;Reinitialize FMS to show ramd }isk presentf!BEG;;DonepX;zX;!X;FORMAT CODE - Format RamdiskX;C AD4:A= ;B AD3:A= ;BX;BEG }$> ;;IOCB # 2Q>;;FORMAT D4: PICCOM9Q> PICBAL9Q>C PICBAH9 CIOV IDRIV3$:.X;8 DRIV3BQ>L } PICCOM9VQ>` PICBAL9jQ>Ct PICBAH9~ CIOV IDUPOPN:;;Error-returnX;@CX;X;DUPLICATE DUP TO RA }MDISKX; AD1:DUP.SYSA= ;BX; DUPOPNX;$> ;;IOCB # 2Q>;;OPEN D1:DUP.SYS PICCOM9;;FOR READQ>@ P }ICBAL9(Q>C2 PICBAH9<Q>F PICAX19PQ>Z PICAX29d CIOVn IDUPRDx:;;Error-returnX;X;X;READ D1:DUP. }SYSX; DUPRDX;Q>;;GET BINARY RECORD PICCOM9Q>PICBAL9;;BUFFER AT $5000Q>P PICBAH9Q>PI }CBLL9;;$220B BYTES (8715)Q># PICBLH9" CIOV, IDUPCL16)>;;END OF FILE ?@ FDUPCL1J:;;Error-returnTX;^X;h }X;CLOSE # 2rX;| DUPCL1X;Q> ;;CLOSE D1:DUP.SYS PICCOM9 CIOV IDUPOPN1:;;Error-returnX;X;WRITE D }4:DUP.SYSX;X;CX; AD4:DUP.SYSA= ;B X; DUPOPN1 X;& $> ;;IOCB # 20 Q>;;OPEN D4:DUP.: PICCOM9;; }FOR WRITED Q>N PICBAL9X Q>Cb PICBAH9l Q>v PICAX19 Q> PICAX29 CIOV IDUPWRT :;;Error-return X; } X; X;WRITE D4:DUP.SYS X; DUPWRT X; Q> ;;PUT BINARY RECORD PICCOM9!Q> !PICBAL9;;BUFFER AT $5000!Q>P }! PICBAH9*!Q>4!PICBLL9;;$1411 BYTES>!Q>H! PICBLH9R! CIOV\! IDUPCL2f!:;;Error-returnp!X;z!X;!X;CLOSE # 2!X };! DUPCL2!X;!Q> ;;CLOSE D4:DUP.SYS! PICCOM9! CIOV!IFIN!:;;Error-return!X;!X;!X;WRITE MEM.SAV TO DRIVE } #4!X;"FIN"$> "Q>$" PICCOM9." Q>MEM48" PICBAL9B"Q>MEM4L" PICBAH9V"Q>`" PICAX19j"Q>t" PICAX29 }~" CIOV"Q> ;;CLOSE MEM.SAV"$> " PICCOM9" CIOV"X;"X;"X;"Q> 4"P?"ENDQ> ;;CLEAN UP THE"$>;;SCRE }EN" PICCOM9# Q>CLS #PICBAL9;;THANK-YOU# Q>CLS# PICBAH9(#Q>2# PICBLL9<#Q>F# PICBLH9P# !CIOVZ# CLS  }}d#MEM4 AD4:MEM.SAVAn#x# DO;;AND GOODBYE!>CLS# PICBAH9(#Q>2# PICBLL9<#Q>F# PICBLH9P# !CIOVZ# CLS  30100 .OPT NO LIST0110 ;0120 ;0130 ;ˠˠ}Ҡ0140 ;Ҡɠˠ̯Š0150 ;0160 ;ǠɠӠ0170 ;}ŠР0180 ;Ӡ0190 ; Ƞ0200 ;}0210 ;0220 ;0230 ;ǠӺ}0240 ;0250 ;Ӡڠ0260 ;ҠΠ0270 ;}ӠΠ0280 ;ΠΠ0290 ;̠٠0300 ;}0310 ;0320 ;0330 ;ˠ̯Š٠Š03}40 ;Π٠ӠΠ0350 ;0360 ;0370 ;}0380 ;͠ĠĠ0390 ;Ġ٠0400 ;̠٠}0410 ;0420 ;0430 ;0440 ;}ǠɠӠ0450 ;Ӡ0460 ;ĠΠ0470 ;}0480 ;0490 ;0500 ;0510 ;0520 ; OPTIONS: Drive numbers and density0530 ; } if DENSITY=DOUBLE0540 ; then DRIVEA=DRIVEB !!!0550 ;0560 ;0570 ;0580 DRIVEA = 30590 DRIVEB = 40600 DENSITY = }SINGLE0610 ;0620 ;0630 ;ӮӺ0640 ;0650 ;0660 SINGLE = $80 ;Sector lengths0670 DOUBLE = $000680 DDEVIC = }$0300 ;SIO Device Control Block0690 DUNIT = $03010700 DCOMND = $03020710 DSTATS = $03030720 DBUFLO = $03040730 DBYTLO =} $03080740 DAUX1 = $030A0750 ICHID = $03400760 ICDNO = $03410770 ICCOM = $03420780 ICSTA = $03430790 ICBAL = $03440800} ICBAH = $03450810 ICPTL = $03460820 ICPTH = $03470830 ICBLL = $03480840 ICBLH = $03490850 ICAX1 = $034A0860 ICAX2 = $0}34B0870 CIOV = $E4560880 DOSINI = $0C0890 CHKSUM = $31 ;Temporary checksum0900 BUFRLO = $32 ;Temporary pointer to }user's buffer0910 ZTEMP = $34 ;Temporary miscellaneous use0920 ZTEM2 = $38 ;Temporary miscellaneous use0930 STACKP} = $0318 ;Stack pointer save0940 PORTB = $D301 ;PIA port B-memory control register0950 PORTA = $D300 ;PIA port A regis}ter0960 PACTL = $D302 ;PIA port A control register0970 NMIEN = $D40E0980 ;0990 ;1000 ; Check for 64,128 or 256 K1010 };1020 ; Load-time code - Copy OS into RAM1030 ;1040 *= $30001050 ;1060 ;1070 TXT130 .BYTE "} "1080 .B}YTE "Setting up ATARI 130XE Ram Disk",$9B1090 .BYTE " "1100 .BYTE ""1110 TXT256 .BYTE }"} "1120 .BYTE "Setting up ATARI 256Kb Ram Disk",$9B1130 .BYTE " "1140 .BYTE "}"1150 ;1160 ; IF $D0=1 THEN 130XE1170 ;1180 ; IF $D0=2 THEN 256Kb XL1190 ;1200 GO1210 LDY #2 ;START TEST}1220 STY $44441230 LDA PORTB1240 STA $CC1250 AND #$AF1260 STA PORTB1270 DEY 1280 STY $4444}1290 LDA $CC1300 STA PORTB1310 CPY $44441320 BEQ NOXE1330 LDA $CC1340 AND #$EF1350 STA PORT}B1360 CPY $44441370 BNE XL2561380 XE130 LDA #11390 STA $D01400 BNE NOXE1410 XL256 LDA #21420 STA $}D01430 NOXE LDA $CC1440 STA PORTB1450 LDA $D01460 CMP #11470 BEQ XE1480 CMP #21490 BEQ XL1500} RTS 1510 XL JSR PTEXT1520 JMP COS1530 XE LDX #01540 LDA #111550 STA ICCOM,X1560 LDA #TXT130&255}1570 STA ICBAL,X1580 LDA #TXT130/2561590 STA ICBAH,X1600 LDA #711610 STA ICBLL,X1620 LDA #01630} STA ICBLH,X1640 JSR CIOV1650 LDA #81660 STA 19201670 STA 29531680 LDA $070A1690 ORA #$801}700 STA $070A1710 JSR $07E01720 LDX #$201730 LDA #2541740 STA ICCOM,X1750 LDA #DRVNUM&2551760 } STA ICBAL,X1770 LDA #DRVNUM/2561780 STA ICBAH,X1790 LDA #01800 STA ICAX1,X1810 STA ICAX2,X1820 } JSR CIOV1830 LDX #$201840 LDA #31850 STA ICCOM,X1860 LDA #DUP1&2551870 STA ICBAL,X1880 LDA #}DUP1/2561890 STA ICBAH,X1900 LDA #41910 STA ICAX1,X1920 LDA #01930 STA ICAX2,X1940 JSR CIOV195}0 LDA #71960 STA ICCOM,X1970 LDA #01980 STA ICBAL,X1990 STA ICBLL,X2000 LDA #$502010 STA IC}BAH,X2020 STA ICBLH,X2030 JSR CIOV2040 BPL NXT2050 CPY #$882060 BEQ NXT2070 RTS 2080 NXT LDA #}122090 STA ICCOM,X2100 JSR CIOV2110 LDA #32120 LDX #$202130 STA ICCOM,X2140 LDA #DUP8&2552150 } STA ICBAL,X2160 LDA #DUP8/2562170 STA ICBAH,X2180 LDA #82190 STA ICAX1,X2200 LDA #02210 STA} ICAX2,X2220 JSR CIOV2230 LDA #112240 STA ICCOM,X2250 LDA #$002260 STA ICBAL,X2270 LDA #$50228}0 STA ICBAH,X2290 LDA #$112300 STA ICBLL,X2310 LDA #$142320 STA ICBLH,X2330 JSR CIOV2340 LD}A #122350 STA ICCOM,X2360 JSR CIOV2370 LDA #32380 LDX #$202390 STA ICCOM,X2400 LDA #MEM8&25524}10 STA ICBAL,X2420 LDA #MEM8/2562430 STA ICBAH,X2440 LDA #82450 STA ICAX1,X2460 LDA #02470 }STA ICAX2,X2480 JSR CIOV2490 LDA #122500 STA ICCOM,X2510 JSR CIOV2520 LDA #'82530 STA $153F254}0 RTS 2550 DRVNUM .BYTE "D8:",$9B2560 DUP1 .BYTE "D1:DUP.SYS",$9B2570 DUP8 .BYTE "D8:DUP.SYS",$9B2580 MEM8 .BYTE "D8:}MEM.SAV",$9B2590 COS LDA #$C0 ;Zero page pointer2600 STA $CC2610 ;2620 STA $CE2630 LDA #02640 STA $C}B2650 STA $CD2660 LDY #$002670 LOOP2680 LDA NMIEN ;Disable NMI interrupts2690 PHA ;Save NMIEN}2700 AND #$002710 STA NMIEN2720 SEI ;Disable IRQ2730 LDA ($CB),Y ;Copy OS2740 PHA ;sa}ve value2750 LDA PORTB2760 EOR #1 ;Disable OS Rom2770 STA PORTB2780 PLA 2790 STA ($CD),Y2800 } LDA PORTB2810 EOR #1 ;Enable OS Rom2820 STA PORTB2830 PLA 2840 STA NMIEN ;Restore NMIEN2850 } CLI ;Enable IRQ2860 INY 2870 BNE LOOP2880 LDX $CC2890 CPX #$CB ;Skip pages $CC to D72900 } BNE NXPG2910 LDX #$D72920 STX $CE2930 NXPG2940 INC $CE2950 INX 2960 STX $CC2970 BNE LOOP298}0 LDA PORTB2990 EOR #$01 ;Enable RAM OS3000 ;3010 STA PORTB3020 STX PORTA ;PA7 = 03030 RTS 304}0 ;3050 PTEXT3060 LDX #03070 LDA #113080 STA ICCOM,X3090 LDA #TXT256&2553100 STA ICBAL,X3110 L}DA #TXT256/2563120 STA ICBAH,X3130 LDA #713140 STA ICBLL,X3150 LDA #03160 STA ICBLH,X3170 JSR C}IOV3180 RTS 3190 *= $02E23200 .WORD GO3210 ;3220 ;3230 ; Ramdisk controller code3240 ;ˠŠ}Ӡ̯Š3250 ;̠ҮԠ3260 *= $CC003270 ;3280 ;3290 HOOK3300 CLC ;Hook into all} SIO calls3310 LDA DDEVIC3320 ADC DUNIT3330 LDY #$00 ;Drive A offset3340 CMP #$31+DRIVEA ;Right drive }number ?3350 BEQ HOOKED3360 LDY #$80 ;DRIVEB offset3370 CMP #$31+DRIVEB3380 BEQ HOOKED3390 OLDVEC = *}+13400 JMP * ;If not go to SIO3410 HOOKED3420 TSX ;If so intercept3430 STX STACKP ;Save stack }pointer3440 STY ZTEM2 ;Store offset3450 LDA DCOMND ;Examine command3460 CMP #'! ;Format ?3470 BNE }NOFMT3480 JMP FORMAT3490 NOFMT3500 CMP #'P ;Put sector ?3510 BNE NOPUT3520 JMP PUTSEC3530 NOPUT354}0 CMP #'R ;Read sector ?3550 BNE NOSET3560 JMP GETSEC3570 NOSET3580 CMP #'S ;Read status ?3590 } BNE NOSTT3600 JMP STATUS3610 NOSTT3620 CMP #'W ;Write sector ?3630 BNE NAKRET3640 JMP PUTSEC3650 } ;3660 ; Returns-Restore stack pointer,report error status and return3670 ;3680 NAKRET3690 LDX STACKP3700 TXS 3 }710 LDY #139 ;NAK error for improper cmnd3720 STY DSTATS3730 LDA #03740 STA PAFLG3750 JMP PAOUT37 }60 ERRRET3770 LDX STACKP3780 TXS 3790 LDY #144 ;Bad sector erro3800 STY DSTATS3810 LDA #03820  } STA PAFLG3830 JMP PAOUT3840 SUCRET3850 LDX STACKP3860 TXS 3870 LDY #1 ;No error3880 STY DSTA }TS3890 LDA #03900 STA PAFLG3910 JMP PAOUT3920 ;3930 ; Subroutine - Set pointer to user buffer3940 ;3950 SE}TBUF3960 LDA DBUFLO ;Move from DCB to zero page3970 STA BUFRLO3980 LDA DBUFLO+13990 STA BUFRLO+14000 } RTS 4010 ;4020 ; Subroutine - Prepare to acces sector of ramdisk4030 ;4040 SETSEC4050 LDA #DENSITY4060 STA SE}CLEN ;Set sector length4070 LDA DAUX1+1 ;Check sector #4080 BNE NDTZ4090 LDA DAUX14100 BEQ OUTRS ;Sect}or 0 invalid4110 CMP #44120 BCS INRNS4130 LDA #$80 ;Sectors 1-3 always 128 bytes long4140 STA SECLEN4}150 BNE INRNS4160 OUTRS4170 JMP NAKRET ;Sector # out of range4180 NDTZ4190 CMP #2 ;Check for sector420}0 BCC INRNS4210 BNE OUTRS4220 LDA #$D04230 CMP DAUX14240 BCC OUTRS4250 INRNS4260 LDA DAUX1 ;S}ector # valid4270 STA ZTEMP4280 LDA DAUX1+14290 ASL ZTEMP4300 ROL A ;Divide # by 64-Result is bank }#, remainder is page #4310 ASL ZTEMP4320 ROL A4330 ADC #4 ;Bank #4340 TAX 4350 LDA ZTEMP4360 } LSR A4370 LSR A4380 ADC #$40 ;Remainder+644390 ;4400 ; Subroutine- Prepaire to switch banks;4410 ; X is ba}nk, A is page #4420 ;4430 SETBNK4440 STA ZTEM2+1 ;Save page #4450 LDA #$80 ;PA7 output4460 STA PAFLG4470} JSR PAOUT4480 LDA PORTB4490 STA PBN ;Normal bank4500 AND #$A34510 STA PB ;Bank 04520 L}DA #04530 STA PA4540 TXA ;Bank# in accu4550 CLC 4560 CMP #$0C ;Bank# <12 ?4570 BCC SBNKA } ;Yes,jump4580 LDA #$80 ;Banks 12 to 154590 STA PA ;PA7 = 14600 SBNKA4610 TXA ;Bank# in accu}4620 CLC 4630 CMP #8 ;Bank# <8 ?4640 BCC SBNKB ;Yes, jump4650 LDA #$40 ;Banks 8 to 154660 }ORA PB4670 STA PB ;PB4 & PB6= 14680 SBNKB4690 TXA ;Bank# in accu4700 AND #3 ;Only bits 0 an}d 14710 ASL A4720 ASL A ;Shift 2 pos left4730 ORA PB4740 STA PB ;Bank X in PB4750 LDA $FF}FA ;NMI vector4760 STA ZTEMP4770 LDA $FFFB4780 STA ZTEMP+14790 LDY #04800 LDA #$40 ;RTI opcode}4810 SEI ;Disable IRQ4820 STA (ZTEMP),Y ;Place RTI in NMI routine-disables NMI4830 RTS ;Leave 0 } in Y, bank # in X4840 ;4850 ; Format routine4860 ;4870 FORMAT4880 LDX #4 ;Clear banks 4 to F4890 CLOOP14900 !} LDA #$404910 JSR SETBNK ;Prepare for switch4920 LDA PA4930 STA PORTA4940 LDA PB4950 STA PORTB "} ;Switch bank in4960 TYA 4970 CLOOP24980 STA (ZTEM2),Y ;Zero entire sector4990 INY 5000 CPY SECLEN5010 #} BNE CLOOP25020 TAY 5030 INC ZTEM2+1 ;Next page5040 BPL CLOOP25050 LDA PBN5060 STA PORTB ;Switc$}h bank out5070 LDA #05080 STA PORTA5090 LDA NMI5100 STA (ZTEMP),Y ;Enable interrupts5110 CLI 5120 %} INX ;Next bank5130 CPX #$10 ;Done ?5140 BCC CLOOP15150 JSR SETBUF5160 LDA #$FF ;Return a&} sector with 2 FF's and the rest 0's5170 LDY #05180 FLOOP5190 CPY #25200 BNE NOTFF5210 LDA #05220 NOTFF'}5230 STA (BUFRLO),Y5240 INY 5250 CPY SECLEN5260 BNE FLOOP5270 JMP SUCRET ;Done5280 ;5290 ; Write (}sector routine5300 ;5310 PUTSEC5320 JSR SETBUF5330 LDA #05340 STA CHKSUM ;Zero checksum5350 JSR SETSEC)} ;Point to ramdisk sector5360 PLOOP5370 LDA (BUFRLO),Y ;Get byte from user's buffer5380 LDX PA5390 STX PORTA*}5400 LDX PB5410 STX PORTB ;Switch bank5420 STA (ZTEM2),Y ;Put byte into ramdisk5430 LDX PBN5440 ST+}X PORTB ;Normal bank5450 LDX #05460 STX PORTA5470 CLC 5480 ADC CHKSUM ;Add byte to checksum5490 S,}TA CHKSUM5500 INY 5510 CPY SECLEN ;Proper sector lenhth5520 BNE PLOOP5530 LDX #$0F ;Bank F holds chec-}ksum table5540 LDA DAUX15550 ASL A5560 LDA DAUX1+15570 ROL A5580 ORA #$60 ;Sector # indexes check.}sum table5590 JSR SETBNK5600 LDA DAUX15610 AND #$7F5620 TAY 5630 LDA CHKSUM5640 LDX PA5650 /} STX PORTA5660 LDX PB5670 STX PORTB ;Switch bank5680 STA (ZTEM2),Y ;Store checksum5690 LDX PBN5700 0} STX PORTB ;Normal bank5710 LDX #05720 STX PORTA5730 LDY #05740 LDA NMI5750 STA (ZTEMP),Y ;Enable 1}interrupts5760 CLI 5770 JMP SUCRET ;Done5780 ;5790 ; Read sector routine5800 ;5810 GETSEC5820 JSR SETBUF2}5830 LDA #05840 STA CHKSUM ;Zero checksum5850 JSR SETSEC5860 GLOOP5870 LDX PA5880 STX PORTA5890 3} LDX PB5900 STX PORTB ;Switch bank5910 LDA (ZTEM2),Y ;Get byte from ramdisk5920 LDX PBN5930 STX PORTB 4} ;Normal bank5940 LDX #05950 STX PORTA5960 STA (BUFRLO),Y ;Put byte into user's buffer5970 CLC 5980 5} ADC CHKSUM ;Add to checksum5990 STA CHKSUM6000 INY 6010 CPY SECLEN ;Proper sector length6020 BNE GLOOP6}6030 LDX #$0F ;Bank F for checksum table6040 LDA DAUX16050 ASL A6060 LDA DAUX1+16070 ROL A6080 7} ORA #$606090 JSR SETBNK6100 LDA DAUX16110 AND #$7F6120 TAY 6130 LDX PA6140 STX PORTA6150 8} LDX PB6160 STX PORTB ;Switch bank6170 LDA (ZTEM2),Y ;Set original checksum6180 LDX PBN6190 STX PORTB 9} ;Normal bank6200 LDX #06210 STX PORTA6220 TAX 6230 LDY #06240 LDA NMI6250 STA (ZTEMP),Y ;Enab:}le interrupts6260 CLI 6270 CPX CHKSUM ;Compare checksums6280 BEQ SCSOK6290 JMP ERRRET ;If different bad;} sector6300 SCSOK6310 JMP SUCRET ;If same, done6320 ;6330 ; Read status routine6340 ;6350 STATUS6360 JSR SETB<}UF6370 LDY #3 ;Returns 4 bytes6380 LDA #0 ;All 0's6390 SLOOP6400 STA (BUFRLO),Y6410 DEY 6420 =} BPL SLOOP6430 CMP #DENSITY6440 BNE SDONE6450 LDA #$206460 INY 6470 STA (BUFRLO),Y ;First byte te>}lls density of drive6480 SDONE6490 JMP SUCRET ;Done6500 ;6510 ;Subroutine for PA7 output6520 ;6530 PAOUT6540 ;65?}50 LDA PACTL6560 EOR #46570 STA PACTL6580 LDA PAFLG6590 STA PORTA6600 LDA PACTL6610 EOR #4@}6620 STA PACTL6630 LDA #06640 STA PORTA6650 RTS 6660 ;6670 ; Variable storage area6680 ;6690 PAFLG *= A}*+1 ;Flag PORTA,$80=output,0=input6700 PA *= *+1 ;value of mem.contr.reg. for selected bank6710 PB *= *+1 ;VB}alue of mem.contr.reg. for selected bank6720 PBN *= *+1 ;Value of mem.contr.reg. for normal bank6730 NMI *= *+1 ;C}First opcode in NMI routine-Used to restore NMI6740 SECLEN *= *+1 ;Length of current sector6750 ;6760 ; RESET initialisaD}tion routine6770 ;6780 *= $0100 ;Hidden (hopefully !!!)6790 ;6800 NEWINI6810 DEC PORTB ;Enable RAM OS6820 E} LDA #$806830 STA PAFLG6840 JSR PAOUT6850 OLDINI = *+16860 JSR * ;Call original DOSINI routine6870 F}MODINI6880 LDA #NEWINI&$FF ;Set hook for next RESET6890 STA DOSINI6900 LDA #NEWINI/$01006910 STA DOSINI+1G}6920 RTS 6930 ;6940 ; Load-time code-Install ramdisk6950 ;6960 *= $42006970 DO6980 LDA $D06990 CMP #H}27000 BEQ CONT7010 JMP END7020 CONT7030 LDA $E45A ;Save original SIO vector7040 STA OLDVEC7050 LDI}A $E45B7060 STA OLDVEC+17070 LDA #HOOK&$FF ;Install new SIO vector7080 STA $E45A7090 LDA #HOOK/$01007100J} STA $E45B7110 LDA $FFFA ;Save first opcode in NMI routine7120 STA $CB7130 LDA $FFFB7140 STA $CC71K}50 LDY #07160 LDA ($CB),Y7170 STA NMI7180 LDA DOSINI ;Save original dosini vector7190 STA OLDINI720L}0 LDA DOSINI+17210 STA OLDINI+17220 JSR MODINI ;Install new one7230 LDA $070A7240 ORA #12 ;DRIVEM} #3&47250 STA $070A7260 JSR $07E0 ;Reinitialize FMS to show ramdisk present7270 JMP BEG ;Done7280 ;729N}0 ;7300 ;FORMAT CODE - Format Ramdisk7310 ;7320 *= $43007330 .BYTE "D4:",9 B7340 .BYTE "D3:",9 B7350 ;736O}0 BEG7370 LDX #$20 ;IOCB # 27380 LDA #$FE ;FORMAT D4:7390 STA ICCOM,X7400 LDA #07410 STA ICBALP},X7420 LDA #$437430 STA ICBAH,X7440 JSR CIOV7450 BPL DRIV37460 RTS 7470 ;7480 DRIV37490 LDA #Q}$FE7500 STA ICCOM,X7510 LDA #47520 STA ICBAL,X7530 LDA #$437540 STA ICBAH,X7550 JSR CIOV7560 R} BPL DUPOPN7570 RTS ;Error-return7580 ;7590 *= $43407600 ;7610 ;DUPLICATE DUP TO RAMDISK7620 ;7630 S} .BYTE "D1:DUP.SYS",9 B7640 ;7650 DUPOPN7660 ;7670 LDX #$20 ;IOCB # 27680 LDA #$03 ;OPEN D1:DUP.SYS769T}0 STA ICCOM,X ;FOR READ7700 LDA #$407710 STA ICBAL,X7720 LDA #$437730 STA ICBAH,X7740 LDA #$047U}750 STA ICAX1,X7760 LDA #07770 STA ICAX2,X7780 JSR CIOV7790 BPL DUPRD7800 RTS ;Error-retV}urn7810 ;7820 ;7830 ;READ D1:DUP.SYS7840 ;7850 DUPRD7860 ;7870 LDA #7 ;GET BINARY RECORD7880 STA ICCOM,XW}7890 LDA #07900 STA ICBAL,X ;BUFFER AT $50007910 LDA #$507920 STA ICBAH,X7930 LDA #$007940 STA X}ICBLL,X ;$220B BYTES (8715)7950 LDA #$237960 STA ICBLH,X7970 JSR CIOV7980 BPL DUPCL17990 CPY #$88 Y} ;END OF FILE ?8000 BEQ DUPCL18010 RTS ;Error-return8020 ;8030 ;8040 ;CLOSE # 28050 ;8060 DUPCL18070 Z};8080 LDA #$0C ;CLOSE D1:DUP.SYS8090 STA ICCOM,X8100 JSR CIOV8110 BPL DUPOPN18120 RTS ;Er[}ror-return8130 ;8140 ;WRITE D4:DUP.SYS8150 ;8160 ;8170 *= $43A08180 ;8190 .BYTE "D4:DUP.SYS",9 B8200 ;8210 \}DUPOPN18220 ;8230 LDX #$20 ;IOCB # 28240 LDA #$03 ;OPEN D4:DUP.8250 STA ICCOM,X ;FOR WRITE8260 LDA]} #$A08270 STA ICBAL,X8280 LDA #$438290 STA ICBAH,X8300 LDA #$088310 STA ICAX1,X8320 LDA #08330^} STA ICAX2,X8340 JSR CIOV8350 BPL DUPWRT8360 RTS ;Error-return8370 ;8380 ;8390 ;WRITE D4:DUP.SY_}S8400 ;8410 DUPWRT8420 ;8430 LDA #$0B ;PUT BINARY RECORD8440 STA ICCOM,X8450 LDA #08460 STA ICBAL,X`} ;BUFFER AT $50008470 LDA #$508480 STA ICBAH,X8490 LDA #$118500 STA ICBLL,X ;$1411 BYTES8510 LDA #$1a}48520 STA ICBLH,X8530 JSR CIOV8540 BPL DUPCL28550 RTS ;Error-return8560 ;8570 ;8580 ;CLOSE # 2b}8590 ;8600 DUPCL28610 ;8620 LDA #$0C ;CLOSE D4:DUP.SYS8630 STA ICCOM,X8640 JSR CIOV8650 BPL FIN866c}0 RTS ;Error-return8670 ;8680 ;8690 ;WRITE MEM.SAV TO DRIVE #48700 ;8710 FIN8720 LDX #$208730 LDAd} #38740 STA ICCOM,X8750 LDA #MEM4&2558760 STA ICBAL,X8770 LDA #MEM4/2568780 STA ICBAH,X8790 LDAe} #88800 STA ICAX1,X8810 LDA #08820 STA ICAX2,X8830 JSR CIOV8840 LDA #12 ;CLOSE MEM.SAV8850 f}LDX #$208860 STA ICCOM,X8870 JSR CIOV8880 ;8890 ;8900 ;8910 LDA #'48920 STA $153F8930 END LDA #11 g} ;CLEAN UP THE8940 LDX #$00 ;SCREEN8950 STA ICCOM,X8960 LDA #CLS&2558970 STA ICBAL,X ;THANK-YOU8980 q}Pb%DOS SYSb*)DUP SYSbSRAMDISK COMbgaRAMDISK M65bRAMDISK SRCb sBANKSW ATW` `Ӡ`蠠`렠`򠲵`̠ LDA #CLS/2568990 STA ICBAH,X9000 LDA #19010 STA ICBLL,X9020 LDA #09030 STA ICBLH,X9040 JMP Cr}IOV9050 CLS .BYTE $7D9060 MEM4 .BYTE "D4:MEM.SAV"9070 *= $02E29080 .WORD DO ;AND GOODBYE!LH,X9040 JMP Cj12 2 1 5 0 10 76 2 0 1322769BANKSWITCHING 256K ATARI 800XL277027662PORTA = $ D300 PACTL = $ D302 t} PORTB = $ D301Funkties van de verschillende bits van PORTB:PB0 = 0 :Enable RAM 48 - 64K. PB0 = 1 :Enable OS ROM 48u} - 64K.PB1 = 0 :Enable Basic ROM PB1 = 1 :Enable RAM 40 - 48K.PB4 = 0 :Enable CPU banking PB4 = 1 :Disable v}CPU banking.PB5 = 0 :Enable ANTIC banking PB5 = 1 :Disable ANTIC banking.PB7 = 0 :Enable Self test PB7 = 1 :Dw}isable Self test.PB2, PB3, PB6 en PA7 worden gebruikt voor het selekteren van de extra banken.Banknummering:Banken 0 tx}/m 3 zijn de normale banken van de 800 XL. Voorwaarden voor het gebruik van deze banken zijn:PB4 EN PB5 = 0.0 - 16K = Bay}nk # 016 - 32K = Bank # 132 - 48K = Bank # 248 - 64K = Bank # 3Extra banken:Banken 4 t/m 15 zijn de extra banken.Voorz}waarden voor het gebruik van deze banken zijn:PB4 = 0 OF PB5 = 0 EN A14 = 1 EN A15 = 0.Bank # PA7 PB6 PB3 PB2 4 {} X 0 0 0 5 X 0 0 1 6 X 0 1 0 7 X 0 1 1 8 0 1 |} 0 0 9 0 1 0 1 10 0 1 1 0 11 0 1 1 1 12 1 1 0 0 13}} 1 1 0 1 14 1 1 1 0 15 1 1 1 1Adreslijn A8 DRAM.Bank # A8 Row. A8 C~}ol. PB6 PA7 0 t/m 3 0 0 4 t/m 7 0 1 0 X 8 t/m 11 1 1 1 012 t/m 15 1 } 0 1 1 0 4 t/m 7 0 1 0 X 8 t/m 11 1 1 1 012 t/m 15 1