;================================================ ; ROM-BASIC ; File: BASIC.S ; Stand: 27.06.89 ;=============================================== *L OFF ;********************************************************** ; externals aus BIC_SYS ;********************************************************** ZG equ 4 CPSTX equ 8 TCHAR equ 10H CHARO equ 18H CPREG equ 20H TYPTST equ 28H SPRRES equ 69H BANKPO equ 0A8H L3CALL equ 1CH TAFCB equ 14AH EDI1 equ 0AEH STPTST equ 0BAH LATXTM equ 0D2H EDI2 equ 0B1H BREAK equ 0BDH GETST equ 0B4H TPPOS equ 10EH MKPMA equ 111H SPOINT equ 120H STAINK equ 11AH LDPMA equ 114H FILL equ 123H STPMA equ 117H GPOINT equ 11DH PAIUP1 equ 129H APUP equ 105H PAIUP2 equ 12CH PAIUP3 equ 12FH APDWN equ 10BH LDELLI equ 126H WMOFF equ 0F0H OUTBYT equ 0EDH MOFF equ 0E7H OUTVT equ 0EAH INBYTE equ 0E4H INVT equ 0E1H MUR2 equ 153H MUR1 equ 150H BANKUM equ 24H MUZELV equ 99H MU1D equ 0F6H MUINIT equ 90H MUPUW equ 0F9H LREB equ 0CH TXTGSC equ 08DH BKEYAN equ 0C9H FTINI equ 03EH MUINI equ 03BH INBCDE equ 59H KEYOFF equ 0CCH GPAD equ 0DBH GSTICK equ 0D8H GPDL equ 0DEH GSTRIG equ 0D5H ZCLS equ 0C3H CRSPOS equ 0C6H MOTST equ 0F3H MUOTAE equ 093H CHRTST equ 0ABH KEYON equ 0CFH OUTBCA equ 56H OTBCDE equ 5CH SELSCR equ 5FH DTMABF equ 141H SETPAP equ 171H SETPAL equ 16EH SETBOR equ 165H KOMSCR equ 174H WRZEMU equ 177H PUTSPR equ 17AH BSINIT equ 168H APRGT1 equ 0FCH APLFT1 equ 0FFH APDWN1 equ 108H VFTINI equ 15CH TGRASC equ 16BH RDVRM equ 4AH WRTVRM equ 4DH SCR0 equ 6Ch MONTV equ 17DH external INKEY RDRIPU OUTASC PRTOUT external PRSTA ;============================================= ; globals fuer BIC_SYS und BIC_DSK ;============================================= global AC1HLT global AC1IHL global ADD8 global ADRDE0 global ADRTDE global ADTDE global AUSGE global AUZN global BNKTS9 global BYTAE1 global BYTAE2 global BYTAE3 global CDBL global CDBL1 global CHR2 global CINT global CINT1 global CLOSE1 global CLOSEA global DATNA global DIM1 global DIV8 global ERALOP global ERBFNA global ERBFNR global ERFC global ERFIOV global ERINPE global ERINT global ERNTFO global ERNTOP global ERRO global ERSN global ERTM global FCBAD global FCBBE5 global FN7 global GERDS global HAUZN global HLAC1T global INIBA global INIT2 global INKUEB global INKUP global INT0 global INTDE2 global INTPA2 global KOM7 global LDELLI global LEERZK global LINP14 global LSTRE1 global LSTRES global MLT4 global MLT8HL global MOERR0 global NEW2 global NLDIRT global OPEN4 global OUTZK global POS1 global POS2 global PTNEW global REN10 global RUNMOD global SNAL1 global SNAL3 global SUB8 global TCHAR0 global TCHARD global TSTZK global TYPTS0 global JCPSTX global JTYPTS global JTCHAR global WIUEB global WLAZK1 global XYUEB global XYUEB1 global ZKUP18 global ZKUP2 global JBAINI global ERDEVI global STOP1 global ERRO3 global CHRO98 global BPA1IW global YTAUS1 *L ON ;============================================= JBAINI jp INIT JCPSTX jp CPSTX0 JTCHAR jp TCHAR0 JTYPTS jp TYPTS0 ; ARITHMETIK 8 BYTES SUB8 ld hl,AC2 ld a,(hl) or a ret z xor 80H ld (hl),a jr ADD81 ; ADD80 call HLAC2T ADD8 ld hl,AC2 ld a,(hl) or a ret z ADD81 and 7FH ld b,a ld de,AC1 ld a,(de) or a jp z,AC21T and 7FH sub b jr nc,ADD83 cpl inc a push af push hl ld b,8 ADD82 ld a,(de) ld c,(hl) ld (hl),a ld a,c ld (de),a inc de inc hl djnz ADD82 pop hl pop af ADD83 cp 10H ret nc push af xor a ld (ARIBU),a ld (HLPCNV),a ld hl,AC2+1 pop af call ADD8O ld hl,AC2 ld a,(AC1) xor (hl) jp m,ADD84 ld a,(HLPCNV) ld (ARIBU),a call ADD8E jp nc,ADD8B ex de,hl ld a,(hl) inc (hl) xor (hl) jp m,EROV call ADD8S set 4,(hl) jr ADD8B ADD84 call ADD8H ADD85 ld hl,AC1+1 ld bc,800H ADD86 ld a,(hl) or a jr nz,ADD87 inc hl dec c dec c djnz ADD86 jp NULAC1 ADD87 and 0F0H ;PLUSTOK jr nz,ADD88 push hl call ADD8L pop hl dec c ADD88 ld a,8 sub b jr z,ADD8A push af push bc ld c,b ld de,AC1+1 ld b,0 ldir pop bc pop af ld b,a xor a ADD89 ld (de),a inc de djnz ADD89 ADD8A ld a,c or a jr z,ADD8B ld hl,AC1 ld b,(hl) add a,(hl) ld (hl),a xor b jp m,EROV ret z ADD8B ld hl,ARIBU ld b,7 ADD8C ld a,(hl) cp 'P' ret c dec hl xor a scf ADD8D adc a,(hl) daa ld (hl),a ret nc dec hl djnz ADD8D ld a,(hl) inc (hl) xor (hl) jp m,EROV inc hl ld (hl),10H ret ADD8E ld hl,AC2+7 ld de,AC1+7 ld b,7 ADD8F xor a ADD8G ld a,(de) adc a,(hl) daa ld (de),a dec de dec hl djnz ADD8G ret ADD8H ld hl,HLPCNV ld a,(hl) cp 'P' jr nz,ADD8I inc (hl) ADD8I ld de,ARIBU ld b,8 xor a ADD8J ld a,(de) sbc a,(hl) daa ld (de),a dec de dec hl djnz ADD8J ret nc ex de,hl ld a,(hl) xor 80H ld (hl),a ld hl,ARIBU ld b,8 xor a ADD8K ld a,0 sbc a,(hl) daa ld (hl),a dec hl djnz ADD8K ret ADD8L ld hl,ARIBU ADD8M push bc xor a ADD8N rld dec hl djnz ADD8N pop bc ret ADD8O or a rra push af or a jp z,ADD8U push af cpl inc a ld c,a ld b,0FFH ld de,7 add hl,de ld d,h ld e,l add hl,bc ld a,8 add a,c ld c,a push bc ld b,0 lddr pop bc pop af inc hl inc de push de ld b,a xor a ADD8P ld (hl),a inc hl djnz ADD8P pop hl pop af ret nc ld a,c ADD8Q push hl push bc ld b,a xor a ADD8R rrd inc hl djnz ADD8R pop bc pop hl ret ADD8S ld hl,AC1+1 ADD8T ld a,8 jr ADD8Q ADD8U pop af ret nc jr ADD8T ; MLT8 call TVORZ ret z ld a,(AC2) or a jp z,NULAC1 ld b,a ld hl,AC1 xor (hl) and 80H ld c,a res 7,b ld a,(hl) and 7FH add a,b ld b,a ld (hl),0 and 0C0H ret z cp 0C0H jr nz,MLT81 jp EROV MLT81 ld a,b add a,'@' and 7FH ret z or c dec hl ld (hl),a ld de,HLPRND+7 ld bc,8 ld hl,AC1+7 push de lddr inc hl xor a ld b,8 MLT82 ld (hl),a inc hl djnz MLT82 pop de ld bc,MLT8A push bc MLT83 call MLT8B push hl ld bc,8 ex de,hl lddr ex de,hl ld hl,ARIBU+3FH ld b,8 call ADD8F pop de call MLT8B ld c,7 ld de,AC2+7 MLT84 ld a,(de) or a jr nz,MLT85 dec de dec c jr MLT84 MLT85 ld a,(de) dec de push de ld hl,ARIBU+15 MLT86 add a,a jr c,MLT88 jr z,MLT89 MLT87 ld de,8 add hl,de jr MLT86 MLT88 push af ld b,8 ld de,AC1+7 push hl call ADD8F pop hl pop af jr MLT87 MLT89 ld b,0FH ld de,ARIBU+6 ld hl,ARIBU+7 call NLDDR ld (hl),0 pop de dec c jr nz,MLT85 ret MLT8A dec hl ld a,(hl) inc hl ld (hl),a jp ADD85 MLT8B ld hl,-8 add hl,de ld c,3 MLT8C ld b,8 or a MLT8D ld a,(de) adc a,a daa ld (hl),a dec hl dec de djnz MLT8D dec c jr nz,MLT8C ret ; DIV8 ld a,(AC2) or a jp z,ERD0 ld b,a ld hl,AC1 ld a,(hl) or a jp z,NULAC1 xor b and 80H ld c,a res 7,b ld a,(hl) and 7FH sub b ld b,a rra xor b and '@' ld (hl),0 jr z,DIV82 ld a,b and 80H ret nz DIV81 jp EROV DIV82 ld a,b add a,'A' and 7FH ld (hl),a jr z,DIV81 or c ld (hl),0 dec hl ld (hl),a ld de,AC1+7 ld hl,AC2+7 ld b,7 xor a DIV83 cp (hl) jr nz,DIV84 dec de dec hl djnz DIV83 DIV84 ld (HARI2),hl ex de,hl ld (HARI1),hl ld a,b ld (HARI3),a ld hl,HLPRND DIV85 ld b,0FH DIV86 push hl push bc ld hl,(HARI2) ex de,hl ld hl,(HARI1) ld a,(HARI3) ld c,0FFH DIV87 inc c ld b,a push hl push de xor a ex de,hl DIV88 ld a,(de) sbc a,(hl) daa ld (de),a dec hl dec de djnz DIV88 ld a,(de) sbc a,b ld (de),a pop de pop hl ld a,(HARI3) jr nc,DIV87 ld b,a ex de,hl call ADD8F jr nc,DIV89 ex de,hl inc (hl) DIV89 ld a,c pop bc ld c,a push bc srl b inc b ld e,b ld d,0 ld hl,AC1-1 add hl,de call ADD8M pop bc pop hl ld a,b inc c dec c jr nz,DIV8E cp 0FH jr z,DIV8D rrca rlca jr nc,DIV8E push bc push hl ld hl,AC1 ld b,8 xor a DIV8A cp (hl) jr nz,DIV8C inc hl djnz DIV8A pop hl pop bc srl b inc b xor a DIV8B ld (hl),a inc hl djnz DIV8B jr DIV8H DIV8C pop hl pop bc ld a,b jr DIV8E DIV8D ld a,(HDIV) ld e,a dec a ld (HDIV),a xor e jp p,DIV85 jp NULAC1 DIV8E rra ld a,c jr c,DIV8F or (hl) ld (hl),a inc hl jr DIV8G DIV8F add a,a add a,a add a,a add a,a ld (hl),a DIV8G dec b jp nz,DIV86 DIV8H ld hl,ARIBU ld de,HLPRND+7 ld b,8 call NLDDR jp MLT8A ; COS ld hl,KP1591 call MLT8HL ld a,(AC1) and 7FH ld (AC1),a ld hl,KP25 call SUB8HL call ABS2 jr SIN1 ; SIN ld hl,KP1591 call MLT8HL SIN1 ld a,(AC1) or a call m,HIRO2 call AC1ST call INT call AC1AC2 call STAC1 call SUB8 ld a,(AC1) cp '@' jp c,SIN3 ld a,(AC1+1) cp '%' jp c,SIN3 cp 'u' ;KLEIN U jp nc,SIN2 call AC1AC2 ld hl,KP5 call IHLAC1 call SUB8 jp SIN3 SIN2 ld hl,K1 call IHLAC2 call SUB8 SIN3 ld hl,KTB4 jp HIRO3 ; TAN call AC1ST call COS call HIRO1 call SIN call STAC2 ld a,(AC2) or a jp nz,DIV8 jp EROV ; ATN ld a,(AC1) or a ret z call m,HIRO2 cp 'A' jp c,ATN1 call AC1AC2 ld hl,K1 call IHLAC1 call DIV8 call ATN1 call AC1AC2 ld hl,K1P570 call IHLAC1 jp SUB8 ATN1 ld hl,KP2679 call VGL8HL jp m,ATN2 call AC1ST ld hl,K1P732 call ADD8HL call HIRO1 ld hl,K1P732 call MLT8HL ld hl,K1 call SUB8HL call STAC2 call DIV8 call ATN2 ld hl,KP5235 jp ADD8HL ATN2 ld hl,KTB5 jp HIRO3 ; LOG call TVORZ jp m,ERFC jp z,ERFC ld hl,AC1 ld a,(hl) push af ld (hl),41H ld hl,K3P162 call VGL8HL jp m,LOG1 pop af inc a push af ld hl,AC1 dec (hl) LOG1 pop af ld (HARI4),a call AC1ST ld hl,K1 call ADD8HL call HIRO1 ld hl,K1 call SUB8HL call STAC2 call DIV8 call AC1ST call MLT8A1 call AC1ST call AC1ST ld hl,KTB3 call HIRO5 call HIRO1 ld hl,KTB2 call HIRO5 call STAC2 call DIV8 call STAC2 call MLT8 ld hl,KP8685 call ADD8HL call STAC2 call MLT8 call AC1ST ld a,(HARI4) sub 'A' ld l,a add a,a sbc a,a ld h,a call CV4BC1 call CDBL1 call STAC2 call ADD8 ld hl,K2P302 jp MLT8HL ; SQR call TVORZ ret z jp m,ERFC call AC1AC2 ld a,(AC1) or a rra adc a,' ' ld (AC2),a ld a,(AC1+1) or a rrca or a rrca and '3' add a,10H ld (AC2+1),a ld a,7 SQR1 ld (HARI4),a call AC1ST call AC2ST call DIV8 call STAC2 call ADD8 ld hl,KP5 call MLT8HL call AC1AC2 call STAC1 ld a,(HARI4) dec a jr nz,SQR1 jp AC2AC1 ; EXP ld hl,KP4342 call MLT8HL call AC1ST call CINT ld a,l rla sbc a,a cp h jr z,EXP2 ld a,h or a jp p,EXP1 call CDBL2 call STAC1 ld hl,K0 jp IHLAC1 EXP1 jp EROV EXP2 ld (HARI4),hl call CDBL call AC1AC2 call STAC1 call SUB8 ld hl,KP5 call VGL8HL push af jr z,EXP3 jr c,EXP3 ld hl,KP5 call SUB8HL EXP3 call AC1ST ld hl,KTB1 call HIRO3 call HIRO1 ld hl,KTB0 call HIRO4 call STAC2 call AC2ST call AC1ST call SUB8 ld hl,HLPRND call AC1IHL call STAC2 call STAC1 call ADD8 ld hl,HLPRND call IHLAC2 call DIV8 pop af jr c,EXP4 jr z,EXP4 ld hl,K3P162 call MLT8HL EXP4 ld a,(HARI4) ld hl,AC1 ld c,(hl) add a,(hl) ld (hl),a xor c ret p jp EROV ; RND call TVORZ ld hl,LSTRND jr z,RND1 call m,AC1IHL ld hl,HLPRND ld de,LSTRND call IDEIHL ld hl,KRND1 call IHLAC2 ld hl,KRND0 call IHLAC1 ld de,HLPRND+7 call MLT83 ld de,ARIBU ld hl,LSTRND+1 ld b,7 call NLDIR ld hl,LSTRND ld (hl),0 RND1 call IHLAC1 ld hl,AC1 ld (hl),'@' xor a ld (ARIBU),a jp ADD85 RND2 ld de,KRND2 ld hl,LSTRND jr IDEIHL ; HILFROUTINEN RECHNEN,UMLAD,VGL ADD8HL call IHLAC2 jp ADD8 SUB8HL call IHLAC2 jp SUB8 MLT8A1 ld hl,AC1 MLT8HL call IHLAC2 jp MLT8 DIV8HL call IHLAC2 jp DIV8 VGL8HL call IHLAC2 jp VGL8 AC1AC2 ld hl,AC1 IHLAC2 ld de,AC2 IHLIDE ex de,hl call IDEIHL ex de,hl ret AC2AC1 ld hl,AC2 IHLAC1 ld de,AC1 jr IHLIDE AC1LRN call CV4BC1 ld hl,LSTRND AC1IHL ld de,AC1 IDEIHL ld b,8 jp NLDIR HIRO1 pop hl ld (HLPPTR),hl call STAC2 call AC1ST call AC2AC1 ld hl,(HLPPTR) jp (hl) HIRO2 call ABS2 ld hl,ABS2 ex (sp),hl jp (hl) HIRO3 ld (HLPPTR),hl call AC1ST ld hl,(HLPPTR) call HIRO4 call STAC2 jp MLT8 HIRO4 ld (HLPPTR),hl call MLT8A1 ld hl,(HLPPTR) HIRO5 ld a,(hl) push af inc hl push hl ld hl,HLPPTR call AC1IHL pop hl call IHLAC1 HIRO6 pop af dec a ret z push af push hl ld hl,HLPPTR call MLT8HL pop hl call IHLAC2 push hl call ADD8 pop hl jr HIRO6 AC2ST ld hl,AC2+7 jr AC1ST1 AC1ST ld hl,AC1+7 AC1ST1 ld a,4 pop de AC1ST2 ld b,(hl) dec hl ld c,(hl) dec hl push bc dec a jr nz,AC1ST2 ex de,hl jp (hl) STAC2 ld hl,AC2 jr STAC11 STAC1 ld hl,AC1 STAC11 ld a,4 pop de STAC12 pop bc ld (hl),c inc hl ld (hl),b inc hl dec a jr nz,STAC12 ex de,hl jp (hl) ; BCD-KONSTANTEN KRND0 defb 0 defb 14h defb 38h ;`8` defb 98h defb 20h defb 42h ;`B` defb 8h defb 21h ;`!` KRND1 defb 0 defb 21h ;`!` defb 13h defb 24h ;`$` defb 86h defb 54h ;`T` defb 5h defb 19h KRND2 defb 0 defb 40h ;`@` defb 64h ;`d` defb 96h defb 51h ;`Q` defb 37h ;`7` defb 23h ;`#` defb 58h ;`X` KP4342 defb 40h ;`@` defb 43h ;`C` defb 42h ;`B` defb 94h defb 48h ;`H` defb 19h defb 3h defb 24h ;`$` KP5 defb 40h ;`@` defb 50h ;`P` K0 defb 0 defb 0 defb 0 defb 0 defb 0 defb 0 defb 0 defb 0 K1 defb 41h ;`A` defb 10h defb 0 defb 0 defb 0 defb 0 defb 0 defb 0 KP25 defb 40h ;`@` defb 25h ;`%` defb 0 defb 0 defb 0 defb 0 defb 0 defb 0 K3P162 defb 41h ;`A` defb 31h ;`1` defb 62h ;`b` defb 27h ;`'` defb 76h ;`v` defb 60h ;``` defb 16h defb 84h KP8685 defb 40h ;`@` defb 86h defb 85h defb 88h defb 96h defb 38h ;`8` defb 6h defb 50h ;`P` K2P302 defb 41h ;`A` defb 23h ;`#` defb 2h defb 58h ;`X` defb 50h ;`P` defb 92h defb 99h defb 40h ;`@` K1P570 defb 41h ;`A` defb 15h defb 70h ;`p` defb 79h ;`y` defb 63h ;`c` defb 26h ;`&` defb 79h ;`y` defb 49h ;`I` KP2679 defb 40h ;`@` defb 26h ;`&` defb 79h ;`y` defb 49h ;`I` defb 19h defb 24h ;`$` defb 31h ;`1` defb 12h K1P732 defb 41h ;`A` defb 17h defb 32h ;`2` defb 5h defb 8h defb 7h defb 56h ;`V` defb 89h KP5235 defb 40h ;`@` defb 52h ;`R` defb 35h ;`5` defb 98h defb 77h ;`w` deªªªª