;**********************************************************************; ;* A T O M I C W I N D O W S *; ;*--------------------------------------------------------------------*; ;* doel : hardware afhankelijke routines *; ;*--------------------------------------------------------------------*; ;* filenaam : hlp7.inc *; ;* auteur : Kees van Oss *; ;* conversie : Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : juli 1997 *; ;* laatste update : *; ;*--------------------------------------------------------------------*; ;* assembleren : opnemen als include file in AW30.ASM *; ;*--------------------------------------------------------------------*; ;* oproep : - *; ;**********************************************************************; sprite ; SUBROUTINE SPRITE X,Y,A ======================================== spr_data equ data adres equ data+1 adres_hi equ data+2 scherm equ data+3 scherm_hi equ data+4 SEC SBC #32 STA adres ; ASCII-32=SPRITENR TXA PHA TYA PHA LDA #0 STA adres_hi ; BEPAAL SPRITEDATA ADRES ASL adres ROL adres_hi ASL adres ROL adres_hi ASL adres ROL adres_hi CLC LDA #$AC ADC adres_hi STA adres_hi STX scherm STY scherm_hi ; BEPAAL SCHERMADRES CLC LDA #$80 ADC scherm_hi STA scherm_hi LDY #0 LDX #8 ; ZET SPRITE spr_loop LDA (adres),Y STA spr_data vet LDA store_style AND #1 BEQ italic ; CHECK VETGEDRUKT LDA spr_data LSR A ORA spr_data STA spr_data italic LDA store_style AND #2 BEQ onderlijn ; CHECK SCHUINSCHRIFT LDA spr_data CPX #5 BMI onderlijn LSR A STA spr_data onderlijn LDA store_style AND #4 BEQ invert ; CHECK ONDERLIJNEN LDA spr_data CPX #1 BNE invert LDA #255 STA spr_data invert LDA store_style AND #8 BEQ grijs ; CHECK INVERTEREN LDA spr_data EOR #255 STA spr_data grijs LDA store_style AND #16 BEQ dubbel ; CHECK GRIJS MAKEN TXA LSR A BCC even LDA spr_data AND #$55 STA spr_data JMP dubbel even LDA spr_data AND #$AA STA spr_data dubbel LDA store_style AND #32 BEQ normal ; CHECK DUBBEL HOOG LDA spr_data EOR #$FF STA (scherm),Y CLC LDA scherm ADC #32 STA scherm LDA scherm_hi ADC #0 STA scherm_hi normal LDA spr_data EOR #$FF ; PLAATS BYTE go_on STA (scherm),Y CLC LDA adres ADC #1 STA adres ; HOOG SPRITEDATA ADRES OP LDA adres+1 ADC #0 STA adres+1 CLC LDA scherm ADC #32 STA scherm ; HOOG SCHERMADRES OP LDA scherm+1 ADC #0 STA scherm+1 DEX BEQ spr_end JMP spr_loop spr_end PLA TAY PLA TAX RTS kader ; SUBROUTINE KADER X,Y,B,H ======================================= adres_h equ data+4 adres_l equ data+6 TXA PHA TYA PHA CLC LDA x_tmp ADC #$E0 STA adres_h ; BEPAAL ADRES BOVENLIJN CLC LDA y_tmp ADC #$7F STA adres_h+1 LDA x_tmp STA adres_l ; BEPAAL ADRES ONDERLIJN CLC LDA y_tmp ADC #$80 ADC h_tmp STA adres_l+1 LDY #0 h_loop LDA #0 STA (adres_h),Y NOP STA (adres_l),Y ; ZET HORIZONTALE LIJNEN INY CPY b_tmp BNE h_loop DEC adres_h ; BEPAAL ADRES LINKERLIJN LDA h_tmp ASL A ASL A ASL A CLC ADC #2 TAX; BEPAAL ADRES LINKERLIJN v_loop LDY #0 LDA (adres_h),Y AND #$FE STA (adres_h),Y ; ZET LINKERLIJN LDY b_tmp INY LDA (adres_h),Y AND #$7F STA (adres_h),Y ; ZET RECHTERLIJN CLC LDA adres_h ADC #$20 STA adres_h BCC not_inc INC adres_h+1 not_inc DEX BNE v_loop PLA TAY PLA TAX RTS focus ; SUBROUTINE FOCUS X,Y,B,H ======================================= foc_x_min equ data foc_x_max equ data+1 foc_y_min equ data+2 foc_y_max equ data+3 fadres_h equ data+4 fadres_l equ data+6 TXA PHA TYA PHA LDA #$E0 STA fadres_h ; BEPAAL ADRES BOVENLIJN CLC LDA foc_y_min ADC #$7F STA fadres_h+1 LDA #$00 STA fadres_l ; BEPAAL ADRES ONDERLIJN CLC LDA foc_y_max ADC #$80 STA fadres_l+1 LDY foc_x_min hf_loop LDA (fadres_h),Y EOR #$AA STA (fadres_h),Y ; ZET BOVENLIJN LDA (fadres_l),Y EOR #$55 STA (fadres_l),Y ; ZET ONDERLIJN INY CPY foc_x_max BNE hf_loop CLC LDA foc_x_min ADC #$1F STA foc_x_min vf_loop LDY foc_x_min LDA (fadres_h),Y EOR #$01 STA (fadres_h),Y LDY foc_x_max LDA (fadres_h),Y EOR #$80 STA (fadres_h),Y CLC LDA fadres_h ADC #$40 STA fadres_h BCC not_inc1 INC fadres_h+1 not_inc1 LDA fadres_h+1 CMP fadres_l+1 BNE vf_loop PLA TAY PLA TAX RTS 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 STA txt_l STX txt_x STY txt_y TXA PHA TYA PHA LDA #$40 STA txtadres LDA #1 STA txtadres+1 LDA #0 STA pointer t_loop LDY pointer LDA (txtadres),Y CMP #32 BPL t_set LDA #32 t_set LDX txt_x LDY txt_y JSR sprite INC txt_x INC pointer LDA pointer CMP txt_l BNE t_loop PLA TAY PLA TAX RTS block ; SUBROUTINE BLOCK X,Y,B,H ======================================= b_adres equ data+5 b_adres_h equ data+6 TXA PHA TYA PHA LDA x_tmp STA b_adres CLC LDA y_tmp ADC #$80 STA b_adres_h LDA h_tmp ASL A ASL A ASL A STA h_tmp LDX #0 wisregel LDY #0 wiskolom LDA m_tmp CMP #$FE BNE nothing LDA (b_adres),Y EOR #$FF nothing STA (b_adres),Y INY CPY b_tmp BNE wiskolom CLC LDA b_adres ADC #$20 STA b_adres BCC no_add INC b_adres_h no_add INX CPX h_tmp BNE wisregel LDA h_tmp LSR A LSR A LSR A STA h_tmp PLA TAY PLA TAX RTS