ich glaub, ich muß nochmal n paar Sources ins Wiki tun. Hier erstmal mal die Routine aus dem SymbOS-Screendriver, die die Bildschirmadresse eines Pixels berechnet:
;### GETADR -> Berechnet Bildschirm-Adresse
;### Eingabe DE=XPos, L=YPos
;### Ausgabe HL=Adresse, A=Pixeloffset, C=Anzahl Pixel pro Byte-1
;### Veraendert F,B,DE
getadr ld h,0
add hl,hl
ld bc,getadr0
add hl,bc
ld c,(hl)
inc hl
ld h,(hl)
ld l,c
ld a,e
getadr1 ld c,NUMBER_OF_PIXEL_PER_BYTE - 1 ;1,3 oder 7
and c
getadr2 ld b,SCREEN_MODE + 1 ;1,2 oder 3
getadr3 srl d
rr e
djnz getadr3
add hl,de
ret
getadr0 ;Zeilenstart-Adressen
dw #C000,#C800,#D000,#D800,#E000,#E800,#F000,#F800,#C050,#C850,#D050,#D850,#E050,#E850,#F050,#F850,#C0A0,#C8A0,#D0A0,#D8A0,#E0A0,#E8A0,#F0A0,#F8A0,#C0F0
dw #C8F0,#D0F0,#D8F0,#E0F0,#E8F0,#F0F0,#F8F0,#C140,#C940,#D140,#D940,#E140,#E940,#F140,#F940,#C190,#C990,#D190,#D990,#E190,#E990,#F190,#F990,#C1E0,#C9E0
dw #D1E0,#D9E0,#E1E0,#E9E0,#F1E0,#F9E0,#C230,#CA30,#D230,#DA30,#E230,#EA30,#F230,#FA30,#C280,#CA80,#D280,#DA80,#E280,#EA80,#F280,#FA80,#C2D0,#CAD0,#D2D0
dw #DAD0,#E2D0,#EAD0,#F2D0,#FAD0,#C320,#CB20,#D320,#DB20,#E320,#EB20,#F320,#FB20,#C370,#CB70,#D370,#DB70,#E370,#EB70,#F370,#FB70,#C3C0,#CBC0,#D3C0,#DBC0
dw #E3C0,#EBC0,#F3C0,#FBC0,#C410,#CC10,#D410,#DC10,#E410,#EC10,#F410,#FC10,#C460,#CC60,#D460,#DC60,#E460,#EC60,#F460,#FC60,#C4B0,#CCB0,#D4B0,#DCB0,#E4B0
dw #ECB0,#F4B0,#FCB0,#C500,#CD00,#D500,#DD00,#E500,#ED00,#F500,#FD00,#C550,#CD50,#D550,#DD50,#E550,#ED50,#F550,#FD50,#C5A0,#CDA0,#D5A0,#DDA0,#E5A0,#EDA0
dw #F5A0,#FDA0,#C5F0,#CDF0,#D5F0,#DDF0,#E5F0,#EDF0,#F5F0,#FDF0,#C640,#CE40,#D640,#DE40,#E640,#EE40,#F640,#FE40,#C690,#CE90,#D690,#DE90,#E690,#EE90,#F690
dw #FE90,#C6E0,#CEE0,#D6E0,#DEE0,#E6E0,#EEE0,#F6E0,#FEE0,#C730,#CF30,#D730,#DF30,#E730,#EF30,#F730,#FF30,#C780,#CF80,#D780,#DF80,#E780,#EF80,#F780,#FF80
Alles anzeigen