;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; http://CPCrulez.fr
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



; Routine d'affichage de text en overscan ( le code provient de Crown
; Cruncher v1.4 ). Ce source ce compile sans problème sous MAXAM ou
; l'assembleur de WinAPE.


nolist

            org &4000

            di
            ld      a, &0C9
            ld      hl, (&39)
            ld      (hl), a


            ld      sp, &0

            ld      hl, byte_4127
            call    sub_40A1

            ld      hl, byte_4108
            call    sub_4091         ; modif registres BCxx

            ld      bc, &7F8A
            out     (c), c

            ld      hl, byte_412C    ;  text
            ld      de, &8000
            call    sub_40E2

            ld      hl, byte_4122
            call    sub_40A1

loc_404F:   call    sub_40BC
            jr      nc, loc_404F

loc_4054:   call    sub_40BC
            jr      c, loc_4054

jp 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sub_4091:   ld      b, &0BC
            ld      a, (hl)
            inc     hl
            cp      &0FF
            ret     z
            out     (c), a
            inc     b
            ld      a, (hl)
            inc     hl
            out     (c), a
            jr      sub_4091

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sub_40A1:   ld      bc, &7F10
            out     (c), c
            ld      a, (hl)
            inc     hl
            or      &40 ; '@'
            out     (c), a
            ld      c, &0

loc_40AE:   out     (c), c
            ld      a, (hl)
            inc     hl
            or      &40 ; '@'
            out     (c), a
            inc     c
            bit     &2, c
            jr      z, loc_40AE
            ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sub_40BC:   ld      a, &5
            ld      bc, &0F782
            out     (c), c
            ld      bc, &0F40E
            out     (c), c
            ld      bc, &0F6C0
            out     (c), c
            ld      c, &0
            out     (c), c
            ld      bc, &0F792
            out     (c), c
            or      &40
            ld      c, a
            dec     b
            out     (c), c
            ld      b, &0F4
            in      a, (c)
            rla
            ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sub_40E2:   ld      a, (hl)
            inc      hl
            or      a
            ret      z
            push      de
            exx
            pop      de
            ld      h, &7
            ld      l, a
            add      hl, hl
            add      hl, hl
            add      hl, hl
            ld      b, &8

loc_40F1:   ld      a, (hl)
            ld      (de), a
            inc      hl
            ld      a, d
            add      a, &8
            ld      d, a
            djnz      loc_40F1
            exx
            inc      de
            ld      a, d
            and      &7
            or      e
            jr      nz, sub_40E2
            ld      a, d
            add      a, &38
            ld      d, a
            jr      sub_40E2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

byte_4108:  db   &01,&2E
            db   &02,&31
            db   &06,&21
            db   &07,&22
            db   &0C,&2C     ; &2C pour &8000
            db   &0D,0
            db   &0FF

byte_4122:  db   &0F
            db   &0F
            db   &14
            db   &13
            db   &0C

byte_4127:  db   &0F
            db   &0F
            db   &0F
            db   &13
            db   &0C

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

byte_412C:
db "            ::              Example by http://CPCrulez.fr               ::             "
db "          ____.                    ____.                                     ::             "
db "         |    |        ______.    |    |                          ___        ::             "
db "         |  __|_______\\___  |____|__  |         ____    _______  \  \  ___  ::             "
db "         | \\____  \      /  |   ___// |     ___/ __//__/  __  //__\  \/  /_ ::             "
db "         |____     /\____/___|     ____|    \\  \_____     \__/             \::             "
db "         ___. \___/           \___/           \___      /\_______/\___/\     \:             "
db "         \  |: ____                               \____/                \_____\\            "
db "       .__\ |_/ __//____   ____.     _______      ____.____                  ::             "
db "       |   \| \_____   /  |    |   _/  __  //____|_   |   _|__________     ___:_            "
db "       |____|___      /   |  __|___\  \\__/   \    _  :  _    /  __  //___\\__ /__          "
db "            ::  \____/    | \\___    ____     /\___// : \\___/\  \__/        /    \         "
db "            ::            |____     /    \___/   |    :    |   \___     _____\     \        "
db "            ::          ____   \___/             |____|____|       \___/     :\_____\       "
db "            _:________ |    |        ______. ___ ____ :                      ::             "
db "           \\        /_|  __|_______\\___  |_\_ \    |           ______.     ::             "
db "            :\______/  ' \\__    \      /  |   \ \   |       ____\___  |     ::             "
db "            ::    /    _____/    /\____/___|____\ \_ |      \\      /  |     ::             "
db "            ::   /____/     \___/                \___|        \____/___|     ::             "
db "            ::                ______      .____                              ::             "
db "        _____:      ______   \\__   \.    |    |                             ::             "
db "      _/  __//_____\\__   \_/   /    |____|__  |         .____               ::             "
db "      \   \__         /    /\________/   ___/  |         |    |   ______. ___::___          "
db "       \____/    /\_______/          \     ____|   ______|__  |__\\___  |_\  \/   \_        "
db "            \___/                     \___/        \    ___/  |      /  |  \___/   /        "
db "            ::         ____.                        \     ____|\____/___|____     /         "
db "            ::  ______|    |__                       \___/           ___.    \___/          "
db "            _:_\\___  |   ___//_      ___ /\ ___. _______    _____  |   | __ ::             "
db "            \      /  |    \    |   _/   /  \   |_\___   \__\\__ /__|   |/ /_::             "
db "            :\    /___|\___     |   \   /    \_      /         /    \  _     \:             "
db "            ::\__/         \____|    \____/\____/\_______/\____\     \__\     \             "
db "            ::                                                  \_____\  \_____\            "
db "            ::                                                               ::             "
db 0