Этюды — Abzac


PeriodicalsAbzac2009 No. 32 → Этюды

Этюды

Печать 16 символов в строке.  119 байт.

Владислав Ювженко / tiboh

    LD DE,адрес на экране
    LD IX,адрес текста, в конце ноль
p1    LD A,(IX)
    OR A
    RET Z
    LD L,A
    ADD HL,HL
    LD H,15
    ADD HL,HL
    ADD HL,HL
    EX DE,HL
    LD BC,#0800
p2    PUSH BC
    LD A,(DE)
;если разремировать будет утолщенный шрифт
    ; LD B,A
    ; ADD A,A
    ; OR B
    LD B,C
;повторить блок 8 раз
    !ASSM 8    
    RRA
    RR C
    RR B
    SRA C
    RR B
    !CONT
;-----------------------
    LD (HL),C
    INC L
    LD (HL),B
    DEC L
    INC DE
    INC H
    POP BC
    DJNZ p2
    INC L
    INC L
    JR Z,$+6
    LD A,H
    SUB 8
    LD H,A
    EX DE,HL
    INC IX
    JR p1

Турбо загрузчик. 162 байта

Владислав Ювженко / tiboh

    LD HL,адрес загрузки
    LD DE,дорожка/сектор
    LD B,количество секторов
    LD A,(23830)
    AND 3
    LD (drv+1),A
    DI
    LD (emsp+1),SP
    LD IX,#3d2f
    LD C,D
    SRL C
    LD A,60
    JR NC,$+4
    RES 4,A
    EXX
    LD HL,drv+1
    OR (HL)
    LD HL,cont
    PUSH HL
    LD HL,#2f4d
    PUSH HL
    EXX
    JP (IX)
cont    LD SP,tabl
    LD A,E
    INC A
    PUSH HL
    EXX
    POP HL
    LD C,95
    JP (IX)
l1    LD A,#80
    LD C,#7f
    JP (IX)
l2    XOR A
    JP (IX)
l3    LD A,10
    LD D,1
    LD C,95
    JP (IX)
l4    OR B
    EXX
    LD A,D
    RRA
    JP (IX)
l5    JR NZ,cont
    INC H
    INC E
    BIT 4,E
    JR Z,skip
    LD E,0
    INC D
    LD A,60
drv    OR 0
    BIT 0,D
    JR Z,$+4
    RES 4,A
    JP (IX)
l6    JR NZ,skip
    LD A,88
    JP (IX)
skip    DJNZ cont
    LD (23796),DE
    EXX
emsp    LD SP,0
    EI
    RET
    DW 0
tabl    DW #2a53,l1,#2fc3
    DW #3fe5,l2,#1e3a
    DW l3,#2a53,#3f33
    DW l4,#1e3a,l5
    DW #1ff3,l6,#2fc3
    DW #3fe5,skip
    DW #3fe5,skip

Прозрачная работа со страницами

Александр Синяков / SAM style

Запоминает включеную страницу и по RET вос­станавливает её. Что позволяет прозрачно ра­ботать со страницами.

savepage    ld (bufer+1),hl
    ld hl,(CurPage-1)
    ex (sp),hl
    push hl
    ld hl,ret_addr
    ex (sp),hl
    push hl
    bufer
    ld hl,0
    ret
ret_addr pop af
;тут, переход к переключалке банок
    ld bc,#7ffd
    out (c),a
    ret

CurPage    db #10    ;текущая страница

В программе:

    ...

    call savpage

    ...

    ret

RET пойдёт через ret_addr и восстановит стра­ницу.


Абсолютное значение регистра

Александр Синяков / SAM style

    ld a,e
    cp 128
    jr c,label
    neg
    ld e,a
    label: ...

На выходе A=ABS (E)

#FF = -1, #FE = -2 и т.д.