|
Inferno #07
31 мая 2005 |
|
For Coderz - Programming for the video mode 384x304.

384x304: Programming
This article was written at the request of Znahar / Rush and
serves as a complement Niemi to the article in AlCoNews # 32.
Reprinted that article is not entirely I will find a better
original.
The scheme (Contact v2.06 by Alone Coder 'KSA-7G)
The first circuit
(As in the circuit with the breaker switch):
signal lines of a standard screen of 14 th (from scratch)
videoadres D8 (555LE1): 13> D17 (555KP11): 14
or D9 (1533LI1): 5 cut off +5 v <- x -
> D14
(555KP11): 14
cut the +5 v <- x --- (for attributes)
The second chain
(Instead of the circuit breaker):
what was at the 13 th videoadrese before - (many are GND)
x
signal standard column screen | cut old
D4 (555IE7): 7 or D9: 4 LED / |
1533LI1 |
enable signal 1.5k | 13th videoadres
(Eff7 bit 6) <>> D17 (555KP11): 11
Diode Diode
+5 V 1.5k
1k
old / diode
signal a new signal curb curb
D9: 6> D10 (1533TM2): 12
1533LI1 | 3.3k |
--- X --- this part of the scheme is not needed if
the 13-m
videoadrese was cut GND (ie, no
512x192, attribute to a byte or SB)
Address fields of the screen to the main screen:
{Address attributes - in braces}
{# D0xx} # c01f | # e000 ^ {# f0xx} # e01f | # c008 {# d0xx}
... | ... 8chr ... | ...
# C7ff | # e7e0 v # e7ff | # c7e8
-------------+------------------------------------
+------------{# 58xx} # 401f | # 6000 ^ {# 78xx} # 601f | #
4008 {# 58xx}
... ... | ... | ... ... | ... ...
| 24chr |
... ... | ... | ... ... | ... ...
{# 5axx} # 57ff | # 77e0 v {# 7axx} # 77ff | # 57e8 {# 5axx}
-------------+------------------------------------
+------------{# d3xx} # d81f | # f800 ^ {# f3xx} # f81f | #
d808 {# d3xx}
... | ... 6chr ... | ...
<--- 8chr ---> | # ffa0 v # ffbf | <--- 8chr --->
Since the 0-I 1-I-thirds (or more precisely, not third, and
fifth fractions) differ in addressing pixels only pages, but
differ greatly in addressing the attributes, then write down
only the variant Antes procedures for the case when opened on 4
th page and the screen - core.
Program to 384x304 is best to write so that it was
and a standard mode of 256x192. To do this:
1. In all cases, to allocate # 6000 .. # 7aff and part of the
4-th page.
2. For 384x304 use the area below the screen.
3. For 256x192 use these areas, such as a buffer
font-scale (as in ACE).
4. When writing or alteration of the program screen sizes have
in specific constants, so they can be changed.
5. The routine to write for 256x192 and 384x304, or different
the same, but with a different screen size (if the active
field at 384x304 will be controlled, then all is fine:)).
6. After debugging procedures instead of manually changing
the constants (and ve current conditional compilation) in the
source organize the variables of Programme on which the program
itself will be arranged. For each dogo parameter (width,
height, address of the routine ...) should be have exactly one
storage location and procedures will need to use call of
information from this site (ie a variable). Change variables
at an early stage by the constant in the source.
7. Then remove this constant, instead make a setup.
8. Disc surgery and other complex menus easier to organize
on the screen of 256x192 (as in ACE and ANSI). However, if the
regime does not will change, will be biased ...
9. Needed to clear the screen from top to bottom, otherwise
turns ugly (Procedure for transfer line, see AlCoNews # 32, but
can recollection lzovatsya procedures outlined here CLS384).
10. Are visible everywhere on 4 sides of familiarity with the
basic screen, plus 4 more on top and 2 below. This is done in
the new versions of the Unreal Speccy, I think, correct. In ACN
# 32 I suggested use of 3 familiarity top and bottom, but do
not think that it was asymmetric (ie, no relation to real
appeared on the TV did not have).
If the support 2 screens in the future will be able to
support and others, as are many of them on different clones!
Particularly tempting to look Screen 512x192 - it takes the
same addresses # 6000 .. # 77ff.
Procedures for working with 384x304 screen
(They are! 384.H in the appendix)
, 0. on'off 384X304
OFF384
XOR A
JR $ +4
ON384
LD A, 64
LD BC, # EFF7
OUT (C), A
RET
, 1. byte right
; Looking for the next byte on the right screen
BR384
LD A, L
INC L
XOR L
AND 32
RET Z; 46 times out of 48
BIT 5, H
JR Z, br384c; 1 times out of 48
RES 5, H; 1 times out of 48
LD A, -24
JR br384al
br384c
SET 5, H
LD A, -32
br384al
ADD A, L
LD L, A
RET
2. y -> scr
; BC indicates the line number (from 0 to 303)
, At the exit HL = base address of the string (# 4000 instead
of # 4018, etc.) ; Not spoil BC
YSC384
LD A, C
AND 7
LD H, A
XOR C
ADD A, A, A, A
LD L, A
LD A, # D8
INC B
DJNZ ys384LO
LD A, C
AND # C0
RRCA
RRCA
RRCA
JR NZ, $ +4
LD A, # C0-# 38; 0-I third
ADD A, # 38
ys384LO ADD A, H
LD H, A
RET
3. xy -> scr
; BC indicates the line number (from 0 to 303)
; E - number of bytes in a row (from 0 to 47)
, At the exit HL = address of byte
XYSC384
CALL YSC384; y -> scr
LD A, E
SUB 8
JR C, xs384l
CP 1932
JR C, xs384m
SUB 32 + # 18
xs384l
ADD A, 8 + # 18
JR xs384al
xs384m
SET 5, H
xs384al
ADD A, L
LD L, A
RET
4. scr -> attr
; Procedure is efficient at any position. HL in familiarity
SA384
LD A, H
AND # C0 +24
JP P, $ +5
ADD A, # 86 - # C0-# C2 + # 40, # 86, after the scroll
will be # D0
ADD A, # C2-# 40; # C2 after the scroll will be # 58
RRCA
RRCA
RRCA
XOR H
AND # DF
XOR H
LD H, A
RET
5. down hl
DH384
INC H
LD A, H
AND 7
RET NZ; 266 times of 304
LD A, L
ADD A, 32
LD L, A
LD A, H
JR C, dh384nd; 34 times of 304
SUB 8
LD H, A
RET
dh384nd AND # DF
CP # 58
RET C; 2 times of 304
SET 7, H; go to last (4 th) third
RET Z; 1 times of 304
XOR H; # 00 / # 20
OR # 40, go to the main screen (1-th one-third)
LD H, A
RET
6. clear screen (from top to bottom!)
; A = attribute
CLS384
LD HL, # C018
LD BC, 304
LD LX, A
CLS3840
PUSH BC
PUSH HL
XOR A
CALL CLS384L
POP HL
PUSH HL
CALL SA384
LD A, LX
CALL CLS384L
POP HL
POP BC
CALL DH384
DEC BC
LD A, B
OR C
JR NZ, CLS3840
RET
CLS384L
LD BC, 7
CALL FILHL
EXA
LD A, L
SUB 7 16
LD L, A
EXA
LD C, 7
CALL FILHL
EXA
SUB 8
LD L, A
EXA
SET 5, H
LD C, 31
FILHL
LD D, H, E, L
INC E
LD (HL), A
LDIR
RET
7. Drawing window (with the cleaning of its contents)
; HL = address on the screen
; B = width-1, C = hgt * 8-2
WIN384
PUSH HL
LD E, -1
LD (HL), E
CALL HOR384
JR WIN384P
WIN3840 PUSH HL
LD (HL), 128
LD E, 0
CALL HOR384
LD (HL), a
WIN384P POP HL
CALL DH384
DEC C
JR NZ, WIN3840
LD E, -1
LD (HL), E
HOR384
PUSH BC
HOR3840 CALL BR384
LD (HL), E
DJNZ HOR3840
POP BC
RET
A. Coder
Other articles:
Similar articles:
В этот день... 2 November