;**********************************************************************; ;* A T O M I C W I N D O W S *; ;*--------------------------------------------------------------------*; ;* doel : hardware afhankelijke routines *; ;*--------------------------------------------------------------------*; ;* filenaam : HLP10PC.INC *; ;* auteur : Kees van Oss *; ;* conversie : Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : juli 1997 *; ;* laatste update : 28 januari 1998 *; ;*--------------------------------------------------------------------*; ;* wijzigingen : v10 - Ruimte bespaart door JSR,RTS -> JMP *; ;*--------------------------------------------------------------------*; ;* assembleren : opnemen als include file in AWPC.ASM *; ;*--------------------------------------------------------------------*; ;* oproep : - *; ;**********************************************************************; sprite ; SUBROUTINE SPRITE X,Y,A =============================== spr_data equ data spr_pos_xl equ data+1 spr_pos_xh equ data+2 spr_pos_yl equ data+3 spr_pos_yh equ data+4 STA spr_data ; Save data TXA PHA TYA PHA STX spr_pos_xl ; Zet positie in werkruimte STY spr_pos_yl JSR mouse_off LDA #0 STA spr_pos_xh STA spr_pos_yh LDX #spr_pos_xl ; Vermenigvuldig X en Y met 8 JSR mul8 JSR setsem ; Zet semafoor LDY #gtext_attr-pccomtab; Laadt commando pointer LDX #3 ; Laadt commando lengte JSR pccom ; Stuur pccommando LDA store_style ; Stuur attribuut naar PC ORA #$80 ; Font halve hoogte JSR zendbyte ; Stuur data LDY #writeln-pccomtab ; Laadt commando pointer LDX #2 ; Laadt commando lengte JSR pccom ; Stuur pccommando LDX #0 ; Stuur coordinaten naar pc sprite_pos LDA spr_pos_xl,x ; Lees coordinaat data JSR zendbyte INX CPX #4 BNE sprite_pos LDA spr_data JSR zendbyte ; Stuur data LDA #0 ; Sluit string af JSR zendbyte JSR clrsem ; Geef semafoor vrij JSR mouse_on PLA ; Herstel registers TAY PLA TAX LDA spr_data RTS kader ; SUBROUTINE KADER X,Y,B,H ============================== kad_pos_xlol equ data+5 kad_pos_xloh equ data+6 kad_pos_ylol equ data+7 kad_pos_yloh equ data+8 kad_pos_xrbl equ data+9 kad_pos_xrbh equ data+10 kad_pos_yrbl equ data+11 kad_pos_yrbh equ data+12 kad_modus equ data+13 LDA #2 ; Zet kader modus (niet vullen) STA kad_modus _block TXA ; Bewaar X,Y PHA TYA PHA CLC ; Zet parameters in coordinatentabel LDA x_tmp STA kad_pos_xlol ADC b_tmp STA kad_pos_xrbl CLC LDA y_tmp STA kad_pos_yrbl ADC h_tmp STA kad_pos_ylol _focus LDA #0 STA kad_pos_xloh STA kad_pos_xrbh STA kad_pos_yloh STA kad_pos_yrbh LDX #kad_pos_xlol ; Bereken schermcoordinaten JSR mul8 LDX #kad_pos_xrbl JSR mul8 JSR mouse_off JSR setsem ; Geef pc commando XBLOCK .... LDX #2 LDY #xblock-pccomtab JSR pccom LDX #0 LDA kad_modus ; Stuur modus (vullen/open) naar pc JSR zendbyte kader_loop LDA kad_pos_xlol,x ; Stuur coordinaten naar de pc JSR zendbyte INX CPX #8 BNE kader_loop JSR clrsem JSR mouse_on PLA ; Restore X,Y TAY PLA TAX RTS focus ; SUBROUTINE FOCUS X,Y,B,H ============================== TXA ; Bewaar X,Y PHA TYA PHA JSR setsem ; zet semafoor LDX #10 ; Zet inverterende stippel modus LDY #focus_on-pccomtab JSR pccom JSR clrsem ; geef semafoor vrij LDA x_tmp ; Copieer parameters STA kad_pos_xlol LDA y_tmp STA kad_pos_xrbl LDA b_tmp STA kad_pos_yrbl LDA h_tmp STA kad_pos_ylol JSR __focus ; Teken de rechthoek JSR setsem LDX #10 ; Zet lijntype weer normaal LDY #focus_off-pccomtab JSR pccom JSR clrsem PLA ; Restore X,Y TAY PLA TAX RTS __focus PHA ; Dummies, maar niet weghalen PHA JMP _focus text ; SUBROUTINE TEXT X,Y,A ================================ txt_x equ data+5 txt_y equ data+6 txt_l equ data+7 pointer equ data+8 txtadres equ data+9 txt BEQ string_empty ; Test of string leeg is STA txt_l ; Init STX txt_x STY txt_y TXA ; Bewaar X,Y PHA TYA PHA LDA #$40 ; Zet bufferadres STA txtadres LDA #1 STA txtadres+1 LDA #0 STA pointer t_loop LDY pointer LDA (txtadres),Y ; Lees karakter LDX txt_x LDY txt_y JSR sprite ; Plaats karakter INC txt_x ; Verhoog pointers INC pointer LDA pointer ; Test op einde buffer CMP txt_l BNE t_loop PLA ; Restore X,Y TAY PLA TAX string_empty RTS block ; SUBROUTINE BLOCK X,Y,B,H ============================== TXA ; Bewaar X,Y PHA TYA PHA LDA #$03 ; zet block modus (vullen) STA kad_modus LDA m_tmp ; bepaal teken modus BEQ b_zwart ; spring indien zwart maken CMP #$FE BEQ b_invert ; spring indien inverteren b_normaal jsr _block ; ga block tekenen jmp b_end ; spring naar einde routine b_zwart JSR setsem ; zet semafoor LDX #3 LDY #get_attr-pccomtab ; vraag huidige kleurcode op JSR pccom JSR leesbyte PHA LDA #17 ; zet kleur op zwart JSR zendbyte LDA #00 JSR zendbyte JSR clrsem ; geef semafoor vrij JSR _block ; Teken de rechthoek JSR setsem LDA #17 ; herstel kleur weer JSR zendbyte PLA JSR zendbyte JSR clrsem ; geef semafoor vrij JMP b_end ; spring naar einde routine b_invert JSR setsem ; zet semafoor LDX #5 ; Zet inverterende stippel modus LDY #(focus_on-pccomtab)+5 JSR pccom JSR clrsem ; geef semafoor vrij JSR _block ; Teken de rechthoek JSR setsem LDX #5 ; Zet lijntype weer normaal LDY #(focus_off-pccomtab)+5 JSR pccom JSR clrsem b_end PLA ; Restore X,Y TAY PLA TAX RTS _dlgbase_ext ; SUBROUTINE DLGBASE_EXT ===================================== LDA #<$AF00 ; zet fontadres in werkruimte STA tmp_adres LDA #>$AF00 STA tmp_adres+1 LDX #32 LDA #0 ; ascii code STA m_tmp JSR def_font ; definieer "windings" LDA stack1 ; zet fontadres in werkruimte STA tmp_adres LDA stack2 STA tmp_adres+1 LDX #224 LDA #32 ; ascii code STA m_tmp JSR def_font RTS def_font ; SUBROUTINE DEF_FONT ======================================== JSR setsem ; zet semafoor en stuur pc commando def_font_lus LDA #$00 JSR zendbyte LDA #$25 JSR zendbyte LDA m_tmp JSR zendbyte INC m_tmp LDY #0 ; stuur 16 databytes over def_font_char LDA (tmp_adres),y JSR zendbyte INY CPY #16 BNE def_font_char CLC ; verhoog memory pointer LDA tmp_adres ADC #8 STA tmp_adres LDA tmp_adres+1 ADC #0 STA tmp_adres+1 DEX BNE def_font_lus JSR clrsem ; Wis semafoor en einde routine RTS setsem PHA ; Save accu LDA #11 ; Test en zet semafoor voor pc toegang setsem1 JSR osbyte BCC setsem1 ; Wacht indien toegang gewijgerd PLA ; Herstel accu RTS clrsem PHA ; Save accu LDA #10 ; Geef semafoor weer vrij JSR osbyte PLA ; Herstel accu RTS colour PHA ; Save kleur JSR setsem LDA #17 JSR zendbyte PLA JSR zendbyte JSR clrsem RTS pccom CPX #0 ; Test op einde routine BEQ pccom1 LDA pccomtab,y ; Lees commando data JSR zendbyte ; Stuur naar de pc INY ; Verhoog pointer DEX ; Verlaag teller JMP pccom ; gedwongen sprong pccom1 RTS pccomtab focus_on .db $00,$5A,$06,$33,$33,$00,$5A,$0A,$FF,$FF focus_off .db $00,$5A,$06,$FF,$FF,$00,$5A,$0A,$00,$00 xblock .db $00,$5A writeln .db $00,$07 gtext_attr .db $00,$5B,$5E get_attr .db $00,$5A,$08 cls_std .db $00,$32,$09,$00,$5A,$06,$AA,$AA .db $00,$5A,$03,$00,$00,$C7,$00,$3E .db $01,$00,$00,$00,$5A,$06,$FF,$FF ;cls_enh .db $00,$32,$0C,$00,$5A,$06,$AA,$AA ; .db $00,$5A,$03,$00,$00,$E0,$01,$7E ; .db $02,$00,$00,$00,$5A,$06,$FF,$FF muizinit .db $00,$1C,$80 muizpositie .db $00,$1C,$82 muizaan .db $00,$1C,$83 muizuit .db $00,$1C,$84 muizcursor .db $00,$1C,$87