home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
sh2x
/
sh28b.d64
/
geoterm.src
< prev
next >
Wrap
Text File
|
1995-03-30
|
31KB
|
1,994 lines
;
; *** ╟EOS-╠IBRARIAN ╓3.1 , (├) 1988 BY ├ARSTEN ├LASOHM ***
; ** **
; ** ╙TAND: 16. 3.1988 **
ORG $0402
JMP ENDE
;
; *** ╠ABELS,ALLGEMEINE ***
;
:R0=$02 ;┴RBEITSREGISTER
:R1=$04 ;DER ╟EOS-╥OUTINEN
:R2=$06
:R3=$08
:R4=$0A
:R5=$0C
:R6=$0E
:R7=$10
:R10=$16
:R11=$18
:ZP1=$46 ;┌EROPAGE-┌EIGER FUER
:ZP2=$48 ;┴PPLIKATIONEN
:ZP3=$4A
:ZP4=$4C
:ZP5=$4E
:ZP10=$58
:ZP27=$7A
:ZP28=$7C
:ZP29=$7E
:NULL=0
:SET=$FF ;╞LAG SETZEN
:CLEAR=0 ;╞LAG LOESCHEN
;
; *** ╠ABELS, ╥OUTINEN VON ╟EOS ***
;
:HLINER=$C118 ; '' VON ╚╠╔╬┼
:INITRAMR=$C181 ; '' VON ╔╬╔╘╥┴═
:PUTSPRR=$C1CF ; '' VON ╨╒╘╙╨╥
:PROMPTR=$C1C0 ; '' VON ╨╥╧═╨╘
:PUTCHARR=$C145 ; '' VON ╨╒╘├╚┴╥
;
; *** ╠ABLES, ─ATEN VON ╟EOS ***
;
:MOUSEX=$3A ;╪-╦OORD. DER ═AUS
:MOUSEY=$3C ;┘-╦OORD. DER ═AUS
:BORDO=$84B8
:BORDU=$84B9 ;╟RENZEN
:BORDL=$84BA ;FUER ═AUS
:BORDR=$84BC
:MENUNR=$84B7 ;AKTUELLES ═ENUE
:VEKTAST=$84A3 ;╓EKTOR FUER ╘ASTENDRUCK
:VERSION=$C1D3 ;BEI 0 IST ES ╓1.3
:KLICK=$84B5 ;╓ERHALTENSWEISE BEI ╔CON/═ENUEKLICK
:RUECKJMP=$849B ;╥UECKSPRUNG FUER ═AIN/┴CCESSORY
:CHRBREIT=$8807 ;┬REITE DES LETZTEN ┌EICHENS
:TASTCD=$8504 ;├ODE DER GEDRUECKTEN ╘ASTE
:DISKID=$841E ;─ISKNAME+╔─ VON ╠AUFW. ┴
:DIREIN=$8400 ;─IREINTRAG NACH ╞╔╬─╞╔╠┼
:BLKPF=$8000 ;╨UFFER FUER ─ISKBLOECKE
:ZUIRQ=$849F ;╓EKTOR FUER ZUSAETZLICHEN ╔╥╤
;
; *** ╠ABELS, ALTE ╙YSTEMROUTINEN ***
;
:FOPENR=$FFC0 ;╞ILE OEFFNEN
:CLOSER=$FFC3 ;╞ILE SCHLIESSEN
:CHKOUTR=$FFC9 ;┴USGABEGERAET FESTLEGEN
:CHKINR=$FFC6 ;┼INGABEGERAET ''
:CLRCH=$FFCC ;┴US- UND ┼INGABE RUECKSETZEN
:SETLFSR=$FFBA ;╞ILEPARAMETER SETZEN
:SETNAM=$FFBD ;╞ILENAME SETZEN
:BSOUT=$FFD2 ;┌EICHEN AUSGEBEN
:GETIN=$FFE4 ; '' EINLESEN
;
; *** ╠ABELS, ALTE ╙YSTEMDATEN
;
:CIA1=56320 ;┬ASISADR. DER ├╔┴1
:ENABLE=$2A1 ;╬═╔-╞LAG FUER ├╔┴2
:STEUERREG=$293 ;╥╙-232 ╦ONTROLLREG.
:BEFEHLSREG=$294 ;╥╙-232 ╦OMMANDOREG.
:RS232ST=$297 ;╥╙-232 ╙TATUSBYTE
;
; *** ╠ABELS,╨╒╘├╚┴╥ ***
;
:BACKSPC=8
:LF=10
:CR=13
:BOLDON=24
:ITALICON=25
:OUTLINE=26
:PLAINTEXT=27
;
; *** ╠ABELS,─╔┴╠┬╧╪ ***
;
:OK=$01
:CANCEL=$02
;
; *** ╠ABELS,─╧═┼╬╒ ***
;
:VERTIKAL=$80
:HORIZONTAL=0
:VISIBLE=$40
:CLOSING=0
:SPRUNG=0
:SUBMENU=$80
;
; *** ═AKROS ***
;
;
; *** ┬┘╘┼╙ + ╫╧╥╘┼ ╦╧╨╔┼╥┼╬ + ╓┼╥╙├╚╔┼┬┼╬ ***
;
; * ╫ERT IN ╙PEICHERSTELLE SCHREIBEN *
:POKE M 2 ;(┴DRESSE;╫ERT)
LDA #@1
STA @0
/
; * ╫ORT 'WERT' IN 'REGISTER' LADEN *
:LOADW M 2 ;(WERT;REGISTER)
POKE @1,<@0
POKE @1+1,>@0
/
; * ┬YTE KOPIEREN *
:COP M 2 ;(╙RCBYTE;─ESTBYTE)
LDA @0
STA @1
/
; * ╫ORT KOPIEREN *
:TRANSW M 2 ;(SRCREG;DESTREG)
COP @0,@1
COP @0+1,@1+1
/
;
; *** ╟╥┴╞╔╦ ***
;
; * ┬ILDSCHIRM LOESCHEN *
:CLS M 0
JSR CLSROUT
/
; * ═USTER SETZEN *
:PATTERN M 1 ;(═USTER)
LDA #@0
JSR $C139
/
; * ╚ORIZONTALE ╠INIE ZIEHEN *
:HLINE M 4 ;(╪-LINKS;╪-RECHTS;┘;═USTER)
LOADW @0,R3
LOADW @1,R4
LOADW @2,R11
LDA #@3
JSR $C118
/
; * ┴USGEFUELLTES ╥ECHTECK ZEICHNEN *
:BOX M 5 ;(╪-L.O.;┘-L.O.;╪-R.U.;┘-R.U.;═USTER)
PATTERN @4
JSR $C19F
B @1,@3
W @0,@2
/
; * ╥ECHTECK ZEICHNEN *
:FRAME M 5 ;(╪-L.O.;┘-L.O.;╪-R.U.;┘-R.U.;═USTER)
LOADW @0,R3
POKE 6,@1
LOADW @2,R4
POKE 7,@3
LDA #@4
JSR $C127
/
; * ╥ECHTECKIGEN ┬EREICH INVERTIEREN *
:INVBOX M 4 ;(╪-L.O.;┘-L.O.;╪-R.U.;┘-R.U.)
LOADW @0,R3
POKE 6,@1
LOADW @2,R4
POKE 7,@3
JSR $C12A
/
; * ─IALBOX ERZEUGEN *
:DIALBOX M 1 ;(┴DRESSE)
LOADW @0,R0
JSR $C256
/
; * ═AKROS FUER ─╔┴╠┬╧╪ *
;
; * ╫ERTE FUER ─IALBOX FESTLEGEN *
:INITDIALBOX M 5 ;(═USTER;┘O;┘U;╪L;╪R)
B @0,@1,@2
W @3,@4
/
; * ╙TANDARDDIALBOX ERZEUGEN *
:STDDIALBOX M 1 ;(═USTER)
B $80+@0
;ES FOLGEN DIE ╦OMMANDOS
/
;
; * ╞ELD IN ─IALBOX BRINGEN *
:FELD M 3 ;(╞ELDOPCODE;╪;┘)
B @0,@1/8,@2
/
; * FESTEN ╘EXT IN ─IALBOX ANZEIGEN *
:TEXTAUS M 3 ;(╪;┘;╘EXTADRESSE)
B $0B,@0,@1
W @2
/
; * ╘EXT IN ─IALBOX EINGEBEN *
:TEXTEIN M 4 ;(╪;┘;╥EGISTER;═AXZEICHEN)
B $0D,@0,@1,@2,@3
/
; * ╞ILES AUSWAEHLEN (╞INDTYPE-╨ARAM.NICHT VERGESSEN!) *
:GETFILES M 2 ;(╪;┘)
B $10,@0,@1
/
; * ╥UECKSPRUNG BEI ╦NOPF AUSSERHALB VON ╞ELDERN *
:AUSSRUECK M 0
B $0E
/
; * ╔CON IN ─┬-┬OX GENERIEREN *
:USRICON M 3 ;(╪;┘;╔CONTABELLENADR.)
B $12,@0/8,@1
W @2
/
; * ╒NTERROUTINE VOR ─┬ INSTALLIEREN *
:USRROUT M 1 ;(┴DRESSSE)
B $13
W @0
/
; * ╓ON EIGENER ╥OUTINE ZURUECK ZUR ─┬ *
:RSTDIAL M 1 ;(├ODE FUER $851D)
POKE $851D,@0
STA R0
JMP $C2BF
/
; * AUF ╟┼╘╞╔╠┼╙ VORBEREITEN *
:INITGETFILES M 3 ;(╞ILETYP;┴BLAGEADR.;CLASS)
POKE $10,@0
LOADW @1,R5
LOADW @1,R6
LOADW @2,R10
/
; *** ┼NDE ─╔┴╠┬╧╪-═AKROS ***
;
; * ╞LAECHE AUS 2. IN 1.┬ITMAP HOLEN *
:RECVBOX M 4 ;(╪L.O;┘L.O.;╪R.U.;┘R.U.)
JSR $C1A5
B @1,@3
W @0,@2
/
;
; *** ╔├╧╬╙ ╒╬─ ═┼╬╒┼╙ ***
;
; * ╔CONS ANZEIGEN UND FREIGEBEN *
:DOICONS M 1 ;(╘ABELLENADR.)
LOADW @0,R0
JSR $C15A
/
; * ═AKROS FUER ─╧╔├╧╬╙ *
;
; * ╓ORSPANN DER ╔CONTABELLE *
:ICONTAB M 3 ;(┴NZAHL;═AUS-╪;═AUS-┘)
B @0
W @1
B @2
/
; * ┼INTRAG FUER EIN ╔CON *
:ICON M 6 ;(┌G.AUF ┬ITMAP;╪;┘;┬REITE;╚OEHE;╥OUTADR.)
W @0
B @1/8,@2,@3/8,@4
W @5
/
; * ═ENUE ANZEIGEN UND FREIGEBEN *
:DOMENU M 2 ;(╘ABELLENADR.;╨UNKTNR.)
LOADW @0,R0
LDA #@1
JSR $C151
/
;
; * ═AKROS FUER ─╧═┼╬╒ *
;
; * ╓ORSPANN DER ═ENUETABELLE *
:INITMENU M 7 ;(╟RENZE ╧BEN;╒NTEN;╠INKS;╥ECHTS;
; ┴NZAHL;SCHLIESSEN?;HORI./VERT.)
B @0,@1
W @2,@3
B @4!@5!@6
/
; * ┼INTRAG FUER ═ENUEPUNKT *
:MPOINT M 3 ;(╘EXTADR.;╘YP;╨ARAMETER ZU 2.)
W @0
B @1
W @2
/
; * ┴US ╒NTERMENUE EINS ZURUECK *
:PREMENU M 0
JMP $C190
/
; * ═ENUE ERNEUT ZUR ┴USWAHL GEBEN *
:REDOMENU M 0
JMP $C193
/
; * ╚AUPTMENUE ANZEIGEN *
:MENU1 M 0
JMP $C1BD
/
; * ═ENUE-╥ECHTECK WIEDERHERSTELLEN *
:RECVMENU M 1 ;(╬UMMER)
LDX #@0
JSR $C154
/
; * ┼NDE ─╧═┼╬╒-═AKROS *
;
; *** ╘┼╪╘ ***
;
; * ╘EXT IN ╟EOSFORMAT KONVERTIEREN *
:TXTCONVERT M 1 ;(┴DRESSE)
LOADW @0,ZP27
JSR CONVERT
/
; * ┼NDEKENNZEICHEN FUER TXTCONVERT *
:TEXTENDE M 0
B NULL,NULL
/
; * ┌EICHENSATZ AKTIVIEREN *
:LOADSET M 1 ;(┴DRESSE)
LOADW @0,R0
JSR $C1CC
/
; * ┌EICHEN VON ╘ASTATUR HOLEN *
:NEXTCHAR M 0
JSR $C2A7
/
; * ╙YSTEMZEICHENSATZ AKTIVIEREN *
:SYSFONT M 0
JSR $C14B
/
; * ┌AHL (IN R0) DEZIMAL AUSGEBEN *
:PUTDEC M 2 ;(╪;┘)
LOADW @0,R11
POKE 5,@1
JSR $C184
/
; * ┌AHL DEZ. AUSGEBEN (EIG. ╥OUTINE,0<X<256) *
:ZAHLAUS M 3 ;(┴DR.;╪;┘)
LOADW @1,R11
POKE 5,@2
COP @0,ZP27
JSR ZAHLRT
/
; * ┌EICHEN AUSGEBEN (IM ┴KKU) *
:PUTCHAR M 0
JSR $C145
/
; * ┌EICHENCODE (IM ┴KKU) AUSWERTEN *
:HCHAR M 0
JSR $C1C9
/
; * ╙TRING AUSGEBEN *
:PUTSTR M 3 ;(╪;┘;┴DR.)
LOADW @0,R11
POKE 5,@1
LOADW @2,R0
JSR $C148
/
; * ╒NTERMAKROS ZU ╔╨╒╘╙╘╥ UND ╨╒╘├╚┴╥ *
:GOTOX M 1 ;(╪-╦OORD.)
B $14
W @0
/
; * ┼NDE ╨╒╘├╚┴╥-═AKROS *
;
; * ╙TRINGS BEKANNTER ╟ROESSE VERGLEICHEN *
:CMPFSTR M 3 ;(┴DR.1;┴DR.2;╠AENGE)
LDX #@0
LDY #@1
LDA #@2
JSR $C26E
/
;
; *** ╙╧╬╙╘╔╟┼╙ ***
;
; * ─ESKTOP LADEN UND STARTEN *
:DESKTOP M 0
JMP $C22C
/
; * ═┴╔╬ AUFRUFEN *
:MAIN M 1 ;(╥ETURNADR.)
LOADW @0,RUECKJMP
RTS
/
; * ┼IN/┴USGABE UEBER ALTE ╥OUTINEN VORBEREITEN *
:INITIO M 0
JSR $C25C
/
; * ┼IN/┴USGABE UEBER ALTE ╥OUTINEN BEENDEN *
:DONEIO M 0
JSR $C25F
/
; * ╔/╧-╞EHLER ANZEIGEN *
:ERROR M 2 ;(╧╦ADR.;┼RRORADR.)
TXA
BEQ @0
LOADW @1,ZP28
JMP ERRORROUT
/
;
; *** ═┴╒╙ UND ╘┼╪╘├╒╥╙╧╥ ***
;
; * ═AUS"SPIELWIESE" EINSTELLEN *
:MOUSEBORDER M 4 ;(OBERE;UNTERE;LINKE;RECHTE ╟RENZE)
POKE BORDO,@0
POKE BORDU,@1
LOADW @2,BORDL
LOADW @3,BORDR
/
; * ═AUSZEIGER AUF ╦OORD. SETZEN *
:SETMOUSE M 2 ;(╪;┘)
LOADW @0,MOUSEX
POKE MOUSEY,@1
/
; * ╟ROESSE FUER ╘EXTCURSOR FESTLEGEN *
:PROMPT M 1 ;(╚OEHE IN ╨IXEL)
LDA #@0
JSR $C1C0
/
; * ╘EXTCURSOR EINSCHALTEN *
:PRON M 0
JSR $C29B
/
; * ╘EXTCURSOR AUSSCHALTEN *
:PROFF M 0
JSR $C29E
/
; * ╦OORD. FUER ├URSOR SETZEN *
:SETCR M 0
JSR CRSET
/
;
; *** ╙╨╥╔╘┼╙ ***
;
; * ╙PRITE POSITIONIEREN *
:PUTSPR M 3 ;(╬UMMER;╪;┘)
POKE 8,@0
LOADW @1,R4
POKE $C,@2
JSR $C1CF
/
;
; *** ─╔╙╦, ╙┼╤. ╒.┴. ***
; * ╙ELEKTIERTE ╞ILENAMENLISTE BEZIEHEN *
:FINDTYPE M 4 ;(╞ILETYP;┴BLAGEADR;═AXLAENGE;CLASS)
POKE $10,@0
LOADW @1,R6
POKE $11,@2
LOADW @3,R10
JSR $C23B
/
; * ╞ILE LADEN (WEITERE ╨ARAMETER) *
:READ M 2 ;(╠ADEADR.;═AXLAENNGE)
LOADW @0,R7
LOADW @1,R2
JSR $C1FF
/
; * ╞ILE LADEN UND STARTEN (WEITERE ╨ARAM.) *
:GETFILE M 0
JMP $C208
/
; * ─ISKETTE OEFFNEN *
:OPENDISK M 0
JSR $C2A1
/
; * ╞ILEEINTRAG IM ─IR. SUCHEN *
:FINDFILE M 1 ;(╞ILENAMENADR.)
LOADW @0,R6
JSR $C20B
/
; * ┬LOCK VON ─ISK EINLESEN (WEITERE ╨ARAMETER!) *
:GETBLK M 1 ;(╙PEICHERADR.)
LOADW @0,R4
JSR $C1E4
/
; * ┬YTE AUS SEQ. ─ATEI HOLEN *
:READBYTE M 0
JSR $C2B6
/
; * ╘URBOBETRIEB AUSSCHALTEN *
:TURBOFF M 0
JSR $C232
/
; * ╘URBO AUS UND ╞LAG FUER FEHLENDE ╥OUT. SETZEN *
:TURBOPUR M 0
JSR $C235
/
; * ╘URBOBETRIEB ANSCHALTEN *
:TURBON M 0
JSR $C214
/
;
; *** ─╔╙╦, ╓╠╔╥ ***
;
; * ╓╠╔╥-╞ILE OEFFNEN *
:OPENREC M 1 ;(┌G. AUF ╞ILENAMEN)
LOADW @0,R0
JSR $C274
/
; * ╓╠╔╥-╞ILE SCHLIESSEN *
:CLOSEREC M 0
JSR $C277
/
; * ┌EIGER AUF ─ATENSATZ RICHTEN *
:POINTREC M 1 ;(╬UMMER)
LDA #@0
JSR $C280
/
; * ─ATENSATZ LOESCHEN *
:DELREC M 0
JSR $C283
/
; * ─ATENSATZ EINFUEGEN *
:INSREC M 0
JSR $C286
/
; * ┴KTUELLEN ─ATENSATZ EINLESEN *
:READREC M 2 ;(┌IELADR.;MAX.╠AENGE)
LOADW @0,R7
LOADW @1,R2
JSR $C28C
/
; * ┴KTUELLEN ─ATENSATZ SPEICHERN *
:WRITEREC M 2 ;(┴NFADR.;╠AENGE)
LOADW @0,R7
LOADW @1,R2
JSR $C28F
/
;
; *** ┴╠╘┼ ╔/╧-╥╧╒╘╔╬┼╬ ***
;
; * ╞ILEPARAMETER SETZEN *
:SETLFS M 3 ;(╞ILENR.;╟ERAET;╙EK.)
LDA #@0
LDX #@1
LDY #@2
JSR SETLFSR
/
; * ╞ILE OEFFNEN *
:FOPEN M 5 ;(╞ILENR;╟ERAET;╙EK.;╬AMLAENG;╬AMADR.)
SETLFS @0,@1,@2
LDA #@3
LDX #<@4
LDY #>@4
JSR SETNAM
JSR FOPENR
/
; * ╞ILE SCHLIESSEN *
:CLOSE M 1 ;(╞ILENR.)
LDA #@0
JSR CLOSER
/
; * ┼INGABE UMLEITEN *
:CHKIN M 1 ;(╞ILENR.)
LDX #@0
JSR CHKINR
/
; * ┴USGABE UMLEITEN *
:CHKOUT M 1 ;(╞ILENR.)
LDX #@0
JSR CHKOUTR
/
;
; *** ╥┼├╚╬┼╬ ***
;
; * ╫ORT DEKREMENTIEREN *
:DDEC M 1 ;(┌PADR.)
LDX #@0
JSR $C175
/
; * ╫ORT INKREMENTIEREN *
:DINC M 1 ;(┴DR.)
LOADW @0,ZP29
JSR DINCROUT
/
; * ╤UOTIENT ZWEIER ╫ORTE BILDEN *
:DDIV M 2 ;(─IVID.ADR;─IVISORADR)
LDX #@0
LDY #@1
JSR $C169
/
; * ┌WEI ┬YTES MULTIPLIZIEREN *
:BBMULT M 2 ;(╨RODUKTEADR;┼RGEBNISADR)
LDY #@0
LDX #@1
JSR $C160
/
; * ┬YTE MIT ╫ORT MULTIPLIZIEREN *
:BMULT M 2 ;(┬YTEADR;╫ORTADR)
LDY #@0
LDX #@1
JSR $C163
/
; * ┌WEI ╫ORTE SUBTRAHIEREN *
:DSUB M 3 ;(═INUENDADR;╙UBTRAHEND;─IFFERENZ)
SEC
LDA @0
SBC @1
STA @2
LDA @0+1
SBC @1+1
STA @2+1
/
; * ┌WEI ╫ORTE ADDIEREN *
:DADD M 3 ;(╙UMMA1;╙UMMA2;╙UMME)
CLC
LDA @0
ADC @1
STA @2
LDA @0+1
ADC @1+1
STA @2+1
/
;
; *** ╙╨┼╔├╚┼╥ ╓┼╥╙├╚╔┼┬┼╬ + ╦╧╨╔┼╥┼╬ ***
;
; * ╙PEICHERBLOECKE VERSCHIEBEN *
:MOVERAM M 3 ;(┴NFADR.╤UELLE,┴NFADR.┌IEL,╠AENGE)
JSR $C1B7
W @0,@1,@2
/
; * ╙PEICHERBEREICH MIT ┬YTE FUELLEN *
:FILLRAM M 3 ;(┴NZAHL;┴NFANG;╞UELLBYTE)
JSR $C1B4
W @0,@1
B @2
/
; * ╙PEICHERBEREICH MIT $00 FUELLEN *
:CLEARAM M 2 ;(┴NFANGSADR.;┴NZAHL)
LOADW @0,R1
LOADW @1,R0
JSR $C178
/
; * ╙PEICHERBEREICH INITIALISIEREN *
:INITRAM M 1 ;(╘ABADR.)
LOADW @0,R0
JSR $C181
/
; * ╞ILE LOESCHEN *
:DELETE M 1 ;(╬AMENADR.)
LOADW @0,R0
JSR $C238
/
;
;*** ╥OUTINEN ***
;
; * ╦ONVERTIERUNG VON ╘EXT INS *
; * ╟EOS-╞ORMAT *
:CONVERT
LDY #0
LDA (ZP27),Y
BEQ ENDCNV
CMP #$10
BEQ ENDECNV
CMP #$14
BEQ ZWEI
CMP #$15
BEQ EINS
CMP #$16
BEQ DREI
CMP #$17
BEQ DREI
CMP #65
BCC NEXT
CMP #91
BCS GROSSCNV
EOR #$20
JMP NEXT
:GROSSCNV
CMP #193
BCC NEXT
CMP #219
BCS NEXT
AND #%01111111
:NEXT
STA (ZP27),Y
DINC ZP27
JMP CONVERT
:ENDCNV
DINC ZP27
LDY #0
LDA (ZP27),Y
BNE CONVERT
:ENDECNV
RTS
:EINS
DINC ZP27
DINC ZP27
JMP CONVERT
:ZWEI
DINC ZP27
JMP EINS
:DREI
DINC ZP27
JMP ZWEI
;
; * ┌AHL AUSGEBEN *
;
:ZAHLRT
POKE ZP29+1,0 ;┌AEHLER FUER FUEHRENDE 0
LDA ZP27
CMP #100 ;KLEINER 100 ?
BCS NKL100
POKE ZP29+1,1 ;WENN JA, 1 FUEHRENDE 0
JMP ZEHNER
:NKL100
POKE ZP29,$FF ;┌AEHLER FUER 100
LDA ZP27
:ABZ100
INC ZP29 ;ERHOEHEN
SEC
SBC #100 ;┌AHL-100
BCS ABZ100
ADC #100
STA ZP27 ;╥EST WIEDER ZURUECK
LDA ZP29
CLC
ADC #48 ;╚UNDERTER IN ┴SCII
PUTCHAR
:ZEHNER
POKE ZP29,$FF
LDA ZP27
:ABZ10
INC ZP29 ;┌EHNER ZAEHLEN
SEC
SBC #10
BCS ABZ10
CLC
ADC #10+48 ;┼INER IN ┴SCII WANDELN,
PHA ;ZWISCHENSPEICHERN
LDA ZP29
BNE NNULL10
INC ZP29+1 ;WENN ┌EHNER=0, ┌AEHLER+1
:NNULL10
CLC
ADC #48 ;┌EHNER IN ┴SCII
STA ZP27+1 ;UND ZWISCHENSP.
LDA ZP29+1
CMP #2 ;ZWEI ╬ULLEN ?
BEQ NZEHN
LDA ZP27+1 ;WENN NEIN, ┌EHNER AUS
PUTCHAR
:NZEHN
PLA ;┼INER AUSGEBEN
PUTCHAR
LDA ZP29+1
BEQ FERTZL
:FUELL
LDA #32 ;╞UELLLEERZEICHEN
PUTCHAR
DEC ZP29+1
BNE FUELL
:FERTZL
RTS
;
; * ╔/╧-╞EHLERMELDUNG AUSGEBEN *
;
:ERRORROUT
TXA
CMP #10 ;KLEINER ALS 10 ?
BCC KLEINER10 ;<-JA
POKE ZP29,$FF ;<-NEIN
:ABZIEHEN
INC ZP29 ;┌EHNERSTELLE MERKEN
SEC
SBC #10 ;KLEINER 10 MACHEN
BCS ABZIEHEN
CLC ;KLEINER 0!
ADC #10+48 ;WIEDER -1>┴KKU<10 UND
;IN ┌EICHENCODE WANDELN
STA FEHLERNR+3 ;UND ALS ┼INERSTELLE SP.
LDA ZP29
CLC ;UND DAS GLEICHE MIT DER
ADC #48 ;┌EHNERSTELLE
STA FEHLERNR+2
JMP AUSGEBEN
:KLEINER10
CLC
ADC #48 ;1STELLIGE ┌AHL UMRECHNEN
STA FEHLERNR+3 ;UND
POKE FEHLERNR+2,32 ;╠EERZEICHEN ALS 1.╙TELLE
:AUSGEBEN
DIALBOX IOFEHLER
JMP (ZP28)
;
; ** ╫ORT INKREMENTIEREN **
;
:DINCROUT
LDY #0
LDA (ZP29),Y ;╠OWBYTE
TAX
INX ;ERHOEHEN
TXA
STA (ZP29),Y
BNE KEINUEBERLAUF
LDY #1
LDA (ZP29),Y ;╚IGHBYTE
TAX
INX ;ERHOEHEN
TXA
STA (ZP29),Y
:KEINUEBERLAUF
RTS
;
; ** ┬ILDSCHIRM LOESCHEN **
;
:CLSROUT
BOX 0,0,319,199,2
RTS
;
; ** ├URSOR SETZEN **
;
:CRSET
TRANSW R11,R4 ;╦OORD. FUER
SEC ;╘EXTCRSR.
LDA 5
SBC CRDIFF
STA $C
POKE 8,1
JSR PUTSPRR
RTS
;
; *** ─ATEN, ╘EXTE, ... ***
;
:CRDIFF
B 6 ;╚ILFSVAR. FUER ╙┼╘├╥
;
:IOFEHLER
STDDIALBOX 1
TEXTAUS 16,16,FEHLERMELDUNG
TEXTAUS 16,52,FEHLERNR
FELD OK,136,72
B NULL
;
:FEHLERMELDUNG
B BOLDON,"┬EFEHL ABGEBROCHEN WEGEN",CR,CR
GOTOX 80
B "─ISKETTENFEHLER:"
B NULL
;
:FEHLERNR
B "╔:00"
TEXTENDE
:ENDE
;
;===> ┼╬─┼ ╟┼╧╙-╠╔┬╥┴╥╔┴╬ <===
;
;░└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└«
;▌ GEO╘ERM ╓1.1 ▌
;½└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└│
;▌ (╫) IN 1988 BY ├ARSTEN ├LASOHM ▌
;½└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└│
;▌ ╓ERSION 1.0 WRITTEN FROM 23. 1.1988 ▌
;▌ TO 28. 2.1988 ▌
;▌ LAST CHANGE MADE ON 28. 3.1988 ▌
;¡└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└╜
;
; *** PROGRAMMSPEZIFISCHE ╠ABELS ***
;
:SOH=1 ;┴SCII-├ODES FUER
:EOT=4 ;╪-═ODEM
:ACK=6
:NAK=$15
:CAN=$18
:ETX=3
;
; **** ╓OREINSTELLUNGEN EINLESEN ****
; **** UND ╘ABELLE FUER ╚ILFSPRG ****
; **** ERSTELLEN ****
;
TXTCONVERT TEXTE ;╘EXTE KONVERTIEREN
TXTCONVERT FEHLERMELDUNG
:PARLESEN
OPENDISK
OPENREC GEOTERM
ERROR OK1,PARLESEN
:OK1
POINTREC 1
READREC BAUD,DRUCKLF-BAUD+1
ERROR OK1A,PARLESEN
:OK1A
POKE ZW,42 ;╙TERNCHEN SETZEN
JSR STERNCHEN
POINTREC 2
READREC UNIV,512
ERROR OK1B,NRT21
:OK1B
CLOSEREC
LDA BSW
BEQ SETZUNI
JSR FONTBSW
JMP FONTFERT
:SETZUNI
JSR FONTUNI
:FONTFERT
LDA FLAG3
BEQ NRT21
COP FADR,STEUERREG
COP FADR+1,BEFEHLSREG
RTS
:NRT21
FINDTYPE 5,PRG1,8,0 ;╘ABELLE
LOADW PRG1,ZP1 ;FUER
LDY #0 ;╚ILFSPRG.
LDX #2 ;ERSTELLEN
:FILEZAHL
LDA (ZP1),Y
BEQ SCHLUSS
CLC
LDA ZP1
ADC #17
STA ZP1
LDA ZP1+1
ADC #0
STA ZP1+1
INX
CPX #10
BNE FILEZAHL
:SCHLUSS
TXA
ORA SUB1+6 ;═ENUEPUNTZAHL
STA SUB1+6
STX ZP1
POKE ZP2,14
BBMULT ZP1,ZP2
CLC
LDA ZP2
ADC #16
STA SUB1+1 ;UNTERE ╟RENZE
;
; ** ┴UF ╓1.2 UND 1.3 EINSTELLEN **
LDA VERSION
BEQ GEOS13
LOADW $C2E4,OLDNMI ;FUER ╓1.2
LOADW LAHM12,LAHMMAIN
LOADW RESET12,RESETMAIN
JMP INIT
;
:GEOS13
LOADW $FB22,OLDNMI ;FUER ╓1.3
LOADW LAHM13,LAHMMAIN
LOADW RESET13,RESETMAIN
;
; **** ╞ILE FUER ╥╙-232 OEFFNEN ****
; **** UND ╬═╔ (U.A.) INSTAL- ****
; **** LIEREN ****
;
:INIT
JSR RSINIT
;
; **** ═ENUES USW. ERZEUGEN ****
;
CLEARAM $A000,8000 ;╙CREENS LOESCHEN
CLEARAM $6000,8000
POKE $2F,%11000000 ;IN BEIDE ┬ITMAPS SCHREIBEN
DOMENU HAUPTM,1 ;╚AUPTMENUE ANZEIGEN
DOICONS PUFFERIC ; ╔CON ''
LDA BOTTOM+1
CMP #$60 ;WEGEN ╬EUSTARTS NACH
BEQ PFLEER ;┴CCESSORY MUESSEN
LOADW $6000,ZP1 ;╠INIE+╔CON BEARBEITET
TRANSW BOTTOM,ZP2 ;WERDEN
DSUB ZP1,ZP2,ZP1
LOADW $6000-GRENZE/320,ZP2
DDIV ZP1,ZP2
TRANSW ZP1,R4
LOADW 0,R3
POKE $18,14
LDA #$FF
JSR HLINER
:PFLEER
LDA PUFFER
BEQ PFZU
INVBOX 255,1,274,13
:PFZU
;
HLINE 0,319,15,$FF
HLINE 0,319,0,$FF ;OBEREN ┬EREICH
BOX 275,0,319,13,1 ;ZEICHNEN
BOX 277,3,319,11,0
;
LOADW TASTE,VEKTAST ;╥EAKTION AUF ╘ASTENDRUCK
LOADW 0,R11
LOADW 0,TEXTX
COP TOP,5 ;╘EXTPOS. SETZEN
STA TEXTY
LDA CRHOEHE
JSR PROMPTR
PRON
SETCR
;
; **** ╚AUPTSCHLEIFE ****
;
:LOOP
LDA MENUNR
BNE UNTERMEN ;╒NTERMENUE AKTIV
LOADW TASTE,VEKTAST
LDA FLAG2
BEQ LPWEITER
LDA CRHOEHE
JSR PROMPTR
PRON
JMP LPWEITER
:UNTERMEN
LOADW 0,VEKTAST
PROFF
COP MENUNR,FLAG2
MAIN LOOP
:LPWEITER
COP MENUNR,FLAG2
MOUSEBORDER 0,13,0,319
TRANSW TEXTX,R11
COP TEXTY,5
SETCR
JSR ROMEIN
JSR GETIN
PHA ;┌EICHEN ZWISCHENSPEICHERN
JSR ROMAUS
LDA RS232ST ;╞EHLER AUFGETRETEN ?
AND #%00000011 ;(╨ARITAET UND ╞RAMING)
BEQ LPKEINF
POKE RS232ST,0
PLA
LDA #32 ;" " SIMULIEREN
PHA
:LPKEINF
PLA ;ZURUECKHOLEN
TAX
BNE NICHTNULL ;┌EICHEN ANGEKOMMEN ?
MAIN LOOP
:NICHTNULL
JSR PRINT ;WENN JA,DANN AUSGEBEN
MAIN LOOP
;
; *** ╥╧═ EINSCHALTEN ***
;
:ROMEIN
SEI
POKE 1,$37
COP $D01A,ZW
POKE $D01A,0
RTS
;
; *** ╥╧═ AUSSCHALTEN ***
;
:ROMAUS
COP ZW,$D01A
POKE 1,$30
CLI
RTS
;
; *** ╔/╧ VORBEREITEN ***
;
:IOINIT
INITIO
JSR CLRCH
CLOSE 2 ;╥╙-232-╞ILE SCHLIESSEN
DONEIO
TRANSW OLDNMI,$FFFA
TRANSW RESETMAIN,R0
JSR INITRAMR
RTS
;
; *** ╥╙-232 VORBEREITEN ***
;
:RSINIT
SEI
LDA 1
PHA
POKE 1,$37
LDA $D01A
PHA
POKE $D01A,0
POKE $D019,$7F
LOADW IRQ,$314 ;╠EER-╔╥╤
LOADW NMI,$FFFA ;╬EUE ╬═╔-
LOADW NMI,$0318 ;╥OUTINE
TRANSW LAHMMAIN,R0 ;═AIN Z.╘. LAHMLEGEN
JSR INITRAMR
FOPEN 2,2,0,2,FADR ;╥╙232-╞ILE OEFFNEN
LOADW EBUF,$F7
LOADW ABUF,$F9
CHKIN 2
CHKOUT 2
PLA
STA $D01A
PLA
STA 1
CLI
RTS
;
; **** ╟EOS-┌EICHEN IN ALTEN ├-64 ├ODE WANDELN ****
;
:ZURWANDELN
CMP #65 ;╘EXT VON
BCC KLEIN ;┴SCII ZURUECK-
CMP #91 ;WANDELN
BCS KLEIN ;(FALLS GEWUENSCHT)
EOR #$20
ADC #$60 ;$41 => $├1
JMP FWANDL
:KLEIN
CMP #$61
BCC FWANDL
CMP #$7B
BCS FWANDL
EOR #$20 ;$61 => $41
:FWANDL
RTS
;
; **** ┌EICHEN AUF ┬ILDSCHIRM AUSGEBEN ****
:PRINT
AND #%01111111 ;┬IT 7 LOESCHEN
STA ZEICHEN
TRANSW TEXTX,R11
COP TEXTY,5
LDA ZEICHEN
CMP #32
BCC STEUERZ ;KEIN DRUCKENDES ┌EICHEN
CMP #127
BNE NDELETE ;NICHT DELETE (127)
JMP BACKSP
:NDELETE
LDA ZEICHEN
JSR PUFFERN
LDA VERSION
BNE DRUCKEN ;KEINE ┴ENDERUNGEN
LDA BSW
BEQ DRUCKEN
;
; ** DT. ╒MLAUTE BEI 1.3 UMGEHEN **
;
LDA ZEICHEN
CMP #91 ;ECKIGE ╦LAMMER AUF
BNE N91
POKE ZEICHEN,40 ;ZU RUNDE ╦LAMMER
:N91
CMP #92 ;╙CHRAEGSTRICH LO/RU
BNE N92
POKE ZEICHEN,47 ;ZU '' LU/RO
:N92
CMP #93 ;ECKIGE ╦LAMMER ZU
BNE N93
POKE ZEICHEN,41 ;ZU RUNDE ╦LAMMER
:N93
CMP #123 ;GESCHW. ╦LAMMER AUF
BNE N123
POKE ZEICHEN,40 ;ZU RUNDER
:N123
CMP #124 ;SENKR. ╙TRICH
BNE N124
POKE ZEICHEN,47 ;ZU ╙CHRAEGSTRICH
:N124
CMP #125 ;GESCHW. ╦LAMMER ZU
BNE N125
POKE ZEICHEN,41 ;ZU RUNDER
:N125
CMP #126 ;GESCHW. ╙TRICH
BNE DRUCKEN
POKE ZEICHEN,45 ;ZU ═INUSZEICHEN
JMP DRUCKEN
;
; ** ╙TEUERZEICHEN AUSWERTEN **
;
:STEUERZ
CMP #CR ;├ARRIAGE ╥ETURN
BNE NCRET
JSR PUFFERN
JMP DRUCKEN
:NCRET
CMP #BACKSPC
BNE NBACKSP
JMP BACKSP ;DELETE (8)
:NBACKSP
CMP #7 ;┬ELL (^╟)
BNE NBELL
JMP BEEP
:NBELL
CMP #12 ;╞ORMFEED (╘OP OF ╨AGE)
BEQ GOFORMF
JMP ZURUECK
:GOFORMF
JMP FORMFEED
;
; *** ┌EICHEN AUSGEBEN ***
:DRUCKEN
LDA ZEICHEN
HCHAR
TAX
BEQ NUEBERSCHR
CLC
ADC TEXTX
STA ZW
LDA TEXTX+1
ADC #0
BEQ NUEBERSCHR
LDA #63
CMP ZW
BCS NUEBERSCHR
LDA ZEICHEN
PHA
LDA ECHO
PHA
LDA PUFFER
PHA
POKE ZEICHEN,13
POKE ECHO,CLEAR
POKE PUFFER,CLEAR
JSR NUEBERSCHR
PLA
STA PUFFER
PLA
STA ECHO
PLA
STA ZEICHEN
:NUEBERSCHR
LDA ZEICHEN
PUTCHAR
LDA CHRBREIT ;┌EICHENBREITE LADEN
LDY ZGBREITE ;UND FUER
STA BREITEN,Y ;─ELETE SPEICHERN
INY ;╨UFFERZEIGER ERHOEHEN
BEQ ZUGROSS
STY ZGBREITE
:ZUGROSS ;╨UFFER VOLL
LDA ZEICHEN
CMP #CR ;FALLS ├╥,
BEQ PRFSCROLL
JMP ZURUECK
:PRFSCROLL
POKE ZGBREITE,0 ;╨UFFER LOESCHEN
SEC
LDA 5
SBC CRDIFF
CLC
ADC CRHOEHE
CMP #199 ;UND EVTL. SCROLLEN
BCC ZURUECK
CLEARAM $A000+640,8000-640
LDA BSW
BEQ NBSW
MOVERAM $6000+3840,$A000+640,4160 ;AB ┌EILE 96 NACH ┌EILE 16
MOVERAM $6000+3840,$6000+640,4160 ;'' '' '' ''
CLEARAM $6000+4800,3200 ;UNTEREN ╘EXTTEIL LOESCHEN
LOADW 0,R11 ;╘EXTPOS.
POKE 5,122 ;NEU SETZEN
JMP ZURUECK
:NBSW
MOVERAM $6000+5120,$A000+640,2880 ;AB ┌EILE 112 NACH ┌EILE 16
MOVERAM $6000+5120,$6000+640,2880 ; ''
CLEARAM $6000+3520,4480
LOADW 0,R11
POKE 5,90
:ZURUECK
TRANSW R11,TEXTX ;NEUE ╦OORD. ZWISCHENSPEICHERN
COP 5,TEXTY
SETCR
LDA ECHO
BEQ NECHO
LDA 1
PHA
JSR ROMEIN
:ABWARTEN
LDA ENABLE
AND #1
BNE ABWARTEN
LDA ZEICHEN ;FALLS ┼CHO,
JSR BSOUT ;AUF ╥╙-232 SENDEN
COP ZW,$D01A
PLA
STA 1
CLI
:NECHO
RTS
;
; ** ─ELETE **
:BACKSP
LDY ZGBREITE
DEY
CPY #$FF
BEQ ZURUECK
LDA BREITEN,Y
STA CHRBREIT
STY ZGBREITE
LDA #BACKSPC
JSR PUFFERN
PUTCHAR
JMP ZURUECK
;
; ** ┬EEP **
:BEEP
JSR ROMEIN
POKE $D418,$F ;╘ONROUTINE
POKE $D405,0 ;AUS ═╙┼
POKE $D406,$F7 ;(BZW. ┬┼┼╨┼╥)
POKE $D404,$11
POKE $D401,$32
POKE $D400,0
LDY #$80
:SOUND1
LDX #$FF
:SOUND2
DEX
BNE SOUND2
DEY
BNE SOUND1
POKE $D404,10
JSR ROMAUS
JMP ZURUECK
;
; ** ╞ORMFEED **
:FORMFEED
POKE ZGBREITE,0
CLEARAM $A000+640,8000-640
CLEARAM $6000+640,8000-640
LOADW 0,R11
COP TOP,5 ;╘EXTPOS. SETZEN
JMP ZURUECK
;
; *** ┌EICHEN PUFFERN (EVTL.) ***
;
:PUFFERN
PHA
LDA PUFFER
BNE JA
PLA
RTS
:JA
TRANSW BOTTOM,ZP1
LOADW GRENZE,ZP2
DSUB ZP1,ZP2,ZP2
BCS NVOLL
HLINE 0,319,14,$FF ;VOLLE ╠INIE
INVBOX 255,1,274,13
TRANSW TEXTX,R11
POKE PUFFER,CLEAR
PLA
RTS
:NVOLL
PLA
PHA
CMP #BACKSPC
BNE NLOESCHEN
LDA ZP1+1
CMP #$60
BEQ NIMPF
DINC ZP1
TRANSW ZP1,BOTTOM
:NIMPF
PLA
RTS
:NLOESCHEN
DDEC ZP1
TRANSW ZP1,BOTTOM
LDY #0
PLA
PHA
STA (ZP1),Y
;
; ** ╠INIE ERWEITERN **
;
LOADW $6000,ZP1
TRANSW BOTTOM,ZP2
DSUB ZP1,ZP2,ZP1 ;┬YTEZAHL NACH ZP1
LOADW $6000-GRENZE/320,ZP2
DDIV ZP1,ZP2
TRANSW ZP1,R4
LOADW 0,R3
POKE $18,14
LDA #$FF
JSR HLINER
TRANSW TEXTX,R11
PLA
RTS
;
; **** ╬EUE ╬═╔-╥OUTINE ****
;
:NMI
SEI ;MIT LEICHTEN
PHA ;┴ENDERUNGEN
TXA ;AUS DEM ╥╧═
PHA ;UEBERNOMMEN
TYA
PHA
LDA 1
PHA
POKE 1,$37
LDA #$7F
STA $DD0D
LDY $DD0D
BMI AKTIV
JMP FEB6
:AKTIV
TYA
AND $02A1
TAX
AND #$01
BEQ FEA3
LDA $DD00
AND #$FB
ORA $B5
STA $DD00
LDA $02A1
STA $DD0D
TXA
AND #$12
BEQ FE9D
AND #$02
BEQ FE9A
JSR $FED6
JMP FE9D
:FE9A
JSR $FF07
:FE9D
JSR $EEBB
JMP FEB6
:FEA3
TXA
AND #$02
BEQ FEAE
JSR $FED6
JMP FEB6
:FEAE
TXA
AND #$10
BEQ FEB6
JSR $FF07
:FEB6
LDA $02A1
STA $DD0D
PLA
STA 1
PLA
TAY
PLA
TAX
PLA
RTI
;
; **** (╠EER-) ╔╥╤ ****
;
:IRQ
PLA
TAY
PLA
TAX
PLA
RTI
;
; **** ╥EAKTION AUF ╘ASTENDRUCK ****
;
:TASTE
LDA TASTCD
CMP #28
BEQ DEL
CMP #29
BNE NDEL
:DEL
POKE TASTCD,8
:NDEL
LDA ECHO
BNE ECHOEN ;┼CHO AN
PHP
LDA 1
PHA
JSR ROMEIN
:WARTEN
LDA ENABLE
AND #1
BNE WARTEN
LDA TASTCD
JSR BSOUT ;┌EICHEN SENDEN
COP ZW,$D01A
PLA
STA 1
PLP
RTS
:ECHOEN
LDA TASTCD ;┌EICHEN AUSGEBEN
JSR PRINT ;(╙CREEN UND ╥╙-232)
SETCR
RTS
;
; *******************************************
; *** ╓ERSCHIEDENE ╥OUTINEN (FUER ═ENUES) ***
;
IN 84GT.ROUTINEN
;
; *** 6.1.2.1. ├=64-╞ILE SENDEN ***
;
:RT6121
MENU1
;
; *** 6.1.2.2. ╟EOS-╞ILE SENDEN ***
;
:RT6122
MENU1
;
; *** 6.2.1. ├=64-╞ILE EMPFANGEN ***
;
:RT621
POKE FLAG5,SET
POKE FLAG1,CLEAR
POKE ZEICHEN,0
JSR IOINIT
MOVERAM DISKID,DISKNAM,18 ;╬AME DER
MOVERAM DISKNAM,URNAME,16 ;ALTEN ─ISK
DIALBOX ZIELDISK
LDA R0
CMP #CANCEL
BNE NABBR
JMP ALTEDISK
:NABBR
OPENDISK
ERROR OK7,ALTEDISK
:OK7
LOADW $7F40,R5 ;┴BLAGE FUER ╞ILENAM
POKE $7F40,0
DIALBOX FILENAME
LDA R0
CMP #CANCEL
BNE NABBR2
:LEERSTR
JMP ALTEDISK
:NABBR2
LDA $7F40
BEQ LEERSTR
LDY #0
:STRCOPY
LDA $7F40,Y
BEQ STREND ;╞ILENAMEN VERSCHIEBEN
JSR ZURWANDELN ;UND ┌EICHENCODE WANDELN
STA $7F40,Y
INY
JMP STRCOPY
:STREND
TYA
PHA
DIALBOX FILETYP ;╞ILETYP AUSWAEHLEN
DELETE $7F40 ;╞ILE LOESCHEN
PLA
TAY
LDA #44
STA $7F40,Y ;", , "
STA $7F40+2,Y
LDA ZW
STA $7F40+1,Y ;" ? "
LDA #87
STA $7F40+3,Y ;" W"
TYA
PHA
CLC
ADC #4
STA NAMLAENG
POKE FLAG6,SET ;╞LAG FUER ┴╠╘┼─╔╙╦ SETZEN
TURBOPUR
INITIO
FOPEN 15,8,15,1,INITSTR
CLOSE 15
SETLFS 4,8,2 ;╞ILE AUF ─ISK OEFFNEN
LDA NAMLAENG
LDX #<$7F40
LDY #>$7F40
JSR SETNAM
JSR FOPENR
BCC OK8
PLA
JMP DRENDE
:OK8
DONEIO
SYSFONT
POKE $2F,%10000000 ;NUR IN SICHTB. ┬ITMAP
BOX 72,40,263,135,1
BOX 64,32,255,127,0
FRAME 64,32,255,127,$FF
PUTSTR 80,48,EMPFTXT
PLA
TAY
LDA #0 ;╙TRINGENDEKENNZEICHEN
STA $7F40,Y
PUTSTR 125,36+32,$7F40
POKE ZP1,1
ZAHLAUS ZP1,125,46+32
POKE ZP1,0
ZAHLAUS ZP1,125,56+32
JSR RSINIT
JSR ROMEIN
POKE ZAEHLER,10
POKE BLOCKNR,1
:RETRY
LDA #NAK
JSR BSOUT ;ERSTES ╬┴╦
LDX #10 ;MIT ╘IMEOUT
JSR RECEIVE ;VON 10 SEK.
BCC ZANGEK
DEC ZAEHLER
BNE RETRY
JMP ABBRUCH
:ZANGEK
PHA
POKE ZAEHLER,0 ;┌AEHLER FUER ╞EHLER
PLA
CMP #SOH ;╙╧╚ ?
BEQ BLOCKGET
JMP EMPFERR ;NEIN -> ╬┴╦ SENDEN
:BLOCKGET
LDX #4
JSR RECEIVE
BCC KERR1 ;KEIN ┌EICHEN (TIMEOUT)?
JMP EMPFERR
:KERR1
STA ZEICHEN ;┬LOCKNR.
LDX #4
JSR RECEIVE
BCC KERR2
JMP EMPFERR
:KERR2
EOR ZEICHEN
TAX ;GUELTIGE ╦OMBINATION
INX ;┬LOCKNR./╦OMPLEMENT ?
BEQ KERR3
JMP EMPFERR
:KERR3
LDA ZEICHEN
CMP BLOCKNR
BEQ NROK ;ERWARTETE ┬LOCKNR.
TAX
INX
BEQ NWIEDER ;WIEDERHOLTER ┬LOCK
:WIEDERH
LDX #2 ;AUF FREIE ╠EITUNG
JSR RECEIVE ;WARTEN
BCC WIEDERH
LDA #ACK ;┴├╦ SENDEN
JSR BSOUT
JMP NOCHMAL ;UND NAECHSTEN ┬LOCK
:NWIEDER
LDX #2
JSR RECEIVE
BCC NWIEDER
POKE ZEICHEN,CAN ;┌EICHEN FUER ┴BBRUCH SENDEN
JMP ABBRUCH ;(FATALER ╞EHLER)
:NROK
LDY #128
POKE CHKSUM,0
:DATAEMPF
STY ZP5
LDX #4
JSR RECEIVE ;─ATA-┌EICHEN HOLEN
BCC KERR4 ;KEINS DA ?
JMP EMPFERR
:KERR4
LDY ZP5
STA FILEPUFFER,Y
CLC
ADC CHKSUM ;├╚╦╙╒═
STA CHKSUM ;BERECHNEN
DEY
BNE DATAEMPF
LDX #4
JSR RECEIVE ;├╚╦╙╒═ HOLEN
BCC KERR5
JMP EMPFERR
:KERR5
CMP CHKSUM ;UND PRUEFEN
BEQ KERR6
JMP EMPFERR
:KERR6
JSR CLRCH
CLOSE 2 ;╥╙-232-╞ILE SCHLIESSEN
CHKOUT 4 ;┴USGABE AUF ╞LOPPY
POKE ZP5,128
:DATASAVE
LDY ZP5
LDA FILEPUFFER,Y
JSR BSOUT
BCC KABB ;BEI ╞LOPPY-╞EHLER ┴BBRUCH
JSR RSINIT
POKE ZEICHEN,CAN
JMP ABBRUCH
:KABB
DEC ZP5
BNE DATASAVE
INC BLOCKNR ;┬LOCKNR.+1
POKE ZAEHLER,0 ;╞EHLER=0
SEI
COP ZW,$D01A
POKE 1,$30
CLI
ZAHLAUS BLOCKNR,125,46+32
ZAHLAUS ZAEHLER,125,56+32
SEI
POKE 1,$37
COP $D01A,ZW
POKE $D01A,0
CLI
JSR RSINIT ;┴USGABE WIEDER AUF ╥╙232
LDA #ACK
JSR BSOUT ;┴├╦ SENDEN
:NOCHMAL
LDX #4
JSR RECEIVE ;UND AUF ╙╧╚ WARTEN
BCS EMPFERR
CMP #SOH
BNE NBLOCKG
JMP BLOCKGET
:NBLOCKG
CMP #EOT
BNE EMPFERR
POKE ZEICHEN,ACK
POKE FLAG1,SET
JMP ABBRUCH
;
; ** ╬┴╦ SENDEN **
:EMPFERR
LDX #2 ;AUF FREIE ╠EITUNG
JSR RECEIVE ;WARTEN
BCC EMPFERR
LDA #NAK
JSR BSOUT
INC ZAEHLER
SEI
COP ZW,$D01A
POKE 1,$30
CLI
ZAHLAUS ZAEHLER,125,56+32
SEI
POKE 1,$37
COP $D01A,ZW
POKE $D01A,0
CLI
LDA ZAEHLER
CMP #10 ;SCHON 10 ╞EHLER?
BNE NOCHMAL
JMP ABBRUCH ;JA -> ╙CHLUSS
;
; ** FERTIG **
:ABBRUCH
LDA ENABLE ;╙ENDEPUFFER
AND #1 ;LEER ?
BNE ABBRUCH
SEI
COP ZW,$D01A
POKE 1,$30
CLI
JSR IOINIT
LDA BSW
BNE NUNIV
LOADSET UNIV
:NUNIV
LDA #PLAINTEXT
PUTCHAR
POKE $2F,%11000000
RECVBOX 64,32,263,135
LDA FLAG1
BNE NFEHL
DIALBOX EMPFABGEBR
:NFEHL
INITIO
JMP DRENDE
;
; *** 6.2.1.1. ╪-═ODEM ╥ECEIVE ***
;
:RECEIVE
STX ZP29
COP CIA1+9,ZP28
:WEITWART
JSR GETIN
TAX
LDA #%00001000
BIT RS232ST
BEQ ZEICHDA
LDA CIA1+9
CMP ZP28 ;NEUE ╙EK. ?
BEQ WEITWART
STA ZP28
DEC ZP29 ;╙EKUNDENZAEHLER-1
BNE WEITWART
SEC ;KEIN ╘IMEOUT
RTS ;(╞EHLERFLAG SETZEN)
:ZEICHDA
TXA
PHA
LDA RS232ST
AND #%11010111 ;╞EHLER AUFGETRETEN ?
BEQ KEINF
POKE RS232ST,0
PLA
SEC ;╞LAG SETZEN
RTS
:KEINF
CLC ;╞LAG LOESCHEN
PLA
RTS
;
; **** ╥OUTINEN FUER ╔CONS ****
;
; *** ╨UFFERICON ***
;
:PUFFERRT
INVBOX 255,1,274,13 ;╔CON INVERTIEREN
LDA PUFFER
BNE SCHLIESSEN
POKE PUFFER,SET
RTS
:SCHLIESSEN
POKE PUFFER,CLEAR
RTS
;
; *** ╨╥╟-╔CON ***
;
:PRGRT
POKE ZW,80 ;" P "
RSTDIAL $12
;
; *** ╙┼╤-╔CON ***
;
:SEQRT
POKE ZW,83 ;" S "
RSTDIAL $12
;
; *** ╒╙╥-╔CON ***
:USRRT
POKE ZW,85 ;" U "
RSTDIAL $12
;
; ************************
; *** ╘ABELLEN, ═ENUES ***
;
IN 84GT.MENUES
;
; *****************
; *** ╞ILENAMEN ***
;
:GEOTERM
B "GEO╘ERM",NULL
;
:TEXTSCRAP
B "╘EXT ╙CRAP",NULL
;
; **********************
; *** SONSTIGE ╘EXTE ***
;
:EMPFTXT
B BOLDON,"┼MPFANGEN UEBER ╪-═ODEM:",CR,CR
GOTOX 80
B "╞ILE:",CR
GOTOX 80
B "┬LOECKE:",CR
GOTOX 80
B "╞EHLER:",NULL
;
TEXTENDE
;
; *************
; *** ─ATEN ***
;
; ** ┌EIGER FUER ╟EOS 1.2 / 1.3 **
:OLDNMI
W 0 ;EHEMALIGER ╬═╔-┌EIGER
:LAHMMAIN
W 0 ;┌EIGER AUF ╔NIT-╘ABELLE FUER ═AIN (LAHM)
:RESETMAIN
W 0 ; '' AUF '' '' ═AIN (LEBEND)
;
; ** ┼INSTELLUNGEN FUER ┬╙╫/╒NIVERSITY **
:CRHOEHE
B 9 ;╚OEHE DES ├URSORS
:TOP
B 22 ;OBERSTE ╘EXTPOS.
;
;
:NAMDR
B 13
;
:INITSTR
B "I"
;
;
:TEXTX
B 0,0 ;╘EXTKOORD.
:TEXTY
B 0
:FLAG1
B 0 ;╬EUSTART VON ┴CCESS?
:FLAG2
B 0 ;╫ECHSEL ╒NTER UND ╚AUPTMENUE?
:FLAG3
B 0 ;╨ARAMETER LESEN/SETZEN VON ╥╘ 2.1.
:FLAG4
B 0 ;╘EXT-╙CRAP/╙EQ.-╞ILE SENDEN
:FLAG5
B 0 ;─ISK/─RUCKERZUGRIFF
:FLAG6
B 0 ;─ISK INITIALISIEREN?
:ZW
B 0 ;┌WISCHENSP. FUER $D01A
:ZEICHEN
B 0 ; '' FUER ┌EICHEN
:ZGBREITE
B 0 ;┌EIGER AUF ┌EICHENBREITEN
:VEKGETBLK
S 3 ;╓EKTOR AUF ╟┼╘┬╠╦
:SPUR
B 0
:SEKTOR
B 0 ;┌WISCHENSPEICHER FUER ╙EKTORNR.
:READPAR
S 4 ; '' FUER ╥┼┴─┬┘╘┼-╨ARAM.
:ZAEHLER
B 0 ;┌AEHLER FUER ╓ERZOEGERUNG
:BLOCKNR
B 0 ;AKT.┬LOCKNR. BEI ╪-═ODEM
:CHKSUM
B 0
:PUFFER
B CLEAR ;╞LAG FUER ╨UFFER AN/AUS
:BOTTOM
W $6000 ;UNTERE ╟RENZE DES ╨UFFERS
;
; ** ┌EIGER AUF ╘EXTE MIT ╙TERN **
;
:BAUD
W MTEXT2214-TEXTE
:DATENB
W MTEXT2224-TEXTE
:PARIT
W MTEXT2231-TEXTE
:STOPB
W MTEXT2241-TEXTE
:DUPL
W MTEXT2251-TEXTE
;
; ** ┼INSTELLBARE ╨ARAMETER **
;
:FADR
B 6,0 ;╞ILENAME FUER ╥╙-232
:BSW
B SET ;┬╙╫ EIN/AUS
:ECHO
B CLEAR ;╞LAG FUER ┼CHO AN/AUS
:SPEED
B SET ;╘EMPO BEI ╞ILEUEBERTRAGUNG (╞LAG)
:CRUNTER
B CLEAR ;├╥ BEIM ┴╙├╔╔-╙ENDEN UNTERDRUECKEN
:KONVERT
B SET ;╘EXT VORM ╙ENDEN KONVERTIEREN
:GERAET
B 4 ;╟ERAETEADR. DES ─RUCKERS
:SEKUNDAER
B 7 ;╙EKUNDAERADR. DES ─RUCKERS
:ASCII
B CLEAR ;┴SCII JA/NEIN (BEIM ─RUCKEN)
:DRUCKLF
B CLEAR ;╞LAG FUER ╠╞ AUF ─RUCKER AN/AUS
;
; ** ╨UFFER, ... **
;
:NAMLAENG
ORG *+1
:EBUF
ORG *+256
:ABUF
ORG *+256
:BREITEN
ORG *+256
:DISKNAM
ORG *+18 ;╬AME DER ALTEN ─ISK
;
; *** ╨ROGRAMMNAMEN DER ╚ILFSPRG. ***
;
:PRG1
ORG *+17
:PRG2
ORG *+17
:PRG3
ORG *+17
:PRG4
ORG *+17
:PRG5
ORG *+17
:PRG6
ORG *+17
:PRG7
ORG *+17
:PRG8
ORG *+17
:UNIV
ORG *+512
:FILEPUFFER
ORG *+255
:GRENZE