* VT52-Terminal-Emulator * Jens Mller 1991 * Es werden alle alphanumerischen-, Kursor- und alle Funktionstasten * sowie Escape und Home gesendet OUTPUT .ACC include "D:\GEMMACRO.S" include "D:\GEMDOS_N.S" esc equ 27 section text move.l #mystack,sp appl_init move.w d0,ap_id menu_register ap_id,#mymenu move.w #1,duplex * 1=Voll, 2=Halb * Hauptschleife, auf Message warten wait_for_event evnt_mesag #messagebuf move.l #messagebuf,a0 move.w (a0),d0 cmp.w #40,d0 bne.s wait_for_event graf_mouse #256 * Maus ausschalten call_xbios Physbase * Bildschirm auf andere addq.l #2,sp * Adresse schalten move.l d0,phys_screen call_xbios Logbase addq.l #2,sp move.l d0,log_screen move.w #-1,-(sp) pea acc_screen pea acc_screen call_xbios Setscreen lea $C(sp),sp pea titel call_gemdos Cconws addq.l #6,sp input_loop bsr.w receive move.w #2,-(sp) call_bios Bconstat addq.l #4,sp tst.w d0 beq.s input_loop move.w #2,-(sp) call_bios Bconin addq.l #4,sp tst.b d0 beq.s inp1 bsr.w send_char bra.s input_loop inp1 swap d0 * Scanncode in unteren 8 Bits cmp.b #$62,d0 beq.s help_pressed cmp.b #$61,d0 beq.w undo_pressed cmp.b #$47,d0 bne.s inp2 * Test auf CLEAR move.w d0,d4 * (Shift+Home) move.w #-1,-(sp) call_bios Kbshift addq.l #4,sp exg d0,d4 and.w #%11,d4 * Test auf Shift beq.s inp2 move.w #esc,d0 bsr.w send_char move.w #'E',d0 bsr.w send_char bra.s input_loop inp2 lea key_tab(pc),a6 * Sondertaste lt. Tabelle inp3 tst.b (a6) * Tabellenende? beq.s input_loop cmp.b (a6)+,d0 beq.s inp5 inp4 tst.b (a6)+ * n„chsten Eintrag suchen bne.s inp4 bra.s inp3 inp5 move.w #esc,d0 bsr.w send_char * gefunden inp6 move.b (a6)+,d0 tst.b d0 beq.w input_loop bsr.w send_char bra.s inp6 help_pressed bsr.w crs_off graf_mouse #257 * Maus einschalten form_alert duplex,#t_duplx move.w int_out,duplex graf_mouse #256 * Maus ausschalten bsr.w crs_on bra.w input_loop undo_pressed bsr.w crs_off graf_mouse #257 form_alert #1,#t_end move.w int_out,-(sp) graf_mouse #256 bsr.w crs_on cmp.w #1,(sp)+ bne.w input_loop pea t_acc_close call_gemdos Cconws addq.l #6,sp move.w #-1,-(sp) move.l phys_screen,-(sp) * Bildschirmaddresse move.l log_screen,-(sp) * zurckschalten call_xbios Setscreen lea $C(sp),sp graf_mouse #257 * Maus wieder anschalten bra.w wait_for_event send_char move.w d0,-(sp) and.w #$FF,d0 move.w d0,d7 cmp.w #2,duplex * Halbduplex? bne.s send1 move.w d0,-(sp) * Ausgabe auf Bildschirm move.w #2,-(sp) * bei Halbduplex call_bios Bconout addq.l #6,sp send1 bsr.s receive move.w #1,-(sp) call_bios Bcostat addq.l #4,sp tst.w d0 beq.s send1 move.w d7,-(sp) move.w #1,-(sp) call_bios Bconout addq.l #6,sp move.w (sp)+,d0 rts receive move.w d0,-(sp) rec1 move.w #1,-(sp) * Anzeige aller empfangenen call_bios Bconstat * Zeichen addq.l #4,sp tst.w d0 beq.s rec2 move.w #1,-(sp) call_bios Bconin addq.l #4,sp and.w #$FF,d0 move.w d0,-(sp) move.w #2,-(sp) call_bios Bconout addq.l #6,sp bra.s rec1 rec2 move.w (sp)+,d0 rts crs_on pea t_crson bra.s crs1 crs_off pea t_crsoff crs1 call_gemdos Cconws addq.l #6,sp rts section data mymenu dc.b ' VT52-Terminal',0 titel dc.b esc,'E',esc,'v',esc,'q',esc,'e' dc.b '******************************',13,10 dc.b '* VT52-Terminal-Emulator 1.0 *',13,10 dc.b '* (c) Jens Mller 1991 *',13,10 dc.b '******************************',13,10 dc.b 'HELP: Duplexeinstellung',13,10 dc.b 'UNDO: Programm beenden',13,10,0 t_end dc.b '[2][ | Programm beenden ? ][Ja| Nein ]',0 t_duplx dc.b '[2][ | Welche Duplex- | šbertragungsart ? ]' dc.b '[ Voll | Halb ]',0 t_acc_close dc.b esc,'w' t_crsoff dc.b esc,'f',0 t_crson dc.b esc,'e',0 * Tastentabelle fr auszuwertende Sondertasten * 1. Eintrag: Scanncode Sondertaste * alle weiteren Eintr„ge bis $00 werden nach einem Escape gesendet key_tab dc.b $47,'H',0 * Home dc.b $48,'A',0 * Crs_up dc.b $50,'B',0 * Crs_down dc.b $4B,'D',0 * Crs_left dc.b $4D,'C',0 * Crs_right dc.b $3B,'P',0 * F1 dc.b $3C,'Q',0 * F2 dc.b $3D,'R',0 * F3 dc.b $3E,'S',0 * F4 dc.b $3F,'?p',0 * F5 dc.b $40,'?q',0 * F6 dc.b $41,'?r',0 * F7 dc.b $42,'?s',0 * F8 dc.b $43,'?t',0 * F9 dc.b $44,'?u',0 * F10 section bss ap_id ds.w 1 messagebuf ds.b 16 duplex ds.w 1 even phys_screen ds.l 1 log_screen ds.l 1 acc_screen ds.b 32256 even ds.l 200 mystack ds.w 1 include "D:\AESLIB.S" end