+JJJJ  / X5 l-  -   # 01ŠŠԠԠǠŠΠŠӠōͬĠΠōŠΠѭPSEUDO.TEXTvgѭUM2.13.I.TEXT ԪUM2.13.II.TEXT ԪUM2.15.TEXT ԪUM.DISK xCPMSPACE,>gxDOSSPACE,>g SYSTEM.ATTACHvgb ATTACH.DATAvgu PSEUDO.CODEvgfATTACH.DRIVERSgf FILES.TEXT=vgǫSYSTEM.STARTUPg8 PSEUDO.TEXTvg&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xH&x'8*7Ixix&&  ') + &п x) ++`FG8`0($ p,&") (jJJ>L+ "?I>  N `  ` x V Nx .x- z `V0^*^*>` aI꽌ɪVɭ&Y&&Y& 꽌ɪ\8`& .PROC PRINTER_IS, 1 ; ; Prozedur zur Umdefinition des Slots fuer 'PRINTER:' ('#6:'). Bisher ; ging 'PRINTER:' immer auf Slot 1, hiermit wird der Slot frei waehlbar. ; Folgende Slots sind nicht zugalassen ; - Slot 0: enthaelt LDOSPAS RN PHA RTS ; und zurueck ins System .END fuer Zeichenausgabe STA 0D8F0 ; Indizierung fuer Initialisierung LDA 0C08B ; Zurueckschalten auf 2. RAMBANK der LC LDA RETURN+1 ; Returnadresse auf Stack PHA LDA RETULOTNUMBER ASL SLOTNUMBER LDA SLOTNUMBER CLC ADC #80 STA 0D9AD ; Adresse fuer Zeichenausgabe LDA SLOTNUMBER ; Slotnummer STA 0D9CE ; Indizierung ADC SLOTNUMBER STA 0D9D0 ; Adresse Erkennungsbyte (Schreiben) STA 0D8F2 ; Adresse Erkennungsbyte (Initialisierung) ASL SLOTNUMBER ; SLOT * 10 ASL SLOTNUMBER ASL S LDA #0C0 ; Slotadresse erechnen CLC ADC SLOTNUMBER STA 0D9A9 ; Adresse (WRITE TO PRINTER CARD) LDA #27 ; Auswahl des Erkennungsbytes fuer Karte CLC BCS WRONG ; dann Setzte Slotnummer = 1 BCC OK ; ansonsten umdefinieren WRONG LDA #1 ; Slotnummer := 1 STA SLOTNUMBER OK LDA 0C083 ; Auswahl der 1. RAMBANK der LC ; Slotnummer < 1 BCC WRONG ; dann Sezte Slotnummer = 1 CMP #6 ; Slotnummer = 6 BEQ WRONG ; dann Setzte Slotnummer = 1 CMP #8 ; Slotnummer > 7 (>= 8) PLA ; Hole Slotnummer (LSB) STA SLOTNUMBER PLA ; (MSB) BNE WRONG ; nicht 0, Setze Slotnummer = 1 LDA SLOTNUMBER CMP #1 END (* demo *). RETURN .EQU 0 ; PASCAL Returnadresse SLOTNUMBER .EQU 2 ; Slotnummer PLA ; Rette PASCAL Returnadresse STA RETURN PLA STA RETURN+1 interface: '); ; readln(slotnummer) ; UNTIL slotnummer IN [1 .. 4, 7]; ; printer_is(slotnummer); ; rewrite(printer, 'PRINTER:'); ; ... ; close(printer, LOCK); ; printer_is(1) ; o; ; VAR slotnummer: integer; ; printer : text; ; PROCEDURE printer_is(slotnummer: integer); ; EXTERNAL; ; ; BEGIN (* demo *) ; REPEAT ; write('Auf welchem Slot befindet sich das Drucker; SYSTEM.APPLE im Speicher. Auf der Diskette bleibt es im Original- ; zustand erhalten und kann durch neues Booten oder Aufrufen der ; Prozedur mit 'printer_is(1)' in den Urzustand zurueckgesetzt werden. ; ; In PASCAL: ; ; PROGRAM demANGUAGE CARD ; - Slot 6: enthaelt DISK CONTROLER ; Es stehen also die Slots 1 bis 5 und 7 zur Verfuegung. Bei einer ; falschen Slotangabe wird automatisch Slot 1 definiert. ; ; Diese Prozedur modifiziert einige Adressen und Konstanten des B@*   z#z#zzá NOT ENOUGH SPACE ON DISCצWRITING %Xצ...[%#`#`áK#`zz#``   "x DEST DEVICE READY (Y/N)? ץwyצWRITING %Xצ...[%L# #z##`{#`~#`$#!``UצFILE TOO LARGE FOR MEMORY BY ` צ BYTES.  z̀zʀȡZz#`zN DIRECTORYׯ ǸƀNPƀ QƀPצ ƀNƀzǸzʀȡ'z#z`ǀzzNá #ō򩱇FILE NOT FOUND... `š#`#`ǀš۩ڕzzš#``ݕ 6|DDp SOURCE DISC READY (Y/N)?ץצREADING CATALOG...{~̀~ʀġ ~~  zȡz{z~ #`#`ߩǀߩǀÍੱ|ġ Ǎá ߩ}ǀٓQ| š=#`#`ݕ#`  ؓ #  צ SECSá9PRESS TO CONTINUEá #ť#`ÍA5" b  צREADING  NX צ...[  z`'##` =%   #`ˡצ zzȡ(z#z`ǀzz#!`C)?ץǀ AB 0yA(ccept, E(xit, R(estart"" bT {~ˡx#~6##N)?ץ EDIT TABS (Y/N)?ץSOURCE TAB CHAR (DEC)?ץ}ǀצTAB FIELD SIZE (DEC)?|P||צTAB SCAN ABORT CHAR (DEC)?ǀ2ND TAB SCAN ABORT CHAR (DEȄצ.%å%ń% ȄwP w%צCONSOLE:P%צSYSTERM:P%צ NOT AVAILABLEP~%צ#Q:R%ǢPJ%PRINTER:תP8%NOT IMPLEMENTEDתP ln<,.vxz| TEXT FILE (Y/צ BYTES. צ SOURCE DRIVE (4,5,9,10,11,12): x SOURCE FILE: NPN DIRECTORYׯ DEST UNIT (1-12): ץw wyc DEST FILE: %תP %P%ť%@@.R@۪P Ʉ(R : %*** DOS TO PASCAL FILE CONVERSION ***צ (C) 1983 by RCM SOFTWAREMEMORY AVAILABLE: `        تP( RV٪P^  s  צANOTHER FILE? (Y/N)  @@z`e"4L . n  %Xצ...[%L# #z#DOSPACE RV0123456789:;<=>?DOSPACE RV@ABCDEFGHIJKLMNODOSPACE RVPQRSTUVWXYZ[\]^_PASCAL RV`abcdefghijklmnoPASCAL RVpqrstuvwxyz{|}~PSEUDO3 MACPSEUDO COM PSEUALT COMdfull: ; Device voll ret fcb: db 1 ; Drive A asc '$$$ SUB' ; File Name db 0 db 0,0,0,0 db 0,0,0,0 db 0,0,0,0 db 0,0,0,0 db 0,0n, kein File ld de,buffer ld l,0 lopo: push hl push de ld c,.SETDMA ; Set DMA Adress call bdos ; Set DMA Adresse ld de,fcb ld c,.RSEQ call bdos ; Set DMA Adress call bdos ld de,fcb ld c,.WSEQ call bdos ; Write sequential pop de pop hl ex de,hl ld bc,080h add hl,bc ex de,hl or aPSEUDO1 MAC3 PSEUDO2 MACPSEUDO MACDPSEUALT MAC_ !"#$%&'UM2 17 TXTil: push hl ld de,fcb ld c,.DELETE call bdos ; Delete File ld a,(dskcnt) ; neue Drive Nummer ld (fcb),a ; in FCB ld c,.MAKE ld de,fcb ld a,0 Read sequential pop de pop hl ex de,hl ld bc,080h add hl,bc ex de,hl or a ; Status OK ? jr nz,endfil ; ==> EOF inc l jr lopo endf jr nz,endfull dec l jr nz,lopis ; ; All done, Close File ; ld c,.CLOSE ld de,fcb call bdos ; Close File ret badcre: pop hl ; Zielfile nicht erstellbar en; ; Check, ob $$$.SUB File aktiv, wenn ja, in RAMDISK uebertragen ; subcon: ld c,.OPEN ; Open ld de,fcb ; File Control Block call bdos inc a ; Status OK ? ret z ; ==> Nei ld (fcb+32),a ; Current record 0 call bdos ; Make Files inc a jr z,badcre ; => Create Misslungen ld de,buffer pop hl lopis: push hl push de ld c,.SETDMA ; ,0,0 db 0,0,0 e Name db 0 db 0,0,0,0 db 0,0,0,0 db 0,0,0,0 db 0,0,0,0 db 0,0I2r:R=O!*.RR0>=*Pw!y"v2x2O*B"F:Ii!!!EzK+{K~O:IyO ’2O> > +:J:O¬:Ky«:LO:Mʽ:Nʽ>2Oy!Ez+{>+:xR:j_yJs#r͏'Q͑&͑&gm0!Qi))Js#r͍&Q'Q](Q #!G+͎"!qi)"i͍&''oÕ!Qi))J^#V"J^#V"͍&Q'Q](Ql*i)͑&!~0!n!̓!Ϳ #c!JG+͎"@!L!̓!Ϳ !%k, #!d͎"!,"w*w)go*w|8)?go|g}o|¹ !P!̓!JͿ !J,|_ J!ͷ*#!J͎"**w}o|go!JG,|g}o|ʶ #!d͎"#!d͎"!)!̓!Ϳ !%f, !,)'#!d͎"#!d͎"!!̓!Ϳ !%f, !"g !"D!O!!D" RAM Disk Init V01.06 02.06.85 $ RAM Disk neu initialisieren (J/N): $Fatal: keine RAM-Karte von SIGGI'S Spezialtyp vorhanden $Fatal: 40 Zeichen Darstellung aktiv, kein Patchplatz vorhanden! $Fatal: kein freies Laufweatal: kein freies Laufwerk gefunden $ Laufwerk x: mit 48K als Pseudo Disk installiert $ Warmboot auf Laufwerk x: verlegt $`A`BPCPD@E@F<. ,:2>2$<(* - ",!"!".!"!"0!"!"2!"!"4!"!"6!"!"8!"!":!"! "<!"!">!" !"@!""!"B!"$!"D! "&! "F! "(! "H#!͎"#!͎"#!d͎"#!j"!O"!͎"#!d͎"!!̓!Ϳ !,| \ READING DIRECTORY... /INSERT SOURCE DISC, PRESS RAVRZE)^A(CCEPT, E(XIT, OR R(ESTART, THEN : #2ND TAB SCAN ABORT CHAR (DECIMAL)? TAB SCAN ABORT CHAR (DECIMAL)? DEST TAB CHAR (DECIMAL)? SOURCE TAB CHAR (D!̓!Ϳ 3INSERT CP/M SYSTEM DISC IN BOOT DRIVE; PRESS OANOTHER FILE (Y/N)? fWRITING $qINSERT DESTINATION DISC; PRESS READING FILE TOO LARGE FOR MEMORY BY FILE NOT FOUND; PRESS :  SECS### \ ! ;͍͕D*BܷR  !>2~# ::2>2>2*DܷR ' ]j(J(n(Nʂ:>2: *>!2w=>2(= !p  G2 >228>429>42:x<2= 2>2: (x2bj>6# xrk gefunden $ Laufwerk x: mit 52K als Pseudo Disk installiert $`A`BPCPD@E@F:;: :0O99G:8>@"g.0gy O:y2 /?ww!0x2PCPD@E@F:;: :0O99G:8>@"$$$ SUB:;: :0O99G:8>@"g.0gy O:y2>2 /?ww!0x2V02.05 03.07.85!<+! !>!7! y2go!,|go|g}o|, !"9 !,"*)go*|8)?go|g}o| !y!̓!Ϳ !,|go!,|8)?go|g}o|] !mf, !"g#!d͎"!^!̓!Ϳ !,|go!,|go|g}o| !"w ! #D*BܷR  *޷R  Ej( J(nN>!2w=F>2(= p  kG >22 >42!>42"x<2d2>2x2bk>6# xbk2>6# (2:8  2=GO_!=>w#>w> !w!C ~2S#~2ix2!2! G2!" [>2B.RAM Disk Init V02.05 03.07.85 $ RAM Disk neu initialisieren (J/N): $Fatal: keine RAM-Karte von SIGGI'S Spezialtyp vorhanden $Fatal: 40 Zeichen Darstellung aktiv, kein Patchplatz vorhanden! $Fbk2>6# (2:8  2=GO_!=>w#>w> !w! ~2,#~21qD!(!!D":!22 &: 2!w4:!;ۯ2:=25A2s!4:=2E>2F!>w#!>2! ; ; Check ob 40 Zeichen Ausgabe stillgelegt ist ; raminst:ld de,space ld hl,(scvect) ;Adresse d. aktiven Ausgabe or a ; Clear Carry sbc hl,de ; 40 Zeichen Vector ? jr nz,novier nz,floop1 dec b jr z,floop0 jp p,biloop ; ld (main),a ;CP/M Context schalten ; ; Naechstes freies Laufwerk auswaehlen ; und zur RAM Disk ernennen ; nonorm: ld a,(dskcnt) ;Anzahl Diskdrives ndr ;==>Ja ; ; Kein RAM gefunden ; ld c,print ;Put String 'no Card' ld de,notfou call bdos ret ; ; Kapazitaet und Position (Drive/Slot) notieren ; kapbek: foundr: ld b,a ld (flag),a ld a,(ramkap) ld (flags),a ; Flag exists und kapa bek. ld a,0 ld (main),a jr askaga ; ; Pruefe ob aeltere Version vielleicht aktiv ; chkvca: ld a,0 ld (main),a ld hl,(ptcreich der Disk mit 0E5H normieren ; ld de,ramdi biloop: ld a,b ;Maximale Bank in b retten ld (bank1),a ;Selektieren ld h,d ;RAM-Disk Start ld l,d ld a,high ramdi+30h d hl,ramdi ;Adresse Disk cloop: ld (bank1),a ld (hl),a ;Musterinhalt dec a jp p,cloop ;Next ; ld a,15 rloop: ld (bank1),a cp (hl) ;Inhalt gleich ==> Bank ;==> nein, Patch erlaubt ; ; Melde 40 Zeichen Darstellung in Use ; ld c,print ld de,no80z call bdos ret novier: ld hl,rampart ;Verify Marke ld de,ramdi ld bc,ramkap-rampa; Anzahdd a,a ;Kapazitaet als .. add a,a inc a ld (sploc-space+rel1),a ; .. Trackanzahl in ; Track Pruefbef. add a,a add a,a sub reserv*4+1 ld cp 0fh ;Kleine Version ? jr nz,little ;==> Ja ld a,'2' ld (inskap),a ld a,'4' ld (inskap+1),a ld a,'4' ld (inskap+2),a ld a,b little: ahad) ld de,space or a sbc hl,de jr nz,do_it ; ; RAM-Disk bereits installiert, abfragen ob Neuinitialisierung ; askaga: ld c,print ld de,warnal call bdos ld c,conin calfloop: ld (hl),0e5h inc hl cp h jr nz,floop floop0: ld a,b ld h,d ld l,e ld (bank2),a ld a,high ramdi+10h floop1: ld (hl),0e5h inc hl cp h jr ; vorhanden jr z,found dec a jr nz,rloop ; found: ld hl,main ld b,0 ld (hl),b ;CP/M Bank schalten or a ;Disk da ? jr nz,foul fuer Compare ld a,0 ld (bank2),a nxtchk: ex de,hl ld a,(hl) inc hl ex de,hl cpi jr nz,chkvca jp pe,nxtchk ; ; RAM Disk bereits initialisiert (Kennung sitzt!) ; (dpbdsm-space+rel1),a ; .. K-Byte in DPB ld a,reserv ;Anzahl reserv. Bl. ld (dpbres-space+rel1),a ; in DPB eintragen ; ; Normieren ? ; ld a,(flags) or a jr nz,nonorm ; ; Gesamten Bet: ld a,(flags) or a ret z jr first do_it: ld a,0 ld (flags),a first: ld a,(flags) ;Existiert ? or a jr nz,kapbek ld a,15 ;16 Versuche ll bdos cp 'j' jr z,do_it cp 'J' jr z,do_it cp 'n' jr z,do_not cp 'N' jp z,do_not jr askaga ; ; Pruefe die Kapazitaet (bzw. Existenz) der RAM-Card ; do_no cp 6 ;schon zu viele ? jr c,isfree ;==> Nein, kann mein ; 'Drive' einbauen ; ; bereits 3 Floppy Controller installiert ; ld c,print ld de,nodriv call DOS patchen, damit unser neues ; Laufwerk selektiert wird. ; ld a,(dskcnt) ; Anzahl Disk Drives dec a ld (patanz),a add a,'A' ld (wbdriv),a ld hl,modbd ld de,0d88ch ;nstal call bdos ret x-rampa ld (bank2),a ldir ld (main),a ld c,print ;Put String ld de,i ld (hl),a inc hl ld a,high dpb ld (hl),a ;Adresse des eigenen ; DPB installieren ; ERPHI support ld a,1 ;Allok Mask erphlo: add a,a ;shif ; Neutralisiere 'TEXT' Bef. ld b,3 ld hl,0dabeh wpi: ld (hl),a inc (hl) djnz wpi ; noruhe: ld a,(dpbres) cp 2 ; genuegend Tracks reserv. ? ret c ; ==> Jar ; ld bc,next1-move1 ld de,move1 ld hl,rel2 ldir ; ld hl,space ;Patch Startadr. anstelle ld (ptchad),hl ; C6502 Aufrufs einbauen ; ; we are proudly to present our RAM-Disk ... ;bdos ret ; isfree: or 1 ;ev. um eins erhoehen ld (dskcnt),a dec a ;Laufwerksindex 2 oder 4 ld b,a ;Merke Index add a,a ld c,a ;Index * 2 3$4o3c:!$2!23$4c:3T1k1}:V21=}:11212aj3 L}O1u1E;>20`h3~&ʘ:-o3+o3+c:V4.3eʁ3E«3c:lʙ3Lʙ3qʙ3Qʪ3:13>3~% 4#4!4d3D3$4c:͎:c:43_{_34C43&1}:!$2!3}: t um 1 Position dec b ;Position erreicht ? jr nz,erphlo ;==> nein ld hl,erphis ;Adresse Vector or (hl) ;Hallo Mr. ERPHI, von ; diesem Drive die , kein WB-Install ; ; Fill 'reserved Track' in RAM Disk ; ld hl,0e00h ; Adresse des Orig. WBOOT call c6502 ; Aufrufen xor a ld (bufcnt),a ; Eingabepuffer loeschen ; ; Reset Routine in B ld a,(flags) or a ret nz ld hl,rampart ld de,rampa ld bc,rampex-rampa ld (bank2),a ldir ld (main),a ld c,print ;Put String ld de,i add a,a add a,a add a,a ;Index * 16 ld e,a ld d,0 ld hl,dpe0+dpb_pt ;Adresse der Adresse des ; DPB im DPH add hl,de ld a,low dpb ; WARMBOOT Installation ; ===================== ; Customize BIOS wbootin:ld a,(slttab+2) ; Serial Card (Videx) in cp 4 ; Slot 3 installiert ? jr nz,noruhe ; => Nein xor a ld (0dad1h),anc hl ld a,(hl) ;Drive 'Name' ld (drvlog),a ; in Benutzer Strings ; ; Treiber Segmente auf ihre endgueltigen ; Plaetze schieben ; weiter: ld bc,next-space ld de,space ld hl,rel1 ldi ld (hl),a ; Finger weg! ; ld hl,table ;Zuordnungstabelle ld b,0 add hl,bc ;Index ld a,(hl) ;Slot Nummer ld (spslot-space+rel1),a ; in Befehl mont. i Adresse im BDOS ld bc,modbde-modbd ldir ; CCP modifizieren um SUBMITs vom Electronic Drive ; zu ermoeglichen! ; Einschraenkung: Default Drive darf nicht auf A: ; gesetzt werden, da dies sofort ; zequential .WSEQ equ 21 ; " " Write sequential .MAKE equ 22 ; " " Create File .SETDMA equ 26 ; " " Set DMA Adress ccpbas equ 0c400h ;Anfangsadresse CCP bufcnt equ 0c407h uf Laufwerk ' wbdriv: asc 'x: verlegt' db 0dh,0ah,'$' table: db 60h,'A' ;Ueber Index auszuwaehlende db 60h,'B' ; Slot Nr. und Drive Name db 50h,'C' db 50h,'D' db 40h,'E' ld (bank1),a ld hl,buffer ld de,ramdi ld bc,01000h ldir ld a,b ld (main),a ; ; Transfer von Teil 1 direkt ; ld hl,ccpbas ld de,ramdi+0a00h ld bcler, M2338 ; stand macro asc 'V02.05 03.07.85' endm ; ; CP-Adressen ; wboot equ 0 ;Warmboot Adresse bdos equ 5 ;BDOS Aufruf print equ 9 ; " Funkt. Print String conin equ tal: keine RAM-Karte von SIGGI''S ' asc 'Spezialtyp vorhanden' db 0dh,0ah,'$' no80z: asc 'Fatal: 40 Zeichen Darstellung aktiv, ' asc 'kein Patchplatz vorhanden!' db 0dh,0ah,'$' nodriv: asc 'Fatal: kein freies urueck auf E: (bzw C:) gesetzt wird ld a,(dskcnt) dec a ld (0c545h),a ; LD a,Work_Drive ld a,0cdh ; CALL statt CALL NZ ld (0c546h),a ld hl,0c5e6h ; CALL SELDSK to NOP F.͹GFG~_#~W#~OE8FʹE&DPG_G>OCʹE9DPGE_GȯGE">y2>FoEF!D*?:?OvD?4FÎD͞Dg.*>:>OzwD͞Dg.*?:?ÄDx<=D{_zWxG)yOHGFʹEDPG;G_GEy+F+F+Fw`h|EgyD:?O|g}oxdb 40h,'F' flags: db 0 ; Merker RAMDISK bekannt  db 60h,'B' ; Slot Nr. und Drive Name db 50h,'C' db 50h,'D' db 40h,'E' ,ccpar2-ccpbas ld (bank2),a ldir ; ; Transfer des Treiberteils in der RAM-Disk ; ld hl,rampent ld de,rament ld bc,rampe-rament ldir ld (main),a ; CP/M Context ; ; Ansprung 1 ; " Funkt. Lese Charakter .OPEN equ 15 ; " " Open File .CLOSE equ 16 ; " " Close File .DELETE equ 19 ; " " Delete File .RSEQ equ 20 ; " " Read sLaufwerk gefunden' db 0dh,0ah,'$' instal: db 0dh,0ah asc 'Laufwerk ' drvlog: asc 'x: mit ' inskap: asc ' 48' asc 'K als Pseudo Disk installiert' db 0dh,0ah,'$' wbtext: db 0dh,0ah asc 'Warmboot a ld a,0 ld b,3 wb: ld (hl),a inc hl djnz wb ; ; Transfer von Teil 2 in Buffer und danach in RAM Disk ; ld hl,ccpar2 ld de,buffer ld bc,01000h ldir ld a,1 .z80 aseg org 100h ; RamDisk Programm fuer Apple ][+ ; geeignet fuer selbstgestrickte RAM-Card ; Version 2: Erweitert um Warmboot von RamDisk ; + Erhalt von aktivem SUBMIT ; Assembler: M80 ; Siegmund Muel ld a,0 patanz equ $-1 ld (0cf42h),a ld l,080h modbde: ; hello: asc 'RAM Disk Init ' stand db 0dh,0ah,'$' warnal: db 0dh,0ah asc 'RAM Disk neu initialisieren (J/N): $' notfou: asc 'Fa patchen ; ld hl,wbsim ld (0dfe9h),hl ; ; Hallo alles OK! ; ld c,print ld de,wbtext call bdos ; ret ;System Warmstart exit: jp wboot ; ; BDOS Patch ; modbd: ;Anzahl Zeichen in CCP Buf. ccpar2 equ 0ca00h ;Trennstelle innerhalb CCP ; ; BIOS-Adressen ; buf1 equ 0f800h ;Sektor Puffer dskcnt equ 0f3b8h ;Anzahl Disk Drives ; dpe0 equ 0da33h ;Basisadresse ;==> ist OK errtrk: ld a,040h ; Fehler Status praeparieren jr byebye secok: add a,b ld h,a ;High Byte Adresse ld l,0 ;Low Byte auf 0 ld de,bank1 ;Annahme Bankngsstring call bdos ; call raminst ; Install RAM-Card call subcon ; Continue aktuelles Submit call wbootin ; Install Warm Boot jp wboot INCLUDE PSEUDO1.MAC INCLUDE ;ERPHI Spezial Login Set ramdi equ 0b000h ;Start-Adresse der RAM-Disk ; ; BIOS Funktionen ; bibas equ 0da00h ; BIOS Basisadresse ; seldsk equ 01bh+bibas ;select Disk settrk equ 01eh+bibas ;Track Auswahl setrack jr nc,errtrk ;==> ist zu gross add a,3 ; Never the own memory! ld c,a ;Track retten srl c ;Erstelle Kachel Nr. srl c ; mit Division durch 4 alls integriert sind) main equ 0e087h ;Main Memory (hier muss ne ; 0 abgespeichert werden) ; ; Interne Konstanten ; ldrive equ 1 ;Nummer des Laufwerks reserv equ 2 ;Anzahl d der DPH's dpb_pt equ 0ah ;Offset im DPH Adr. der DPB c6502 equ 0db3bh ;6502 Aufruf ptchad equ 0de83h ;Patchadresse RAM-Floppy scvect equ 0dc42h ;Screen Output Vector space equ 0dc44h ;Bereic ; ld a,(dskslt) cp 0ffh ;Unser Slot ? spslot equ $-1 ; Slot wird hier vermerkt fdisk: jp nz,C6502 ld a,(drv12) cp ldrive ;Unser Drive ? jr nz,fdisk pu PSEUDO2.MAC INCLUDE PSEUDO3.MAC ; ;======================================================= ; Treiberroutine ;======================================================= ; rel1: ;Hauptroutine des Floppy Emulators .phase space tsec equ 021h+bibas ;Sektor Auswahl setdma equ 024h+bibas ;Adressauswahl read equ 027h+bibas ;Read Sektor ; ; Adressen fuer Disk-I/O ; phtrk equ 0f3e0h ;Track Nr. phsec equ 0f3e1h ;Sektor Nummer drv12 and 03h add a,a add a,a add a,a add a,a ;Rest der Tracknummer * 16 ld b,a ld a,(phsec) ;Sektoradresse cp 010h ;Pruefe Sektornummer jr c,secoker reservierten ; 'Tracks' (fuer Warmboot) ; ; Hallo ; start: ld hl,08000h ;Initialwert fuer SP ld sp,hl ld c,print ;Funktion Put String ld de,hello ;Adr. Begruessuh der Apple Screen ; Output Routinen slttab equ 0f3b9h ;Tabelle mit Inhalten Slots move1 equ 0f300h ;freier Platz im I/O Confi- ; guration Block erphis equ 0fffdh sh bc ;Z80 Register retten push de ld a,(phtrk) ;High Byte der Sektor ; Adresse Zusammenbasteln cp 0 ;Vergleich mit Maxtrack sploc equ $-1 ;Hierhin Max ; 'Card Nr' anwaehlen bank2 equ 0e08fh ;Bank 2 ; Hinweis: ; Bank1/2 vertauscht gegenueber Dokumentation um ; continuierliche Adressbereiche zu erhalten (wegen ; der bisher unbenutzten 4K in der Standard LC, ; die ebenf equ 0f3e4h ;Drive Nummer dskslt equ 0f3e6h ;Slot-Nr derr equ 0f3eah ;Fehlercode rdwr equ 0f3ebh ;Read=1, Write=2 ; ; Apple Hardware Adressen ; bank1 equ 0e087h ;Bank 1 in LC und 1 add a,-030h ;Bank 2? jr nc,firstb ; ==> Bank 1, ist OK ld h,a ; Neue Adresse ld de,bank2 ; Neue Kachel firstb: ld a,c ld bc,ramdi add hl,bc ld c,a ­x# :~>   #Ww ~#.J # ,V z@W ~#>.­# w ~##J u T]^###xG#w z+— xʗ ~-ʒ — >Wx2Cxzg."`i"2 ~#ͯ@x³ ͯ@x22   x2y2>22z>+į@! ld de,ccpbas ld bc,rampe-temprou ldir call ccpbas ; 4k (Teil 2) Moven ld hl,ramdi+0a00h ; 1.5k (Teil 1) ld de,ccpbas ld bc,ccpar2-ccpbas ldir jp to_main d a,0 ld (bank2),a jp rament ; ; Disk Parameter Block ; ; Die Adresse des DPB wird im Disk Parameter Header ab- ; gelegt. Der im Extremfall (244K) fast doppelt so ; grosse Allocation Vector im DPH braucht nicht verlegt ; zu jr nz,plopp ; => noch'n Paeckchen ld a,c ld (bank2),a ; Caller Context ret rampe: .dephase ; Ab hier Workbuffer ; buffer: end start  ld hl,buf1 ; RWTS Sektor Puffer jr nc,ovex ; ==> Mode Schreiben ex de,hl ; Quell-/Zieladr. tauschen ovex: ldir ; Transfer 256 Bytes to_main:ld a,b ; =0 ld (main),a ld a,(rdwr) ; Lesen/Schreiben cp 2 ; Falls Carry set: lesen ld a,c ld bc,0100h ;Anzahl Bytes pro Sektor ex de,hl call mov_it ;Routine auf Schaltungs- 6 Bytes plopp: push bc push hl ld bc,0100h ld a,1 ld hl,bank1 scf ; Set Carry -> Move to buff1 call mov_it pop de ; Zieladresse push hl ; ; Dieser Teil wird bei jedem Warmboot auf die Adresse ; des Start's vom CCP gebracht ; temprou:ld de,ramdi ; Quelladresse (LC1, Bank 1) ld hl,ccpar2 ; Zieladresse (LC0, Bank 1) ld c,010h ; Anzahl = 16 * 25 werden, da derjenige des unbenutzten Drive 2 mitbe- ; nutzt werden kann. dpb: defw 32 ; SPT 32 Sektoren pro Track defb 3 ; BSH defb 7 ; BLM defb 0 ; EXM dpbdsm: defw 48-:*_x³::):*DM*}O:+|/~ʆͯ@#C:+*EN#^#V` ʂ uͯ@e$ʂ> ͯ@{):2X:~# ¨ •C: ͯ@_W W~#! # :+~#  +>ʶ+~#.? _ʵ :+~#ʑ­:~ * ; Schaltung zurueck ret next1: .dephase rampart: .phase ramdi rampa: stand ramkap: db 0 flag equ ramkap-rampa+rampart rampex: .dephase rampent: .phase ramdi+020h rament: ld hl,temprou ; unabhaengigem Platz byebye: ld (derr),a ;Status installieren or a pop de pop bc ret ; Return zum Caller wbsim: ; Warmboot von RAM Disk l ; Quelladresse ld hl,buf1 ; Zwischenpuffer ld bc,0100h ldir ; Zum endgueltigen Ziel pop hl ; Quelle pop bc ; Anzahl ex de,hl dec c ; OFF reservierte Spuren next: ; .dephase rel2: .phase move1 ; Dieser Programmteil liegt im I/O Configuration Block mov_it: ld (hl),a ; Selekt Kachel ld (hl),a ; Write enable 1 ; DSM RAM-Kapazitaet (dyn). defw 64-1 ; DRM 64 Directory Eintraege defb 0c0h ; AL0 2 Bloecke fuer Dir. defb 0 ; AL1 defw 0 ; CHKS Check faellt weg dpbres: defw 0 .z80 aseg org 100h ; RamDisk Programm fuer Apple ][+ ; Assembler: M80 ; Volker Girge M 3516 (Urfassung fue Appple//e) ; Siegmund Mueller, M2338 angepasst und erweitert ; fuer selbstgestrickte RAM-Card stand macro ld b,0 ld (hl),b ;CP/M Bank schalten or a ;Disk da ? jr nz,foundr ;==>Ja ; ; Kein RAM gefunden ; ld c,print ;Put String 'no Card' ld de,notfou caln Put String ld de,hello ;Adr. Begruessungsstring call bdos ld de,space ; ; Check ob 40 Zeichen Ausgabe stillgelegt ist ; ld hl,(scvect) ;Adresse d. aktiven Ausgabe or a ; Clequ 0db3bh ;6502 Aufruf ptchad equ 0de83h ;Patchadresse RAM-Floppy scvect equ 0dc42h ;Screen Output Vector space equ 0dc44h ;Bereich der Apple Screen ; Output Routinen move1 equKapazitaet (bzw. Existenz) der RAM-Card ; do_it: first: ld a,15 ;16 Versuche ld hl,ramdi ;Adresse Disk cloop: ld (bank1),a ld (hl),a ;Musterinhalt dec a jp p,cloop ;Nexhalten (wegen ; der bisher unbenutzten 4K in der Standard LC, ; die ebenfalls integriert sind) main equ 0e087h ;Main Memory (hier muss ne ; 0 abgespeichert werden) ; ; Interne Konstanten ; ldrive equ 1 asc 'V01.06 02.06.85' endm ; ; CP-Adressen ; wboot equ 0 ;Warmboot Adresse bdos equ 5 ;BDOS Aufruf print equ 9 ; " Funkt. Print String conin equ 1 ; " Funkt. Le,(ptchad) ;RAM-Disk schon install. ? or a ;Clear Carry sbc hl,de jr nz,first ;==> Erstinstallation ; ; RAM-Disk bereits aktiv, abfragen ob Neuinitialisierung ; askaga: ld c,print ld ar Carry sbc hl,de ; 40 Zeichen Vector ? jr nz,novier ;==> nein, Patch erlaubt ; ; Melde 40 Zeichen Darstellung in Use ; ld c,print ld de,no80z call bdos ret novier: ld hl 0f300h ;freier Platz im I/O Confi- ; guration Block erphis equ 0fffdh ;ERPHI Spezial Login Set ramdi equ 0b000h ;Start-Adresse der RAM-Disk ; ; Adressen fuer Disk-I/O ; phtrk equ 0f3et ; ld a,15 rloop: ld (bank1),a cp (hl) ;Inhalt gleich ==> Bank ; vorhanden jr z,found dec a jr nz,rloop ; found: ld de,main ex de,hl ;Nummer des Laufwerks reserv equ 0 ;Anzahl der reservierten ; 'Tracks' (fuer spaeter ; zu implem. Warmboot) ; ; ; Hallo ; start: ld c,print ;Funktiose Charakter ; ; BIOS-Adressen ; buf1 equ 0f800h ;Sektor Puffer dskcnt equ 0f3b8h ;Anzahl Disk Drives ; dpe0 equ 0da33h ;Basisadresse der DPH's dpb_pt equ 0ah ;Offset im DPH Adr. der DPB c6502 ede,warnal call bdos ld c,conin call bdos cp 'j' jr z,do_it cp 'J' jr z,do_it cp 'n' ret z cp 'N' ret z jr askaga ; ; Pruefe die ware Adressen ; bank1 equ 0e087h ;Bank 1 in LC und ; 'Card Nr' anwaehlen bank2 equ 0e08fh ;Bank 2 ; Hinweis: ; Bank1/2 vertauscht gegenueber Dokumentation um ; continuierliche Adressbereiche zu er0h ;Track Nr. phsec equ 0f3e1h ;Sektor Nummer drv12 equ 0f3e4h ;Drive Nummer dskslt equ 0f3e6h ;Slot-Nr derr equ 0f3eah ;Fehlercode rdwr equ 0f3ebh ;Read=1, Write=2 ; ; Apple Hardl bdos ret ; ; Kapazitaet und Position (Drive/Slot) notieren ; foundr: ld b,a cp 0fh ;Kleine Version ? jr nz,little ;==> Ja ld a,'2' ld (inskap),a ld a,'4' ld J/N): $' notfou: asc 'Fatal: keine RAM-Karte von SIGGI''S ' asc 'Spezialtyp vorhanden' db 0dh,0ah,'$' no80z: asc 'Fatal: 40 Zeichen Darstellung aktiv, ' asc 'kein Patchplatz vorhanden!' db 0dh,0ah,'$' nodriv:,a inc hl ld a,high dpb ld (hl),a ;Adresse des eigenen ; DPB installieren ; ERPHI support ld a,1 ;Allok Mask erphlo: add a,a ;shift um 1 Position ten Bereich der Disk mit 0E5H normieren ; biloop: ld a,b ;Maximale Bank in b retten ld (bank1),a ;Selektieren ld h,d ld l,e ;RAM-Disk Start ld a,high ramdi+30h floop: ld (hl) bc,next1-move1 ld de,move1 ld hl,rel2 ldir ; ld hl,space ;Patch Startadr. anstelle ld (ptchad),hl ; C6502 Aufrufs einbauen ; ; we are proudly to present our RAM-Disk ... ; ld c,p ; isfree: or 1 ;ev. um eins erhoehen ld (dskcnt),a dec a ;Laufwerksindex 2 oder 4 ld b,a ;Merke Index add a,a ld c,a ;Index * 2 add a,a (inskap+1),a ld a,'4' ld (inskap+2),a ld a,b little: add a,a ;Kapazitaet als .. add a,a inc a ld (sploc-space+rel1),a ; .. Trackanzahl in ;a ; Finger weg! ; ld hl,table ;Zuordnungstabelle ld b,0 add hl,bc ;Index ld a,(hl) ;Slot Nummer ld (spslot-space+rel1),a ; in Befehl mont. inc hl l dec b ;Position erreicht ? jr nz,erphlo ;==> nein ld hl,erphis ;Adresse Vector or (hl) ;Hallo Mr. ERPHI, von ; diesem Drive die ld (hl),,0e5h inc hl cp h jr nz,floop floop0: ld a,b ld h,d ld l,e ld (bank2),a ld a,high ramdi+10h floop1: ld (hl),0e5h inc hl cp h jr nz,floop1 rint ;Put String ld de,instal call bdos jp wboot ;System Warmstart ; hello: asc 'RAM Disk Init ' stand db 0dh,0ah,'$' warnal: db 0dh,0ah asc 'RAM Disk neu initialisieren ( add a,a add a,a ;Index * 16 ld e,a ld d,0 ld hl,dpe0+dpb_pt ;Adresse der Adresse des ; DPB im DPH add hl,de ld a,low dpb ld (hl) Track Pruefbef. add a,a add a,a sub reserv*4+1 ld (dpbdsm-space+rel1),a ; .. K-Byte in DPB ld a,reserv ;Anzahl reserv. Bl. ld (dpbres),a ; in DPB eintragen ; ; Gesamd a,(hl) ;Drive 'Name' ld (drvlog),a ; in Benutzer String ; ; Treiber Segmente auf ihre endgueltigen ; Plaetze schieben ; weiter: ld bc,next-space ld de,space ld hl,rel1 ldir ; ld ;schon zu viele ? jr c,isfree ;==> Nein, kann mein ; 'Drive' einbauen ; ; bereits 3 Floppy Controller installiert ; ld c,print ld de,nodriv call bdos ret dec b jr z,floop0 jp p,biloop ; ld (main),a ;CP/M Context schalten ; ; Naechstes freies Laufwerk auswaehlen ; und zur RAM Disk ernennen ; ld a,(dskcnt) ;Anzahl Diskdrives cp 6 asc 'Fatal: kein freies Laufwerk gefunden' db 0dh,0ah,'$' instal: db 0dh,0ah asc 'Laufwerk ' drvlog: asc 'x: mit ' inskap: asc ' 52' asc 'K als Pseudo Disk installiert' db 0dh,0ah,'$' table: db 60h,' ld (main),a ; Schaltung zurueck ret next1: .dephase end start hl ; Quell-/Zieladr. tauschen ovex: ldir ; Transfer 256 Bytes ld a,b ; =0 ld bc,0100h ;Anzahl Bytes pro Sektor ex de,hl call mov_it ;Routine auf Schaltungs- ; unabhaengigem Platz byebye: ld (derr),a ;Status installieren or a poer vermerkt fdisk: jp nz,C6502 ld a,(drv12) cp ldrive ;Unser Drive ? jr nz,fdisk push bc ;Z80 Register retten push de ld a,(phtrk) ;High Byte der Sektor weg dpbres: defw 0 ; OFF reservierte Spuren next: ; .dephase rel2: .phase move1 ; Dieser Programmteil liegt im I/O Configuration Block mov_it: ld (hl),a ; Selekt Kachel ld (hl),a ; Wrb ld h,a ;High Byte Adresse ld l,0 ;Low Byte auf 0 ld de,bank1 ;Annahme Bank1 add a,-030h ;Bank 2? jr nc,firstb ; ==> Bank 1, ist OK ld h,a A' ;Ueber Index auszuwaehlende db 60h,'B' ; Slot Nr. und Drive Name db 50h,'C' db 50h,'D' db 40h,'E' db 40h,'F' ; ;======================================================= ; Treiberrounicht verlegt ; zu werden, da derjenige des unbenutzten Drive 2 mitbe- ; nutzt werden kann. dpb: defw 32 ; SPT 32 Sektoren pro Track defb 3 ; BSH defb 7 ; BLM defb 0 ; EXp de pop bc ret ; Return zum Caller ; ; Disk Parameter Block ; ; Die Adresse des DPB wird im Disk Parameter Header ab- ; gelegt. Der im Extremfall (244K) fast doppelt so ; grosse Allocation Vector im DPH braucht ; Adresse Zusammenbasteln cp 0 ;Vergleich mit Maxtrack sploc equ $-1 ;Hierhin Maxtrack jr nc,errtrk ;==> ist zu gross add a,3 ; Never the own memory! ld ite enable ld hl,buf1 ; RWTS Sektor Puffer jr nc,ovex ; ==> Mode Schreiben ex de,hl ; Quell-/Zieladr. tauschen ovex: ldir ; Transfer 256 Bytes ld a,b ; =0 ; Neue Adresse ld de,bank2 ; Neue Kachel firstb: ld a,c ld bc,ramdi add hl,bc ld c,a ld a,(rdwr) ; Lesen/Schreiben cp 2 ; Falls Carry set: lesen ld a,c tine ;======================================================= ; rel1: ;Hauptroutine des Floppy Emulators .phase space ; ld a,(dskslt) cp 0ffh ;Unser Slot ? spslot equ $-1 ; Slot wird hiM dpbdsm: defw 48-1 ; DSM RAM-Kapazitaet (dyn). defw 64-1 ; DRM 64 Directory Eintraege defb 0c0h ; AL0 2 Bloecke fuer Dir. defb 0 ; AL1 defw 0 ; CHKS Check faellt 16 ld b,a ld a,(phsec) ;Sektoradresse cp 010h ;Pruefe Sektornummer jr c,secok ;==> ist OK errtrk: ld a,040h ; Fehler Status praeparieren jr byebye secok: add a, c,a ;Track retten srl c ;Erstelle Kachel Nr. srl c ; mit Division durch 4 and 03h add a,a add a,a add a,a add a,a ;Rest der Tracknummer *Program Basis_Grafik_Test(Input,Output); const PIE = 3.14; { fuer Kreis-Berechnung } { Begin MU~-UP-DEFINITIONEN } xMax = 279; { Hochaufloesende Farbgrafik mit ... } yMax = 191; { .m[$F046] := Color { set X-Register } else Mem[$F046] := 0; { -- " -- } RomCall($F6F0); { Rufe ROM-UP auf, um Farbe zu setzen } End; { ************************************************************** } -UP auf, welches auf der Adresse $F3D8 steht, um die Grafik zu initialisieren und den Bildschirm zu l|schen. } Begin RomCall($F3D8); End; { **********************************************r; { Hilfsvariable } { Begin MU~-UP-DEFINITIONEN } Page2 : Array[0..8191] of BYTE absolute $3000; { 2. HI-RES-Grafik-Seite. Beginnt im } { Speicher ab der Procedure Invers; { Stichwort: Invertiert die HI-RES-Speicherplaetze. } Var I : Integer; { Speicher-Pointer (Array-Indizierung)} Begin For I:=0 to 8191 do Page2[I] := Not Page2[I]; End; { ***************programm des Monitor-ROMs - adressiert durch die Variable "Adresse" - auf. } Begin Mem[$F3D0]:=Lo(Adresse); { 2 Byte lange Start- } Mem[$F3D1]:=Hi(Adresse); { adresse besetzen } Mem[$E100]:.. 280 x 192 Punkten in 6 ... } xMin = 0; { ... Farben; Bereiche: } yMin = 0; { 0..279 x 0..191 } { End MU~-UP-DEFINITIONEN } Var x,y : Real; { x,y m[$E050]:=0; { aktivieren. Handbuch Seite 32/33 } End; { ************************************************************** } Procedure TextMode; { Stichwort: Aktiviert den Basis Textbildschirm mit seinen derzeitigen Speicher**************** } Procedure GrafMode; { Stichwort: Aktiviert den Basis Grafikbildschirm mit seinen derzeitigen Speicherwerten. } Begin Mem[$E055]:=0; { 2. Seite der Basis HI-RES-Grafik } MeAdresse $3000 und } { ist 8 kByte lang (=8192 Byte =64 * } { 128 Byte ) Handbuch Seite 32/34 } RelNullx : Integer; { relativer Nullpunkt der x-Koordinate } RelNully : Integer; *********************************************** } Procedure Hcolor(Color:Integer); { Stichwort: Setzt die Farbe, mit der die Punkte gezeichnet werden sollen. Die Werte 0..7 sind erlaubt! } Begin If Color in [ 0..7 ] then Me=0; { UP aufrufen ( die Basis Z80-Softcard } { befindet sich in "Slot" 1 !! } End; { ************************************************************** } Procedure Hgr; { Stichwort: Ruft das Monitor-ROM- Koordinaten - Variablen } Alpha : Real; { Winkel - Variable } R : Real; { Radius } z : Real; { Hilfsvariable } c : Chawerten. } Begin Mem[$E054]:=0; { 1. Seite des Basis Textbild- } Mem[$E051]:=0; { bildschirmes aktivieren. HB.S.32/33 } end; { ************************************************************** } RelyMin : Integer; { relatives Minimum der y-Koordinate } { End MU~-UP-DEFINITIONEN } { *************************************************************** } Procedure RomCall(Adresse:Integer); { Stichwort: Ruft ein x-beliebiges Unter { relativer Nullpunkt der y-Koordinate } RelxMax : Integer; { relatives Maximum der x-Koordinate } RelyMax : Integer; { relatives Maximum der y-Koordinate } RelxMin : Integer; { relatives Minimum der x-Koordinate } Procedure Plot(Rx,Ry:Real); { Stichwort: Setzt in die HI-RES-Grafik einen Punkt, in ein durch das Unterprogramm "SetRelNullPoint" definiertes Koor- dinatensystem. Das Koordinatensystem wird um 90 Grad gegen den #G:*_x¶$:###:#,$:##*#DM*#}R$:0#|4~ʉ$g<#F$:0#*#EN#^#V` ʅ$ x$g g<~$Ϳ.:##2#X:~#% «$ ˜$C:%g<_W%W~#!%##%:+~#%%+>ʹ$+~#.B%_ʸ%:+~#ʔ$°$:~tive Maximum bzw. Minimum. Alle Variablen sind GLOBAL im HP definiert, au~er "NeuX" und "NeuY". } Begin { Parameter-Ueberpruefung: } If not(NeuX in [ xMin..xMax ]) then NeuX:=0; IBereich } x:=RelxMax; Writeln(^G,^G); end else If xRelyMax thekrementieren } end; { Plotte eine Diagonale } Alpha := arctan(RelyMax/RelxMax); { Steigungswinkel berechnen } z := tan(Alpha); { Steigung der Geraden berechnen } x := 0; { Anfangswert x - Ktan := sin(x)/cos(x); end; { ************************************************************** } Procedure SetRelNullPoint(NeuX,NeuY:Integer); { Stichwort: Setzt den relativen Nullpunkt, definiert durch "NeuX" und "NeuY" und das rela x,y : Integer; { x,y Koordinaten - Variablen } Begin x:=Round(Rx); y:=Round(Ry); { Pruefe, ob x in I = [ RelxMin .. RelxMax ] } If x>RelxMax then Begin { x-Koordinate nicht im zulaessigen Max.-30); { x=1/2=137; y=1/2=95 } { Zeichne mit "SetRelNullPoint" definiertes Koordinaten-System } { 1. x-Achse: } x := RelxMin; while x < RelxMax do Begin Plot(x,0.0); { setze Punkte der x-Geraden } y:=RelyMin; Writeln(^G); end; y := y + RelNully; { setze y zum relativen Nullpunkt} Mem[$F045] := yMax - y; { ACCU besetzen und 90 Grad - } { Drehung durchfuehren! } Ron Begin { y-Koordinate nicht im zulaessigen Max.-Bereich } y:=RelyMax; Writeln(^G); end else If y";( 16368,0:16384,1289 20:3:38)U TR,12:SE,7:COM,1:ZA (BUF)185(BUF1)70(BUF2)205350 COM,2 BUF121,169:BUF122,0: LDA #$00 ZA TR,12:SE,6:CO,1:ZA BUF,169:BUF1,0:BUF2,240:BUFG"( x24:1:"(C) 1985 BY BORIS KLUG";F } RWTS - ROUTINE EINPOKEN` TZAZA86:A:T,A:k 15:1 "80-ZEICHENKARTE BENUTZEN ? (J/N) J";(8); A$:A$:A$(13)A$"J" A$"J"A$"N"ĺ(7):140 20:3:"QUICKFILE-DISK EINLEGEN, D ZA24576: $6000:TRZA7:SETR1:COMZA15[(BUF32768: BUFFER BEI $8000g2D$(4)m<{F:40):PZ"CONVERTER FUER QUICKFILE //E"dn:40)::::: s"DIESES PROGRAMM MACHT QUICKFILE //E AUF DEN //+ LAUFFAEHI00 AX(N):X(N)(A239)A X(N1)100000(A239X(N))X(N1)I :)Q ^:+ m BEREINIGUNG DER UEBERTRAEGE8 rN1100 |P(N)99999P(N)0A(P(N)100000):P(N1)P(N1)A:P(N)P(N)A100000   AUSDRUCK DER ERSTEN 500 NACHKOMMASTELLEN. N1100:P(N),::  UNTERPROGRAMM TEILE DURCH 239 N111)((Q1)2)A  Q! B BERECHNUNG 4*ARCTAN(1/239)X X(1)400000:1000v N1100:P(N)P(N)X(N): Q32152 1000:1000 B0 "N1100 ,BX(N)B:A(BQ) @B100000(BQA) JP(N)P(N)(1)((Q1)2)A T Y謠󍠠ծǮŮծǮŮ占ͭ笠堠ͭ        tP(2004):B100000:P(0)12(N330011:N@2I02003[<Q(P(I)N):RP(I)QNxFP(I)Q:P(I1)P(I1)BR~PZP(0)P(0)1dxI200211zU(P(I)B)|P(I)P(I)BU:P(I1)P(I1)U~I02000:P(I),: D$(4)(I),:BP(42):B100000:P(0)1,(N1251182I041S<Q(P(I)N):RP(I)QNpFP(I)Q:P(I1)P(I1)BRvPZP(0)P(0)1dnP(40)P(40)(P(41)B.5)xI4011zU(P(I)B):P(I)P(I)BU|P(I1)P(I1)U~ I040:P3ST1wx2rs ` JEɀF0;Eɍ800&ɍ X΍F  E ?`1627Q`čűҠǍӍԠ̍ȍӍؠ؍Ҭ؍à؍Ӡ̍àč̠ǍҍРñŠ±ҫР花Ҡõōč±ҠԍŠűĠҠԍҠԍŸԍŸӍؠؠ̠ؠưȠؠčԠҠǍǍРƍѠԍРŠčƍǍ؍ѠčԠРčÍѠDZÍDZΠϠӠͭΠϠӠϠӠͭΠϠӠͭΠϠӠŠﬠŭԭ﩮ԭ堨ũ򠍠ͭ򠱮ͭϭǠ獠ԭ󠠠ԭͭכֿכֿ報鮠占荠堍z# Ƞ ؠԠ 忍ѠԠ ԍР ſŠŠ ōà±̠ Š à±Ƞ ٠Ƞ ±̩٠ ҠĠ ҠԱ ԍҠԲ Բ 獠̍Р٠±̩٠ 占٠ 䍠ԩ٠ 荠ÍàǍ²Ƞ 占Ҡؠ 獠ԍѠà²ȍҠ  獠Ҡɠ ±̠ 占٠ 䍠ԩ٠ 荠ÍàǠ ±Ƞ 占ҠĠ ²̠ Ա Բ 򍪍 ź ͍ҠҠ ҍ֍ҫ֫Ҡՠ HARACTER IN DESTINATION ENVIRONMENT _ TI%= VALUE OF TAB CHARACTER IN SOURCE ENVIRONMENT  TR%= SUBROUTINE PARAMETER (TRACK NUMBER) T1%= TAB SCAN ABORT CHARACTER& T2%= 2ND TAB SCAN ABORT CHARACTER0 TX%= 1 IF TEXT FILE XILEAT BEGINNING OF LAST READ CYCLE8 SD = SOURCE DRIVEg SL%= SUBROUTINE PARAMETER (SLOT NUMBER) SF$= SOURCE FILE NAME (PASCAL FORMAT - 15 CHAR MAX)  SS = SOURCE SLOT  TB%= 1 IF TABS ARE TO BE EDITED$ TD%= VALUE OF TAB C   Р ԠŠϠ̠  Ԯͱ ͱөϠӠ κ  ŠŮ!͠ź ŠҠҠ͠  ŠҠҠ͠ USERMAGAZINŠ   n'&I& L? n'&& L? n'& L? n& (L? J&'I``Hh` &'I``؍؍ӍՠҠ٠򍱰̠̱ȍҠȱȱӍԱح箠ؠԠ占ױؠ占Šױح箠̠彣̱Ǡ彣ȍҠŠȲ占ٍ٠Šȱ占РԠ獠ҠҠŠ窪ԠΠԠҠҠ٠򍠷ȱؠð򍠷Ȳٍٍ̱̩Ҡՠ􍠠ԠӠӠ占ĭà宠ӠͭӺԭӠӠЯͬĭӠͭ򍠠堲ӮЯ͠򭍠宠Яͺ嬠Я͠ԭ󍠠ͭ宍庍ԭĭ캍ĭͭԭ󠍠宠ͭ덠ũ䠍Ӡ報󍠠ӠĭЯͩ占ӠӠ y ` JJJJW)W))$ 0LHı``ŲĴŴƴIJĶŶƶųĵŵƵijķŷƷв®ͳԩٍРвōвԩٍҶٍвŠٍŠвàҶàҲвϫàԍŠбӍв ؠٍвϬٍв¬؍ĠưԫҲĠƍԫԫ٠вԠҍɠввҶٍ̍ҲҲҶԍбҲҍҍҍҍ؍в¬؍Ġàʬ؍ư؍؍ŠÍвϫӍʠǠԫòĠѠǍŠǠҍԍҠԠ̠ҶҲԠҠԠвϠԫðǠвϫؠԲвŠͳ򮠶堠Ԡz Z Z ` Z` && &&eee f Z Z ` Z`&&&&eee`' ҠΠЯ͠ͲӠ䍠ҠΠ報ͲɠЩ퍠ҠΠ占堲ĭ젠ͲԠҠΠ場ԮͱЯ͍Ԡĭ쩠ԠӠЯͩ®Ӡͱөc SPANNUNG1000 :3( UP. MESSWERT;2P0G<H110TFPP(0)cP:PP10:in:} HAUPTPROGRAMM" SPANNUNGSMESSUNG AM GAME-PORT"" -----------------------------" "DAUERANZEIGE --> RET. ODER E k#  0i(ȕ' IIIIfj(jfj(jfj(jfj(j ( ƀМ-  H0)h0` `A*02à´ؠ³àנؠ٠׍ӍҠؠ٠ȸĵٍѠōҠԍٍŠȸĵŠӍ²ؠ´à³ؠ²򍠠´ؠ´ҠҍƠԠ٠׍٠Ա԰ðĬٍĠѠ԰ðٍҠԍ؍Šˍٍ٠堯堡ŠōҠƍ٠àԍŠΠҠЍҍЍҍҠЍҍЍҍҠЍҍЍҍҠԠٍҠƍٍҠƍؠˠҠЍҍЍҍ³àҠҍ٠Š٠ҠƠٍҠƍĠààбٍбؠ٠؍؍؍̠ˍ³ؠؠ²ҠҍҠƍԍ占٠ƍΠؠˠÍǠö獍٠Ա򍠠Ơðٍðìٍðٍ²µ򍍪ԭҠĠҬͳҠҮŠԠԱծǮŮ͠笠堍ͭ򠶮蠵ŠΠ堶׮Π砍堺䠱ӷ謠̭嬠䠵͠򮱯笠Íɫ򠲵Ӡөͭ鮺堪ӠԠӠӠ͠Ӡ͵͠堪ϠӠ򠠠𠠠  ENTRUP *& * M5934 *C * *` **********************9,0 ) 133,72,169,254,141,246,183,96 F I3276832940:A:I,A:L iI3814438307:A:I,A:ox ********************** * * * Dieses Programm * * kommt von *  * DETLEF JERR73,240,183,133,252,173,241,183,133,253,173,244,183,240,10,201,1,240,12,201,2,240,24,208,0,24,169,0,133,72  96,165,254,141,135,192,160,0,177,250,145,252,136,208,249,240,14,160,0,165,254,141,135,192,177,252,145,250,136,208,249,165,254,141,133,192,24,16230,76,230,76,230,76,173,237,183,133,77,169,0,133,254,56,165,76,201,3  144,11,198,76,198,76,198,76,230,254,76,34,149,24,169,208,133,255,165,76,133,23,165,23,240,12,24,165,255,105,16,133,255,198,23,76,61,149,160 j  0,132,250,165,255,5,77,133,251,145,251,200,169,16,145,251,160,55,169,1,145,251,160,56,169,255,145,251,200,145,251,200,200,200,192,216,240,3,76  141,128,160,124,169,0,145,251,200,145,251,169,6,141,133,192,96 F  132,72,133,73,173,233,183,201,112,240,3,76,4,189,173,236,183,133,76,,165,250,9,240,133,252,160,1,169,17,145,251,198,250,200,165,250  145,251,201,1,208,233,169,240,133,252,160,1,169,17,145,251,200,169,15,145,251,160,6,169,254,145,251,160,39,169,122,145,251,160,48,169,17,145,251 o  200,169,1,145,251,160,52,169,40,1 x256149  169,1,133,250,165,250,141,135,192,160,0,132,251,169,208,133,252,169,0,145,251,32,39,128,165,252,208,245,230,250,165,250,201,16,208,224,76,48,128 @  230,251,165,251,208,2,230,252,96,169,6,141,135,192,160,0,132,251,169,15,133,250b :(12)::"RAM CARD PSEUDO DISK INSTALL V 1.2"_"(C) 1986 BY DETLEF JERRENTRUP"(:"Pseudo Disk wird installiert..."23000<4000F256128d183256184,0:183256185,149n::"160K PSEUDO DISK IN SLOT 7 INSTALLIERT"     ~`P*U*U*U*`~ ~|U*U*U*U `|?~*|~P*``ps88G?NygqxG?A|xO~?~P*`~@~T*U*U*U*x`~@~@*U*U*U*~|Hc9p8|?g8`as8>xOpC~? U*U@(Uxxx~?U*U(U x?~x ~`P*U*U*U*x~ & E} ~|U*U*U*U `~          ATALOG"A  CATALOG DER DISKETTE: CATALOG [  ============= TITLE (C) - 1986 BY C.GREVE AND A.U.G.E. ============= FP " : 10:" ZUR 1. USER-MAGAZIN-DISKETTE 1986"@ c :"(AP) = APPLESOFT-PROGRAMM" :"(MT) = MASCHINENPROGRAMM-TEXTFILE" :"(MS) = MASCHINENPROGRAMM-BINAERFILE" 20:"Bitte Taste < >";:(8);(8);:A$  (4);"C ********************7 * TITLE - PROGRAMM *R ********************X(2::14:" Einen Moment bitte ..."<(4);"BLOADTITLE.A"F16304,0:16297,0:16302,0PA$d: x6::" DIE A.U.G.E. BEGRUESST SIE   ~x?T*U*U*U*|~ x~U*U*U||?~p@*p~?@p?~@*U*@ U p~>|~P*U*U*U*`Hcas 0xpCygpx`@~xD~*U*U*U pHcp8~g}|`a}8G|AcaNp~ U*U(U@~p~U*Ua,U*x~pT*U*U*U*~~ ~U*U @*U~~`@*~~@?@@~(U PUx~>|~P*U*U*U*@@~x@~*U*U*U |?pHcapx8~g}|`a}p?8g|AcaN@?~ U*U(U@?@~U*U`(U*x~pT*U*U*U*@~ `~U*U*U*U`~@@*@~``@~TP ~~>p~T*U*U*U*~@@~pC~?@*U*U*U p?xHcqpx9g`awp?8gq\CcaN~~ U*U(U~|~U*U(U*~?|~pP*U*U*U*`~ x~U*U*U*U p~@*p~ ~`>`s88Nygax~xpO~?~?P @~`~T*U*U*U*|@p?~po~@*U*U*U @xHc9p8\;g8`aw8G?xOxG`~? U*U`(U|~~?U*U(U x?|p~|@*x~~`P*U*U*U*~~~~@*U*U*U*~|Hc9p8|>gqp`as8`@~(~U @*U@`Hc9p8gq`aq8gqN`@`~U*U(U p~@~~?T*U*U*U*p`~?xU*U*U*U p~|~ U*U(Ux~~x@*~~@~@@*U*U*U*~>~P*U*U*U*x~Hc9p8<<gqp`aq8`@~~? E~? U*T*U~pHc9p8gq`ay8pGa|O~U*U(U `|~T*U @*U*`p~?xT*U*U*U |~ @~ U*U,Ux@~x?@*@~?@~@*U*(U @~?>|~P*U*U*U*p~Hcqs8|C?xGygqx`@~|E~(U*U*U`pHcp8gq`ay8>\Ca|O|~ U*U(U@x|~T*U*U*@p A$(4):M$:?w(27),(17):::10000:2:20)::15:"BRAUCHEN SIE INFORMATIONEN ?"(8);:B$:B$"J"ĺ:24:20:"BILDSCHIRM ODER AUSDRUCK (B/A) ?"(8);:B$:B$"B"27 A0::5:"SLOT DES DRUCKER-INTERFACES ->";C$:B(C$):::"GEBEN      3ST1wx2rs ` JEɀF0;Eɍ800&ɍ X΍F  E ?`1627Q`čűҠǍӍԠ̍ȍӍؠ؍Ҭ؍à؍Ӡ̍àč̠ǍҍРñŠ±ҫР花Ҡõōč±ҠԍŠűĠҠԍҠԍŸԍŸӍؠؠ̠ؠưȠؠčԠҠǍǍРƍѠԍРŠčƍǍ؍ѠčԠРčÍѠDZÍDZǠՠƴǠՠƳƍҠՠǠՠƍǠԍԍƍ̍̍ȍȍŸ    ӠɠŠΠΡͮƮǠӮҍϠˠҠҠӠΠӠŠ̠ΠӠͭˠҠΡŠڠȺ占򠱮ͭ򠱹ҠΠ  TATION DUMP --------------------------- (C)-1983 BY FRANK POHLEMANN --------------------------- IMPROVED BY KLAUS HARTNEGG =========================== .V:H:H1(B$)ZĺG/B$;:V(37)1:H(36)1:(C$)IB$"":O037z1(222)6ĺ:"FILE NOT FOUND";(7):302:"CLOSE"3:"Nochmal ?"4A$:A$"J"A$"N"525A$"J"ė:30 =========================== A.U.G.E. DOCUMEN((4):H2H1?)(C$)1(C$,1)" "C$(C$,(C$)1):41*VM0:(C$)1VM1:(C$,1)(13)C$(C$,(C$)1):VM0:(C$,1)"="VV1:H1:C$C$(13)+(C$)1C$C$" ",C$(13)VV1-B$"":I1(C$):B$B$(C$,I,1):(C$,I,1)" "Ă"";A$:A$"CAT"ĺ"CATALOG":30= (A$)0(A$,1)"A"31F!35j"::"VERIFY"A$:"OPEN"A$:36#:"File nicht gefunden !!":A$:30$50%V(37)1:H(36)1:VMVV1&:"READ"A$:C$"":V22V22'B$:C$C$B$:B$(13)39"J"Z80:10H5:"HABEN SIE EINEN KLEINSCHRIFT-ADAPTER ?"(8);:B$:B$"N"B$"n"āI012:768I,(("201,251,176,006,201,225,144,002,233,000,076,240,253",4I1))::777,32:54,0:55,3:1002:"NOMONIOC"::"Textfile (CAT fuer Catalog)"!WIRD DANN ABGEFRAGT, OB":17:"SIE EINE 80-ZEICHEN-KARTE HABEN."19:" UM DAS PROGRAMM ZU BENUTZEN, FOLGEN SIE":21:"BITTE EINFACH DEN ANWEISUNGEN AUF":23:"DEM BILDSCHIRM *"(8);:B$::: :Z40:"HABEN SIE EINE 80-ZEICHEN KARTE ?":B$:B$EN PROGRAMMEN DIESER":5:"DISKETTE AUSZUDRUCKEN. DIESE FILES SIND":7:"'VOR-FORMATIERTE' TEXTFILES, DIE MIT":9:"DIESEM PROGRAMM AUF IHREM DRUCKER"@11:"AUSGEGEBEN WERDEN KOENNEN.":13:" EIN AUSGABE AUF DEM BILDSCHIRM IST AUCH":15:"MOEGLICH, ES (B$(95)))- " "B$;:EĭB$(13)ĺ(10);M (B$M$)19:(8)" ?";:19 ::"NOCH MEHR DUMPS ?"(8);:B$:(21):216,0::A$"CLOSE":(26);"1":A$"PR#0":B$"J"2 : :" DIESES PROGRAMM HILFT IHNEN, DIE DOKU-":3:"MENTATIONSFILES ZU Dĺ(7);(7):11 16. A$"VERIFY"E$:17\ ">>> FILE NICHT GEFUNDEN"(7)" "(7):11j Z80B3 216,0:::"BELIEBIGE TASTE, UM ZU STARTEN *"(8);:B$:::A$"PR#"B:(26);"0":(12):D$:A$"OPEN"E$:A$"READ"E$:22 B$:AB$((B$)32EDS ?"(8);:B$:E(B$"J")::11u :5:"HABEN SIE EINEN KLEINSCHRIFT-ADAPTER ?"(8);:B$:A(B$"N"):D$"":B0:E0 ::"BITTE FILE-NAMEN EINGEBEN:":"( 'CAT' FUER EINEN CATALOG )":"->";E$:(E$)2 E$"CAT"ė:A$"CATALOG":11 (E$,1)"A"SIE DEN 'SETUP-STRING' EIN,":"FALLS IHR DRUCKER SO ETWAS BRAUCHT.":"->"::"( ERLAUBT, CTRL INVERS DARGESTELLT)":D$"":C3:10 C:B$:D(B$):D139 D32Ğ:(D64);::8 B$; D$D$B$:CC1:5 14::"BRAUCHEN SIE EXTRA-LINEFE$PASCALSYSYSATCH RAM478B Yrc |צ00EE B00EA Gצ00E8 /07L^ȡ  ɡ؞&s&&4Y  Yj8>x8^< |hhHH`8hhhhhhh h hhȱLC8 ȥ  e ȱ e 8iiHHHH`Jt,40<v^b(-(A needed driver is not in ATTACH.DRIVERSYrc |צ00EE B00EA Gצ00E8 /07L^ȡ  ɡ؞&s&&4Y  Yf8hhhhhhhhGU /@8Y[<>PJLFHJL579;=?ACEGIKMOQSةY  Y eٓYyؤ ١-(A needed driver is not in ATTACH.DRIVERS ȡإYˡצreading driver,!6 d <ȡةYعQ+~ ( .v4nB  00EE BB00E2 B!00EA Gצ00E8 /0 Y ˡY ˡ  4 Yš.,A  IN HEX CHAR--..rZ ڨ铡 VS!4 ٪P,,T تP,,T بġ!4 6SS012345678 9 A B C DEF<Jۨڨš+áġR٪P-././ġh-,,.,04,~TTACH.DATAȡ Y ATTACH.DATA"ˡ(צ#ATTACH.DATA needed by SYSTEM.ATTACHATTACH.DRIVERS"ˡ+&ATTACH.DRIVERS needed by SYSTEM.ATTACHYˡ1צ,Reading segment dictionary of ATTACH.DRIVERتPצERROR =>RETURN to exit SYSTEM.ATTACH:R`Y Yآ آ V6000תSצ6000Nآ V4000תSצ6000+V2000תآ Sצ4000 S6000תצNo records in APRINTU PSUBDR =RREAD RINIT REMIU RELOCATE REMOU RWRITE RSTAT 4SYSTU UD128U  UD129U UD130U UD131U UD132U UD133U Ɓ\ƂƁ\ 6U UD137U UD138U UD139U UD140U UD141U UD142U UD143U UDJVM1 /UDRWI :UNDEFU WRITEBIO  PSTAT .G RAM478B O^ǫRAM478B RAM478B   rЋsІojHiHk`) 80iЪFjJJJJi`7ȱnHmHl`g<RAM256&{zuhg`JDCB@>0.,*# xvm#khihj Y@L (, oL~0hhhhvLl Rhrhshh hhhthuhphq zs rer ( lL  G(C) 1985 by HDH & S.M.RAM478B RAM478B RAM478B   rЋsІojHiHk`) 80iЪFjJJJJi`7ȱnHmHl`g<RAM256&{zuhg`JDCB@>0.,*# xvm#khihj Y@L (, oL~0hhhhvLl Rhrhshh hhhthuhphq zs rer ( lL  GApple 1.1; STEUERFILE FUER RAM-MOVER (V01.xx)  ; ----------------------------------  ;  ; DIE IN DIESEM TEXT SELEKTIERTEN FILES WERDEN IN DIE RAMDISK  ; UEBERTRAGEN. DAS FORMAT IST EINE ZEILE PRO NAMEN MIT VOLLER  ; VOLUME SPEZIFIKATION (FALLS NOTWENDIG).  ; ꩆȡO צ SYSTEM.PASCAL2 FILES.TEXT"á2 2cP2cצc;ˡcåcjjc{SYSTEM.ASSMBLERTSYSTEM.COMPILERǾT SYSTEM.EDITORǦT SšUˡ O --1o! ץ2^ 6RAM DISK SETUP ... SET DATE:  צRAM:T.T"áܥ ƐUצ# NOT FOUND, A)BORT, R)ETRY, N)EXT: ƐʐAʐaÍ ʐNʐnÍ̐ʐáƐ~ƐUPƐ~:Ɛ~MOVING Ɛ~̐ƐצRAM:ƐƐ~TƐ_ Ɛ~-U"ˡcצ NOT FOUNDˡ_ O_ O  ˡUUצ*:URU$Ɓ1-ƁY̐ʐȡ쥂O ˡƐU_ P-ƐU"̐ˡp!((! !!'! $N !&!$YX٪P,P,:,C -T- OPENING UUצRAM:U,TU UUצRAM:U,TU"# wb9;=02!#" á$S"!ń!!,""!Í!!!š!  !!$! ōN ''0 0' 0  0c' ' ' ' 0 ' 0! '!'ȡ!!!$"%!#!p""#r"3Ʉ""#E"#?#4! "FEBת MARת APRת MAIת JUNת JULת AUGת  SEPת  OKTת  NOVת  DEZתN 'צ XX-YYY-ZZ ' 0' 0!Ŷ!Ʉf!!"!ȡ# ܛˡڡ ō!ݿPG  U&&!!N  JANת G STARTUP MERKT  ; WERDEN UND ZUKUENFTIG VON DER RAM-DISK GESTARTET WERDEN.  F  E  C  APPLE:SYSTEM.LIBRARY  APPLE:SYSTEM.SYNTAX APPLE:SYSTEM.MISCINFO  APPLE:SYSTEM.CHARSET  APPLE:6500.OPCODES  APPLE:6500.ERRORS  ALS SONDERFALL WERDEN DIE DATEIEN  ; SYSTEM.EDITOR -.ASSEMBLER -.LINKER -.COMPILER -.FILER  ; BEHANDELT. FUER IHRE UEBERTRAGUNG  ; BRAUCHT NUR DER ANFANGSBUCHSTABE ANGEGEBEN ZU WERDEN. DIES  ; HAT AUCH DEN VORTEIL, DASS SIE AUTOMATISCH IM SYSTEM VERYSTEM.FILERǎTxצ SYSTEM.LINKERvT`AlXmWA6 "$&(*,.02468:<>@DHNPRTVvcqצSYSTEM.ASSMBLERTצSYSTEM.COMPILERǾTצ SYSTEM.EDITORǦTצ SYSTEM.FILERǎT SYSTEM.LINKERvT ȡwO ˥O ˄QN ꩆȡ9N _ N O N ꩆȡޥN  SYSTEM.PASCALׯzUצRAMB )STA @TEMP,Y )DEY )BPL CPYSTAT )JMP EXITNME  READWRI .EQU * )STX XSAVE  JSR CONCHK )PLA ; BLOCKNUMMER )STA BLOCKNR )PLA )STA BLOCKNR+1 )PLA ; BYTE COUNT )STA BYTECNT )PLA )STA BYTECNT+1 )PLA U * ; DISK INFO LADEN )PLA ; POINTER ZUM STATUS REC. )STA TEMP )PLA )STA TEMP+1  PLA ; GET CONTROL WORD )PLA )LDY #07 ; ACHT BYTES UEBERGEBEN  CPYSTAT .EQU * )LDA CONTRRC,Y CHT, PSEUDO KOPF :; EINTRAGEN  LDA #0 )STA TEMP  INILOP1 .EQU * )LDA DISKHDR,Y )STA @TEMP,Y )CMP @TEMP,Y )BNE RAMCDKO ; DATEN DOCH NICHT DORT. )DEY )BPL INILOP1 )BMI RAMCDOK ; KOPF FEHLERFREI KOPIERT.  ;  GETSTAT .EQMCDOK .EQU * ; RAM CARD IST INITIALIS. )LDX #0 (.BYTE 2C ; KLINGT WIE "BIT 09A2"  RAMCDKO .EQU * )LDX #NOTHERE ; KEINE RAM CARD ODER DEF. )STX COMPCDE )JMP EXIT ; ABFLUG  INIDISK .EQU * )LDY #015 ; GELOES)JSR SETADRS ; KARTE ANWAEHLEN UND PTR :; ADRS AUF 00,01 SETZEN )LDY DISKNAM )LDA #06 )STA TEMP  COMPARE .EQU * )LDA DISKNAM,Y )CMP @TEMP,Y )BNE INIDISK ; DIRECTORY SIEHT SELTSAM :; AUS --> INITIALISIEREN )DEY )BPL COMPARE  RARI )CPX #04 )BEQ GETSTAT )LDX #BADOPER )JMP EXIT  ;  INITIAL .EQU * ; DISK INIT, WENN NOETIG )LDA #00 )STA TEMP+1 )LDA #02 ; BLOCK NR. 2 ENTHAELT 1. :; DIRECTORY EINTRAG )STA TEMP ;  ENTRY .EQU *  STA ASAVE )PLA )STA RETURN )PLA )STA RETURN+1  ;  ; DIE ART DES AUFRUF STEHT IM X REGISTER:  ;  ; 0 = READ  ; 1 = WRITE  ; 2 = INITIALISIERUNG  ; 4 = STATUSABFRAGE  ; )CPX #02 )BEQ INITIAL )BCC READWS  ;  ; 1. COMPLETION CODES  ;  NOERROR .EQU 00  BADOPER .EQU 03  RAMFULL .EQU 08  NOTHERE .EQU 09  ;  ; 2. PAGE ZERO LOCATIONS  ;  TEMP .EQU 0  FROM .EQU 2  TO .EQU 4  BUFFADR .EQU 6  BYTECNT .EQU 8  SUBSEKT .EQU 0A  .TITLE "DRIVER FOR SIGGIS ECONOMY RAM-CARD" (.NOPATCHLIST  ;  ; DIES IST DER PASCAL 1.1 TREIBER FUER DIE  ; 256 K RAM KARTE VON S. MUELLER.  ;  ; V02.00 22.06.85  ; (c) by H.D. HEPPNER / S.MUELLER  ;  .PROC RAM478B  ;  ; EQUATEO^ƪѭA N Aꩆȡ+ ˡ  땚2 MX#'| .эѭ`@ B 0 צ SYSTEM.EDITORǦTצ SYSTEM.FILERǎT SYSTEM.LINK ; PUFFER ADRESSE )STA BUFFADR )PLA )STA BUFFADR+1 )PLA ; DRIVE NR. )STA DRIVENU )PLA )STA DRIVENU+1  PLA ; GET CONTROL WORD )STA CONTRWD )PLA )STA CONTRWD+1  ;  ; HIER WIRD IMMER EIN BLOCK KOPIERT, SOLANGE BIS  ; DER BYTE COUNT NULL IST ...  ;  ; BYTE COUNT = 0: EXIT  ; )LDA BYTECNT )ORA BYTECNT+1 )BEQ EXITNME  COPYLP1 .EQU *  ;  ; BLOCK NR. GUELTIG ?  ; )LDA BLOCKNR+1 )STA TEMP+01 )CMP #01 )BEQ PRUEFLW )BCC PRUEFOK (.WORD 0100 ; BYTES PER SECTOR (.WORD 0010 ; SECTORS PER TRACK (.WORD 003C ; # OF TRACKS ON VOLUME  DISKHDR .BYTE 0,0,6,0,0,0  DISKNAM .BYTE 3 (.ASCII "RAM256" (.BYTE 0  BLOKANZ .WORD 01E0,0,0,0AB26  ; (.END (  ;  )JMP @TEMP  CONCHKX .EQU * )RTS  ;  ; DATENBEREICH  ;  RETURN .WORD 0  ASAVE .BYTE 0  XSAVE .BYTE 0  CNCKRET .WORD CONCHKX-1  COMPCDE .BYTE 0  CONTRWD .WORD 0  BLOCKNR .WORD 0  DRIVENU .WORD 0  CONTRRC .WORD 0 ; BUFFERED CHARS )CLC )ADC #1 )STA 0C080,Y )STX TEMP+1 )LDA #0 )STA TEMP )RTS  ;  ; GOTO CONSOLE-CHECK  ;  CONCHK .EQU *  LDY #037 )LDA @0E2,Y )STA TEMP )INY )LDA @0E2,Y )STA TEMP+1 )LDA CNCKRET+1 )PHA )LDA CNCKRET )PHA NVIRONMENT GESCHALTET  ;  SETADRS .EQU * )LDA TEMP+00 )AND #01F )ASL A )TAX )LDY #0F )SEC )SBC #030 )BCS BNKOK )TXA )LDY #07  BNKOK CLC  ADC #0D0 )TAX )LDA TEMP )LSR TEMP+1 )ROR A )LSR A )LSR A )LSR A )LSR A ; TEMP+0000: BLOCK NR. LOW-BYTE  ; TEMP+0001: BLOCK NR. HIGH-BYTE  ;  ; AUSGANGSPARAMETER:  ; TEMP: POINTER INNERHALB DER RAM-  ; CARD ZUM BLOCK ANFANG  ; RAM DISK EHIS IS NORMAL PASCAL :; SETTING (C083) )LDA RETURN+1 )PHA )LDA RETURN )PHA )LDA ASAVE )RTS  ;  ; SUBROUTINE BLOCK # -> RAM CARD SCHALTUNG UND  ; RAM-BLOCK POINTER AUF PAGE 0 ADRS 00,01  ;  ; EINGANGSPARAMETER: INY )BNE COPYLP2 )INC TO+1 )INC FROM+1 )DEC SUBSEKT )BNE COPYLP2 )INC BUFFADR+1 )INC BUFFADR+1 )INC BLOCKNR )BNE COPYLP1 )INC BLOCKNR+1 )BNE COPYLP1  EXITNME .EQU * )LDX COMPCDE  EXIT .EQU * )LDA #00 )STA 0C087 ; TDA TEMP+1 )STA TO+01  CPY0 LDY #00 )LDX BYTECNT  ;  ; BLOCK (512 BYTE) COPY LOOP  ;  COPYLP2 .EQU * )LDA @FROM,Y )STA @TO,Y )DEX )BNE TNOT )LDA BYTECNT+1 )BEQ EXITNME  TNOT CPX #0FF )BNE POPPI )DEC BYTECNT+1  POPPI  LDA BUFFADR  STA TO )LDA BUFFADR+1 )STA TO+1 )LDA TEMP )STA FROM )LDA TEMP+1 )STA FROM+01 )JMP CPY0  WRITE .EQU *  LDA BUFFADR  STA FROM )LDA BUFFADR+1 )STA FROM+1 )LDA TEMP )STA TO )L)BCS PRUEFKO  PRUEFLW .EQU * )LDA BLOCKNR )CMP #0E0 )BCC PRUEFOK  PRUEFKO .EQU * )LDX #08 )BNE EXIT  PRUEFOK .EQU * )LDA BLOCKNR )STA TEMP )JSR SETADRS )LDA #02 )STA SUBSEKT )LDA XSAVE )BNE WRITE  READ .EQU * ); END.PROGRAMM PLOT; USER DIGIPLOT; VAR I: REAL; S,T : STRING; BEGIN PLOTTER ('M1300,500'); PLOTTER ('D2000,1650'); STR (120,S); PLOTTER (CONCAT ('D',S,'400) ); I:= 3421.456; STR (ROUND (I),T); PLOTTER (CONCAT ('M',T,',',S) ); PLOTTER ('H' (PLOTRDY) =132) DO A := 3; (* Dummy- Anweisung fuer Warteschleife auf Acknow. *) POKE (PLOTDATA, ORD(CH[I]) ); END; WHILE NOT (PEEK (PLOTRDY) =132) DO A := 3; POKE (PLOTDATA,CR); END; END. Adresse --> Plotter *) (* 49360 = $C0D0-65536 = -16176 <=> $C0n0; n=Slot Nr +8 *) PLOTRDY = -14849; (* Adresse fuer Acknowledge- Signal *) CR = 13; VAR A,I: INTEGER; BEGIN FOR I := 1 TO LENGHT(CH) DO BEGIN WHILE NOT (PEEKDATA *) BEGINN DATA := ABS(DATA MOD 256); BYTE.INT := ADDR; BYTE.PTR^[0] := DATA; END; FUNKTION PEEK; (* liest Inhalt einer Adresse *) BEGINN BYTE.INT := ADDR; PEEK := BYTE.PTR^[0]; END; PROCEDURE PLOTTER; CONST PLOTDATA = -16176; (* Inhalt derIMPLEMENTATION TYPE WORD = PACKED ARRAY [0..1] OF 0..255; VAR BYTE : RECORD CASE BOOLEAN OF TRUE : (INT : INTEGER); FALSE : (PTR : ^WORD); END; A,I : INTEGER; PROCEDURE POKE; (* laed Adresse mit UNIT DIGIPLOT; INTRINSIC CODE 23 DATA 24; (* System.Library fuer Watanabe- Plotter WX4671 *) (* Aufruf durch PLOTTER( string ) *) INTERFACE PROCEDURE PLOTTER (CH:STRING); PROCEDURE POKE (ADDR,DATA : INTEGER); FUNKTION PEEK (ADDR : INTEGER) :INTEGER; @@@@ aM&( T   wyצWRITING %Xצ...[%$é$ǀÍ&#z#z#zWRITING %X...[%#H#HáJ^ l 򥦵 צANOTHER FILE? (Y/N) en :'); READLN(EIN2); WRITE('" Ruecklinien:'); READLN(EIN3); FIG(FARBE(EIN1),FARBE(EIN2),FARBE(EIN3)); DRUCK; TEXTMODE; END; UNTIL EIN1=0; END.ELN(' 6:Blue'); WRITELN(' 7:Inverse'); WRITELN(' 8:Keine'); REPEAT GOTOXY(0,15); FOR I:=1 TO 3 DO WRITELN(' <42 Spaces> '); GOTOXY(0,15); WRITE('Farbe Hintergrund:'); READLN(EIN1); IF EIN1>0 THEN BEGIN WRITE('" LiniEVERSE; END; END; BEGIN (* ----------- MAIN ---------- *) PAGE (OUTPUT); WRITELN('Farben:'); WRITELN(' 0:Ende'); WRITELN(' 1:Weiss'); WRITELN(' 2:Schwarz'); WRITELN(' 3:Gruen'); WRITELN(' 4:Violet'); WRITELN(' 5:Orange'); WRIT); CLOSE(DR); END; END; FUNCTION FARBE(X:INTEGER):SCREENCOLOR; BEGIN CASE X OF 8,0: FARBE:=NONE; 1: FARBE:=WHITE; 2: FARBE:=BLACK; 3: FARBE:=GREEN; 4: FARBE:=VIOLET; 5: FARBE:=ORANGE; 6: FARBE:=BLUE; 7: FARBE:=RCOLOR(C3); LAUF:=LAUF+ZWEIPI/150; UNTIL LAUF > ZWEIPI; END; PROCEDURE DRUCK; (* Individuell anzupassen *) VAR CH:CHAR; DR:INTERACTIVE; BEGIN READ(KEYBOARD,CH); IF CH='D' THEN BEGIN REWRITE(DR,'PRINTER:'); WRITELN(DR,CHR(25),'G'OS(LAUF)); X2:=ROUND(ZX+RADIUS*SIN(LAUF)+20*COS(BUCHTEN*LAUF))+BALKEN; Y2:=ROUND(ZY+RADIUS*COS(LAUF)); (*BUCHTEN - ZAHL DER WELLEN*) MOVETO(X1,Y1); PENCOLOR(C2); MOVETO(X2,Y2); MOVETO(X2+40,Y2); (*WAAGERECHTE BALKEN*) PENY1,Y2 : INTEGER; LAUF : REAL; BEGIN RANDOMIZE; BUCHTEN:=RANDOM MOD 11; BALKEN:=RANDOM MOD 21; LAUF:=0; INITTURTLE; FILLSCREEN(C1); PENCOLOR(NONE); REPEAT X1:=ROUND(ZX+30*SIN(1.1*LAUF)); (*INNEN`KREIS` EIRIG*) Y1:=ROUND(ZY+20*C************) PROGRAM FIGURINEN; USES APPLESTUFF,TRANSCEND,TURTLEGRAPHICS; VAR EIN1,EIN2,EIN3,I:INTEGER; PROCEDURE FIG(C1,C2,C3:SCREENCOLOR); CONST ZWEIPI = 6.2832; ZX = 110; ZY = 95; RADIUS = 75; VAR BUCHTEN, BALKEN,X1,X2,(***************************************************) (* FIGURINEN von Herrn Koenemann am Soederblom- *) (* Gymnasium in Espelkamp *) (* (Schwingungen) *) (***************************************