;**************************************************** ;* GRAF.Z80 * ;* * ;* - TESTET OB PLATZ UEBER TPA TAUGLICH FUER * ;* GRAFIK-ROUTINE * ;* - ENTHAELT PIXEL-XY-KOORDINATEN-ANSTEUERUNG * ;* UND KOPIERT DIESE UEBER TPA * ;* - ROUTINE VON BASIC UND TURBO-PASCAL AUFRUFBAR * ;* - ZEIGT EINSPRUNG-ADRESSEN FUER BASIC UND * ;* TURBO-PASCAL MIT JEWEILIGER LOKIG AN * ;* - TESTET AUF GUELTIGE XY-WERTE * ;**************************************************** WBOOT EQU 0 ;WARMSTART BDOS EQU 5 ;BDOS AUFRUF PRT EQU 2 ;PRINT CHARACTER LF EQU 0DH CR EQU 0AH PRSTR EQU 9 ;PRINT STRING MVFLAG EQU 0FFH ;MOVE FLAG = NICHT RESIDENT MVOFFS EQU 0EH ;MOVE-FLAG-OFFSET IN RSX NEXT EQU 0BH ;NAECHSTE RSX COMMON EQU 0C0H ;COMMON-BASE C000 OFFSET EQU 020H ;ROUTINE-OFFSET VON TPA ORG 0100H ;*************************************** ;* TEST AUF RICHTIGEN SPEICHER-BEREICH * ;*************************************** LD HL,(6) ;HOLE TPA IN HL LD A,H CP COMMON ;TPA UNTER COMMON ? JR C,NO_COM ;JA, NICHT KOPIEREN ;************************************ ;* KOPIERE GRAFIK-ROUTINE UEBER TPA * ;************************************ LD D,H ;ZIEL GLEICH TPA LD E,OFFSET ;PLUS OFFSET LD HL,BAS_IN ;START DER ROUTINE LD BC,PRHEX-BAS_IN ;LAENGE DER ROUTINE LDIR ;KOPIERE NACH OBEN ;************************************** ;* GEBE ALTE UND NEUE TPA-GRENZEN AN * ;************************************** LD DE,TPAALT ;MELDUNG UEBER ALTEN TPA LD C,PRSTR ;GEBE AUS CALL BDOS LD HL,(6) ;NEUER TPA PUSH HL ;SICHERE LD L,NEXT ;ALTE TPA PAGE LD A,(HL) CP 0F3H ;NUR LOADER BASE ? JR C,PTPA ;NEIN ACCU RICHTIG LD A,0F6H ;BDOS BASE PTPA: CALL PRHEX ;GEBE AUS LD A,0 CALL PRHEX ;IMMER PAGE-WEISE LD DE,TPANEU ;MELDUNG NEUER TPA LD C,PRSTR ;GEBE AUS CALL BDOS POP HL ;AKTUELLEN TPA PUSH HL LD A,H ;GEBE AUS CALL PRHEX LD A,0 CALL PRHEX ;************************************************ ;* AUSGABE DER BASIC UND TURBO-PASCAL-EINSPRUNG * ;* ADRESSEN * ;************************************************ LD DE,BA_MSG ;MELDUNG BASIC EINSPRUNG LD C,PRSTR ;AUSGABE CALL BDOS POP HL ;HOLE TPA LD L,OFFSET ;BEGINN GRAFIK-ROUTINE PUSH HL ;SICHERE START-ADRESSE LD A,H CALL PRHEX ;OBERES BYTE POP HL PUSH HL LD A,L CALL PRHEX ;UNTERES BYTE LD DE,T_MSG ;MELDUNG TURBO-PASCAL LD C,PRSTR ;AUSGABE CALL BDOS POP HL ;ANFANGSADRESSE PUSH HL ;SICHERE LD A,H ;AUSGABE OBERES BYTE CALL PRHEX POP HL LD A,L ;BASIC-ADRESSE ADD A,TUR_IN-BAS_IN ;ADDIERE ADRESS-DIFF. CALL PRHEX ;GEBE SIE AUS ;***************************** ;* AUSGABE DER AUFRUF-LOGIK * ;***************************** LD DE,LOGIK ;LOGIK MELDUNG LD C,PRSTR CALL BDOS ;GEBE SIE AUS JP WBOOT ;RUECKSPRUNG ZU CP/M ;************************************************ ;* LOESCHEN DER ANGEFUEGTEN, RESIDENTEN RSX UND * ;* RUECKSPRUNG ZU CP/M * ;************************************************ NO_COM: LD L,MVOFFS ;HL AUF MOVE FLAG LD (HL),MVFLAG ;NICHT RESIDENT LD DE,MSG_CO ;GEBE MELDUNG AUS LD C,PRSTR CALL BDOS JP WBOOT ;AKTIVIERE CCP ;******************************************** ;* GRAFIK-ROUTINE , AUFRUFBAR VON BASIC UND * ;* TURBO-PASCAL * ;******************************************** BAS_IN: EX DE,HL ;BASIC EINSPRUNG LD C,(HL) INC HL LD B,(HL) ;Y-WERT IN BC EX DE,HL LD E,(HL) INC HL LD D,(HL) ;X-WERT IN DE JR CONTRL ;XY-PRUEFUNG ORG BAS_IN+010H ;UEBERSICHTLICH TUR_IN: POP HL ;TURBO-PASCAL-EINSPRUNG POP BC POP DE PUSH HL ;RUECKSPRUNGADRESSE CONTRL: LD A,B ;TEST AUF CP 0 ;BC < 256 UND DE < 720 JR NZ,MAIN_1 LD A,D CP 3 JR NC,MAIN_1 CP 2 JR NZ,MAIN LD A,E CP 0D0H JR NC,MAIN_1 MAIN: DI ;INTERUPT SCHALTET ;AUF BANK 1 LD A,081H ;BANK 0 VON 4000 OUT (0F1H),A ;BIS BFFF LD A,082H OUT (0F2H),A LD HL,0B600H ;HL ROLLER-RAM ANFANG ADD HL,BC ;HL AUF PIXELZEILE ADD HL,BC LD C,(HL) ;INHALT IN BC INC HL LD B,(HL) LD H,B ;ADRESSE IN HL LD L,C LD A,0F8H ;OFFSET GLEICH 1.PIXEL- AND L ;ZEILE DER FELDZEILE LD L,A ADD HL,BC ;ADDIERE OFFSET LD A,E ;NUN DIE PIXELSPALTE RES 0,E ;ALLE 8 PIXELPUNKTE RES 1,E ;EIN BYTE WEITER RES 2,E ADD HL,DE ;ADRESSE IN HL LD E,7 ;IGNORIERE > 7 AND E ;POSITION 0 .. 7 LD E,A ;SICHERE IN E INC E ;SONST FEHLT EINS LD A,080H ;PIXEL BEI 1 (LINKS) MAIN_0: RRCA ;EIN PIXEL NACH RECHTS DEC E ;ERNIEDRIGE POS.-ZAEHLER JR NZ,MAIN_0 ;BIS PIXELNUMMER STIMMT RLCA ;EINS ZURUECK (LINKS) OR (HL) ;NICHT LOESCHEN LD (HL),A ;ZEICHNE PIXEL MAIN_1: LD A,086H ;ZURUECK AUF BANK 1 OUT (0F2H),A LD A,085H OUT (0F1H),A EI ;INTERUPT EIN RET ;************************************* ;* HEX - ASCII WANDLUNG DES ACCU MIT * ;* AUSGABE AUF DEM BILDSCHIRM * ;************************************* PRHEX: LD B,A ;SICHERE ACCU AND 0F0H ;MOST SIGN. NIBBLE RRCA RRCA RRCA RRCA CALL CONVRT ;HEX IN ASCII CALL OUTPUT ;GEB ES AUS LD A,B ;HOLE ACCU ZURUECK AND 0FH ;LOWER SIGN. NIBBLE CALL CONVRT ;HEX IN ASCII CALL OUTPUT ;GEB ES AUS RET CONVRT: CP 0AH ;ZIFFERN 0 - 9 JR NC,CONV_1 ;NEIN DANN A - F ADD A,030H RET CONV_1: ADD A,037H RET OUTPUT: PUSH BC ;SICHERE REGISTER LD E,A LD C,PRT ;GEBE EIN ZEICHEN AUS CALL BDOS POP BC ;WIEDER HERSTELLEN RET ;********************** ;* BILDSCHIRMAUSGABEN * ;********************** MSG_CO: DEFM 'Obere TPA-Grenze unter Hex :' DEFM 'C100 !' DEFB LF,CR DEFM 'Grafik-Routine schaltet den' DEFM 'Bereich von Hex 4000 bis C000' DEFB LF,CR DEFM 'auf Bank 0 um.' DEFB LF,CR DEFM 'Vor Neuaufruf TPA auf mind.' DEFM ' Hex C100 erhoehen ...$' TPAALT: DEFB LF,CR DEFM '256 Byte RSX wird unter TPA ' DEFM 'geladen.' DEFB LF,CR DEFM 'alter TPA bei Hex : $' TPANEU: DEFB LF,CR DEFM 'neuer TPA bei Hex : $' BA_MSG: DEFB LF,CR DEFM 'Grafik-Routine in freien RSX-' DEFM 'Raum kopiert.' DEFB LF,CR,LF,CR DEFM 'Aufruf der Maschinen-Routine ' DEFM 'unter' DEFB LF,CR DEFM 'Basic bei Adresse Hex : $' T_MSG: DEFB LF,CR DEFM 'Turbo-Pascal Adresse Hex : $' LOGIK: DEFB LF,CR,LF,CR DEFM 'Syntax : - call Adresse(x%,y%)' DEFB LF,CR DEFM ' - procedure xy_plot(x,y' DEFM ':integer);external Adresse' DEFB LF,CR DEFM '$' END