Merry Christmas Message

This file is part of Timex Sinclair Public Domain Library Tape 1002 . Download the collection to get this file.
Developer(s): Ryan Gray
Date: 198x
Type: Program
Platform(s): TS 1000
Tags: Holiday

This ZX81/TS1000 program displays an animated Christmas greeting with a scrolling message and a decorative tree scene rendered using block graphics. It embeds two machine code routines directly in a REM statement at line 1: one routine (called via USR 16550) appears to perform a fast block memory copy or clear, and another (USR 16514) provides a delay or synchronisation function. The scrolling text in line 31/44 alternates between a plain string (A$) and an inverse-video version (B$) to create a flashing effect as the message moves across the screen. Lines 999–1060 form a diagnostic/loader section that prints and verifies the hex data for the machine code, and line 2000 saves the program.


Program Analysis

Program Structure

The program is divided into three functional sections:

  1. Initialisation and display setup (lines 1–28): The REM statement at line 1 stores two machine code routines. Lines 10–28 call the first routine, define the scrolling strings, draw the static scene using block graphics, and configure display settings via POKE 16418.
  2. Main animation loop (lines 29–60): A FOR loop scrolls the greeting message across line 18, alternating between plain and inverse-video versions of the string for a flashing effect, with a machine code delay called between frames.
  3. Diagnostic/loader section (lines 999–2060): Lines 999–1060 print and verify the hex content of the machine code area for development purposes. Line 2000 saves the program and line 2010 returns to the main entry point.

Machine Code Routines

Two machine code routines are embedded in the REM at line 1. The REM data begins at address 16514 (the first byte after the line’s length bytes), and a second entry point is at 16550.

Entry pointCalled atApparent function
USR 16514Line 40Timing delay / frame sync between scroll steps
USR 16550Line 10Fast block memory operation (copy or clear using LDIR)

The hex string in line 1000 matches the REM content: key Z80 mnemonics visible in the byte sequence include ED B8 (LDDR), ED 52 (SBC HL,DE), E5 (PUSH HL), D1 (POP DE), and C9 (RET). The routine at 16550 loads a 16-bit address from (16448) (the ZX81 D_FILE system variable), computes offsets, and performs a block transfer — consistent with manipulating the display file. The HALT byte 76 appears twice at offset +36/+37, used as a padding or end-of-routine marker.

Display Techniques

The static scene on lines 20–25 uses ZX81 block graphic characters to render a stylised Christmas tree and a fireplace-like border. The tree silhouette is built from \'' (▀) and \': (▛) characters, with a trunk suggested by \:: (▌) pairs. The bottom border uses \:.\.. sequences to form a solid floor line.

The scrolling animation on lines 29–50 uses two pre-built strings of equal length: A$ contains the message with normal characters, and B$ contains the same text with inverse-video characters (e.g. %M%E%R%R%Y). On each iteration, B$ is printed first (line 31), the machine code delay runs (line 40), then A$ is printed (line 44), creating a flicker/flash effect as the text scrolls.

Key BASIC Idioms

  • POKE 16418,0 and POKE 16418,2 (lines 26/28) manipulate the MARGIN or a related system variable to control display scrolling behaviour — specifically suppressing the automatic scroll prompt.
  • FOR A=1 TO LEN A$-30 STEP 2 (line 29) steps through the string two characters at a time, since each display position consumes one character in the ZX81’s non-collapsed display file.
  • PRINT AT 0,INT (RND*32);"%." (line 30) scatters inverse-video dots randomly across the top row on each frame, simulating falling snow.
  • GOTO 29 (line 60) creates an infinite loop that continuously replays the scrolling animation.

Diagnostic Section

Lines 999–1060 appear to be a development aid. Line 1000 defines a string containing the expected hex bytes of the machine code. Lines 1030–1060 then PEEK each byte from address 16514 to 16600 and print it as a two-character hex string using the expression CHR$ (28+INT (B/16)) — offset 28 from ASCII space maps digits 0–9 and letters A–F by exploiting the ZX81 character set layout where digits start at code 28.

Notable Anomalies

  • Line 10 assigns the result of USR 16550 to A, but the return value is not used; the call is purely for its side effect on the display file.
  • The strings A$ and B$ include long runs of spaces at start and end, acting as padding to ensure the message scrolls fully on and off screen without boundary errors in the substring slice A$(A+1 TO A+30).
  • The STEP 2 on line 29 means only odd-indexed starting positions are used, which is consistent with the ZX81 display file structure where each character cell occupies a predictable offset.

Content

Appears On

Assembled by Tim Ward from many sources. Contains programs 10051 – 10121.

Related Products

Related Articles

Related Content

Image Gallery

Merry Christmas Message

Source Code

   1 REM 



Merry Christmas Message

This file is part of Timex Sinclair Public Domain Library Tape 1002 . Download the collection to get this file.
Developer(s): Ryan Gray
Date: 198x
Type: Program
Platform(s): TS 1000
Tags: Holiday

This ZX81/TS1000 program displays an animated Christmas greeting with a scrolling message and a decorative tree scene rendered using block graphics. It embeds two machine code routines directly in a REM statement at line 1: one routine (called via USR 16550) appears to perform a fast block memory copy or clear, and another (USR 16514) provides a delay or synchronisation function. The scrolling text in line 31/44 alternates between a plain string (A$) and an inverse-video version (B$) to create a flashing effect as the message moves across the screen. Lines 999–1060 form a diagnostic/loader section that prints and verifies the hex data for the machine code, and line 2000 saves the program.


Program Analysis

Program Structure

The program is divided into three functional sections:

  1. Initialisation and display setup (lines 1–28): The REM statement at line 1 stores two machine code routines. Lines 10–28 call the first routine, define the scrolling strings, draw the static scene using block graphics, and configure display settings via POKE 16418.
  2. Main animation loop (lines 29–60): A FOR loop scrolls the greeting message across line 18, alternating between plain and inverse-video versions of the string for a flashing effect, with a machine code delay called between frames.
  3. Diagnostic/loader section (lines 999–2060): Lines 999–1060 print and verify the hex content of the machine code area for development purposes. Line 2000 saves the program and line 2010 returns to the main entry point.

Machine Code Routines

Two machine code routines are embedded in the REM at line 1. The REM data begins at address 16514 (the first byte after the line’s length bytes), and a second entry point is at 16550.

Entry pointCalled atApparent function
USR 16514Line 40Timing delay / frame sync between scroll steps
USR 16550Line 10Fast block memory operation (copy or clear using LDIR)

The hex string in line 1000 matches the REM content: key Z80 mnemonics visible in the byte sequence include ED B8 (LDDR), ED 52 (SBC HL,DE), E5 (PUSH HL), D1 (POP DE), and C9 (RET). The routine at 16550 loads a 16-bit address from (16448) (the ZX81 D_FILE system variable), computes offsets, and performs a block transfer — consistent with manipulating the display file. The HALT byte 76 appears twice at offset +36/+37, used as a padding or end-of-routine marker.

Display Techniques

The static scene on lines 20–25 uses ZX81 block graphic characters to render a stylised Christmas tree and a fireplace-like border. The tree silhouette is built from \'' (▀) and \': (▛) characters, with a trunk suggested by \:: (▌) pairs. The bottom border uses \:.\.. sequences to form a solid floor line.

The scrolling animation on lines 29–50 uses two pre-built strings of equal length: A$ contains the message with normal characters, and B$ contains the same text with inverse-video characters (e.g. %M%E%R%R%Y). On each iteration, B$ is printed first (line 31), the machine code delay runs (line 40), then A$ is printed (line 44), creating a flicker/flash effect as the text scrolls.

Key BASIC Idioms

  • POKE 16418,0 and POKE 16418,2 (lines 26/28) manipulate the MARGIN or a related system variable to control display scrolling behaviour — specifically suppressing the automatic scroll prompt.
  • FOR A=1 TO LEN A$-30 STEP 2 (line 29) steps through the string two characters at a time, since each display position consumes one character in the ZX81’s non-collapsed display file.
  • PRINT AT 0,INT (RND*32);"%." (line 30) scatters inverse-video dots randomly across the top row on each frame, simulating falling snow.
  • GOTO 29 (line 60) creates an infinite loop that continuously replays the scrolling animation.

Diagnostic Section

Lines 999–1060 appear to be a development aid. Line 1000 defines a string containing the expected hex bytes of the machine code. Lines 1030–1060 then PEEK each byte from address 16514 to 16600 and print it as a two-character hex string using the expression CHR$ (28+INT (B/16)) — offset 28 from ASCII space maps digits 0–9 and letters A–F by exploiting the ZX81 character set layout where digits start at code 28.

Notable Anomalies

  • Line 10 assigns the result of USR 16550 to A, but the return value is not used; the call is purely for its side effect on the display file.
  • The strings A$ and B$ include long runs of spaces at start and end, acting as padding to ensure the message scrolls fully on and off screen without boundary errors in the substring slice A$(A+1 TO A+30).
  • The STEP 2 on line 29 means only odd-indexed starting positions are used, which is consistent with the ZX81 display file structure where each character cell occupies a predictable offset.

Content

Appears On

Assembled by Tim Ward from many sources. Contains programs 10051 – 10121.

Related Products

Related Articles

Related Content

Image Gallery

Merry Christmas Message

Source Code

   1 REM \2A\10\40\01\29\01\ED\42\11\43\00\ED\52\E5\11\21\00\ED\52\D1\01\8C\01\ED\B8\EB\06\20\2B\36\80\10\FB\C9\76\76\06\16\2A\0C\40\23\7E\FE\76\28\04\36\80\18\F6\10\F4\C9
  10 LET A=USR 16550
  11 LET A$="                                    MERRY  CHRISTMAS       \.'\'.\.'\'.---\'.\!!% \.                                                 "
  12 LET B$="                                    %M%E%R%R%Y  %C%H%R%I%S%T%M%A%S       \ :\: \ :\: ---\'.\!!% \.                                                 "
  20 PRINT AT 13,0;"% % % % % \''\''\''   \''\''\''% % % % % % % \''\''\''    \''\''% % % \''\''             \''% % \''           \':\:                \,,\~~             \ :\:              \,,\~~               \ :"
  21 FOR A=17 TO 21
  22 PRINT AT A,0;"\:                               \ :"
  23 NEXT A
  25 PRINT AT 21,0;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:"
  26 POKE 16418,0
  27 PRINT AT 22,0;"% % % % % % % % % % % % % % % % % % % % % % % % % %R%Y%A%N% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % "
  28 POKE 16418,2
  29 FOR A=1 TO LEN A$-30 STEP 2
  30 PRINT AT 0,INT (RND*32);"%."
  31 PRINT AT 18,1;B$(A TO A+29)
  40 LET Z=USR 16514
  44 PRINT AT 18,1;A$(A+1 TO A+30)
  50 NEXT A
  60 GOTO 29
 999 REM CODE
1000 LET A$="2A1040114300ED52E5112100ED52D1018C01EDB8EB06202B308010FBC9767606162A0C40237EFE762804368018F610F4C9"
1010 PRINT A$
1020 PRINT ,,
1030 FOR A=16514 TO 16600
1040 LET B=PEEK A
1050 PRINT CHR$ (28+INT (B/16));CHR$ (28+B-(INT (B/16))*16);"  ";
1060 NEXT A
2000 SAVE "1010%4"
2010 GOTO 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top
A itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-57155 wp-custom-logo wp-embed-responsive wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.12.5 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.12.4" itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-57155 wp-custom-logo wp-embed-responsive wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.12.5 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.12.4"\ED

Merry Christmas Message

This file is part of Timex Sinclair Public Domain Library Tape 1002 . Download the collection to get this file.
Developer(s): Ryan Gray
Date: 198x
Type: Program
Platform(s): TS 1000
Tags: Holiday

This ZX81/TS1000 program displays an animated Christmas greeting with a scrolling message and a decorative tree scene rendered using block graphics. It embeds two machine code routines directly in a REM statement at line 1: one routine (called via USR 16550) appears to perform a fast block memory copy or clear, and another (USR 16514) provides a delay or synchronisation function. The scrolling text in line 31/44 alternates between a plain string (A$) and an inverse-video version (B$) to create a flashing effect as the message moves across the screen. Lines 999–1060 form a diagnostic/loader section that prints and verifies the hex data for the machine code, and line 2000 saves the program.


Program Analysis

Program Structure

The program is divided into three functional sections:

  1. Initialisation and display setup (lines 1–28): The REM statement at line 1 stores two machine code routines. Lines 10–28 call the first routine, define the scrolling strings, draw the static scene using block graphics, and configure display settings via POKE 16418.
  2. Main animation loop (lines 29–60): A FOR loop scrolls the greeting message across line 18, alternating between plain and inverse-video versions of the string for a flashing effect, with a machine code delay called between frames.
  3. Diagnostic/loader section (lines 999–2060): Lines 999–1060 print and verify the hex content of the machine code area for development purposes. Line 2000 saves the program and line 2010 returns to the main entry point.

Machine Code Routines

Two machine code routines are embedded in the REM at line 1. The REM data begins at address 16514 (the first byte after the line’s length bytes), and a second entry point is at 16550.

Entry pointCalled atApparent function
USR 16514Line 40Timing delay / frame sync between scroll steps
USR 16550Line 10Fast block memory operation (copy or clear using LDIR)

The hex string in line 1000 matches the REM content: key Z80 mnemonics visible in the byte sequence include ED B8 (LDDR), ED 52 (SBC HL,DE), E5 (PUSH HL), D1 (POP DE), and C9 (RET). The routine at 16550 loads a 16-bit address from (16448) (the ZX81 D_FILE system variable), computes offsets, and performs a block transfer — consistent with manipulating the display file. The HALT byte 76 appears twice at offset +36/+37, used as a padding or end-of-routine marker.

Display Techniques

The static scene on lines 20–25 uses ZX81 block graphic characters to render a stylised Christmas tree and a fireplace-like border. The tree silhouette is built from \'' (▀) and \': (▛) characters, with a trunk suggested by \:: (▌) pairs. The bottom border uses \:.\.. sequences to form a solid floor line.

The scrolling animation on lines 29–50 uses two pre-built strings of equal length: A$ contains the message with normal characters, and B$ contains the same text with inverse-video characters (e.g. %M%E%R%R%Y). On each iteration, B$ is printed first (line 31), the machine code delay runs (line 40), then A$ is printed (line 44), creating a flicker/flash effect as the text scrolls.

Key BASIC Idioms

  • POKE 16418,0 and POKE 16418,2 (lines 26/28) manipulate the MARGIN or a related system variable to control display scrolling behaviour — specifically suppressing the automatic scroll prompt.
  • FOR A=1 TO LEN A$-30 STEP 2 (line 29) steps through the string two characters at a time, since each display position consumes one character in the ZX81’s non-collapsed display file.
  • PRINT AT 0,INT (RND*32);"%." (line 30) scatters inverse-video dots randomly across the top row on each frame, simulating falling snow.
  • GOTO 29 (line 60) creates an infinite loop that continuously replays the scrolling animation.

Diagnostic Section

Lines 999–1060 appear to be a development aid. Line 1000 defines a string containing the expected hex bytes of the machine code. Lines 1030–1060 then PEEK each byte from address 16514 to 16600 and print it as a two-character hex string using the expression CHR$ (28+INT (B/16)) — offset 28 from ASCII space maps digits 0–9 and letters A–F by exploiting the ZX81 character set layout where digits start at code 28.

Notable Anomalies

  • Line 10 assigns the result of USR 16550 to A, but the return value is not used; the call is purely for its side effect on the display file.
  • The strings A$ and B$ include long runs of spaces at start and end, acting as padding to ensure the message scrolls fully on and off screen without boundary errors in the substring slice A$(A+1 TO A+30).
  • The STEP 2 on line 29 means only odd-indexed starting positions are used, which is consistent with the ZX81 display file structure where each character cell occupies a predictable offset.

Content

Appears On

Assembled by Tim Ward from many sources. Contains programs 10051 – 10121.

Related Products

Related Articles

Related Content

Image Gallery

Merry Christmas Message

Source Code

   1 REM \2A\10\40\01\29\01\ED\42\11\43\00\ED\52\E5\11\21\00\ED\52\D1\01\8C\01\ED\B8\EB\06\20\2B\36\80\10\FB\C9\76\76\06\16\2A\0C\40\23\7E\FE\76\28\04\36\80\18\F6\10\F4\C9
  10 LET A=USR 16550
  11 LET A$="                                    MERRY  CHRISTMAS       \.'\'.\.'\'.---\'.\!!% \.                                                 "
  12 LET B$="                                    %M%E%R%R%Y  %C%H%R%I%S%T%M%A%S       \ :\: \ :\: ---\'.\!!% \.                                                 "
  20 PRINT AT 13,0;"% % % % % \''\''\''   \''\''\''% % % % % % % \''\''\''    \''\''% % % \''\''             \''% % \''           \':\:                \,,\~~             \ :\:              \,,\~~               \ :"
  21 FOR A=17 TO 21
  22 PRINT AT A,0;"\:                               \ :"
  23 NEXT A
  25 PRINT AT 21,0;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:"
  26 POKE 16418,0
  27 PRINT AT 22,0;"% % % % % % % % % % % % % % % % % % % % % % % % % %R%Y%A%N% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % "
  28 POKE 16418,2
  29 FOR A=1 TO LEN A$-30 STEP 2
  30 PRINT AT 0,INT (RND*32);"%."
  31 PRINT AT 18,1;B$(A TO A+29)
  40 LET Z=USR 16514
  44 PRINT AT 18,1;A$(A+1 TO A+30)
  50 NEXT A
  60 GOTO 29
 999 REM CODE
1000 LET A$="2A1040114300ED52E5112100ED52D1018C01EDB8EB06202B308010FBC9767606162A0C40237EFE762804368018F610F4C9"
1010 PRINT A$
1020 PRINT ,,
1030 FOR A=16514 TO 16600
1040 LET B=PEEK A
1050 PRINT CHR$ (28+INT (B/16));CHR$ (28+B-(INT (B/16))*16);"  ";
1060 NEXT A
2000 SAVE "1010%4"
2010 GOTO 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top
\ED\E5

Merry Christmas Message

This file is part of Timex Sinclair Public Domain Library Tape 1002 . Download the collection to get this file.
Developer(s): Ryan Gray
Date: 198x
Type: Program
Platform(s): TS 1000
Tags: Holiday

This ZX81/TS1000 program displays an animated Christmas greeting with a scrolling message and a decorative tree scene rendered using block graphics. It embeds two machine code routines directly in a REM statement at line 1: one routine (called via USR 16550) appears to perform a fast block memory copy or clear, and another (USR 16514) provides a delay or synchronisation function. The scrolling text in line 31/44 alternates between a plain string (A$) and an inverse-video version (B$) to create a flashing effect as the message moves across the screen. Lines 999–1060 form a diagnostic/loader section that prints and verifies the hex data for the machine code, and line 2000 saves the program.


Program Analysis

Program Structure

The program is divided into three functional sections:

  1. Initialisation and display setup (lines 1–28): The REM statement at line 1 stores two machine code routines. Lines 10–28 call the first routine, define the scrolling strings, draw the static scene using block graphics, and configure display settings via POKE 16418.
  2. Main animation loop (lines 29–60): A FOR loop scrolls the greeting message across line 18, alternating between plain and inverse-video versions of the string for a flashing effect, with a machine code delay called between frames.
  3. Diagnostic/loader section (lines 999–2060): Lines 999–1060 print and verify the hex content of the machine code area for development purposes. Line 2000 saves the program and line 2010 returns to the main entry point.

Machine Code Routines

Two machine code routines are embedded in the REM at line 1. The REM data begins at address 16514 (the first byte after the line’s length bytes), and a second entry point is at 16550.

Entry pointCalled atApparent function
USR 16514Line 40Timing delay / frame sync between scroll steps
USR 16550Line 10Fast block memory operation (copy or clear using LDIR)

The hex string in line 1000 matches the REM content: key Z80 mnemonics visible in the byte sequence include ED B8 (LDDR), ED 52 (SBC HL,DE), E5 (PUSH HL), D1 (POP DE), and C9 (RET). The routine at 16550 loads a 16-bit address from (16448) (the ZX81 D_FILE system variable), computes offsets, and performs a block transfer — consistent with manipulating the display file. The HALT byte 76 appears twice at offset +36/+37, used as a padding or end-of-routine marker.

Display Techniques

The static scene on lines 20–25 uses ZX81 block graphic characters to render a stylised Christmas tree and a fireplace-like border. The tree silhouette is built from \'' (▀) and \': (▛) characters, with a trunk suggested by \:: (▌) pairs. The bottom border uses \:.\.. sequences to form a solid floor line.

The scrolling animation on lines 29–50 uses two pre-built strings of equal length: A$ contains the message with normal characters, and B$ contains the same text with inverse-video characters (e.g. %M%E%R%R%Y). On each iteration, B$ is printed first (line 31), the machine code delay runs (line 40), then A$ is printed (line 44), creating a flicker/flash effect as the text scrolls.

Key BASIC Idioms

  • POKE 16418,0 and POKE 16418,2 (lines 26/28) manipulate the MARGIN or a related system variable to control display scrolling behaviour — specifically suppressing the automatic scroll prompt.
  • FOR A=1 TO LEN A$-30 STEP 2 (line 29) steps through the string two characters at a time, since each display position consumes one character in the ZX81’s non-collapsed display file.
  • PRINT AT 0,INT (RND*32);"%." (line 30) scatters inverse-video dots randomly across the top row on each frame, simulating falling snow.
  • GOTO 29 (line 60) creates an infinite loop that continuously replays the scrolling animation.

Diagnostic Section

Lines 999–1060 appear to be a development aid. Line 1000 defines a string containing the expected hex bytes of the machine code. Lines 1030–1060 then PEEK each byte from address 16514 to 16600 and print it as a two-character hex string using the expression CHR$ (28+INT (B/16)) — offset 28 from ASCII space maps digits 0–9 and letters A–F by exploiting the ZX81 character set layout where digits start at code 28.

Notable Anomalies

  • Line 10 assigns the result of USR 16550 to A, but the return value is not used; the call is purely for its side effect on the display file.
  • The strings A$ and B$ include long runs of spaces at start and end, acting as padding to ensure the message scrolls fully on and off screen without boundary errors in the substring slice A$(A+1 TO A+30).
  • The STEP 2 on line 29 means only odd-indexed starting positions are used, which is consistent with the ZX81 display file structure where each character cell occupies a predictable offset.

Content

Appears On

Assembled by Tim Ward from many sources. Contains programs 10051 – 10121.

Related Products

Related Articles

Related Content

Image Gallery

Merry Christmas Message

Source Code

   1 REM \2A\10\40\01\29\01\ED\42\11\43\00\ED\52\E5\11\21\00\ED\52\D1\01\8C\01\ED\B8\EB\06\20\2B\36\80\10\FB\C9\76\76\06\16\2A\0C\40\23\7E\FE\76\28\04\36\80\18\F6\10\F4\C9
  10 LET A=USR 16550
  11 LET A$="                                    MERRY  CHRISTMAS       \.'\'.\.'\'.---\'.\!!% \.                                                 "
  12 LET B$="                                    %M%E%R%R%Y  %C%H%R%I%S%T%M%A%S       \ :\: \ :\: ---\'.\!!% \.                                                 "
  20 PRINT AT 13,0;"% % % % % \''\''\''   \''\''\''% % % % % % % \''\''\''    \''\''% % % \''\''             \''% % \''           \':\:                \,,\~~             \ :\:              \,,\~~               \ :"
  21 FOR A=17 TO 21
  22 PRINT AT A,0;"\:                               \ :"
  23 NEXT A
  25 PRINT AT 21,0;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:"
  26 POKE 16418,0
  27 PRINT AT 22,0;"% % % % % % % % % % % % % % % % % % % % % % % % % %R%Y%A%N% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % "
  28 POKE 16418,2
  29 FOR A=1 TO LEN A$-30 STEP 2
  30 PRINT AT 0,INT (RND*32);"%."
  31 PRINT AT 18,1;B$(A TO A+29)
  40 LET Z=USR 16514
  44 PRINT AT 18,1;A$(A+1 TO A+30)
  50 NEXT A
  60 GOTO 29
 999 REM CODE
1000 LET A$="2A1040114300ED52E5112100ED52D1018C01EDB8EB06202B308010FBC9767606162A0C40237EFE762804368018F610F4C9"
1010 PRINT A$
1020 PRINT ,,
1030 FOR A=16514 TO 16600
1040 LET B=PEEK A
1050 PRINT CHR$ (28+INT (B/16));CHR$ (28+B-(INT (B/16))*16);"  ";
1060 NEXT A
2000 SAVE "1010%4"
2010 GOTO 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top
\ED\D1 itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-57155 wp-custom-logo wp-embed-responsive wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.12.5 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.12.4"C itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-57155 wp-custom-logo wp-embed-responsive wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.12.5 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.12.4"\ED\B8\EB

Merry Christmas Message

This file is part of Timex Sinclair Public Domain Library Tape 1002 . Download the collection to get this file.
Developer(s): Ryan Gray
Date: 198x
Type: Program
Platform(s): TS 1000
Tags: Holiday

This ZX81/TS1000 program displays an animated Christmas greeting with a scrolling message and a decorative tree scene rendered using block graphics. It embeds two machine code routines directly in a REM statement at line 1: one routine (called via USR 16550) appears to perform a fast block memory copy or clear, and another (USR 16514) provides a delay or synchronisation function. The scrolling text in line 31/44 alternates between a plain string (A$) and an inverse-video version (B$) to create a flashing effect as the message moves across the screen. Lines 999–1060 form a diagnostic/loader section that prints and verifies the hex data for the machine code, and line 2000 saves the program.


Program Analysis

Program Structure

The program is divided into three functional sections:

  1. Initialisation and display setup (lines 1–28): The REM statement at line 1 stores two machine code routines. Lines 10–28 call the first routine, define the scrolling strings, draw the static scene using block graphics, and configure display settings via POKE 16418.
  2. Main animation loop (lines 29–60): A FOR loop scrolls the greeting message across line 18, alternating between plain and inverse-video versions of the string for a flashing effect, with a machine code delay called between frames.
  3. Diagnostic/loader section (lines 999–2060): Lines 999–1060 print and verify the hex content of the machine code area for development purposes. Line 2000 saves the program and line 2010 returns to the main entry point.

Machine Code Routines

Two machine code routines are embedded in the REM at line 1. The REM data begins at address 16514 (the first byte after the line’s length bytes), and a second entry point is at 16550.

Entry pointCalled atApparent function
USR 16514Line 40Timing delay / frame sync between scroll steps
USR 16550Line 10Fast block memory operation (copy or clear using LDIR)

The hex string in line 1000 matches the REM content: key Z80 mnemonics visible in the byte sequence include ED B8 (LDDR), ED 52 (SBC HL,DE), E5 (PUSH HL), D1 (POP DE), and C9 (RET). The routine at 16550 loads a 16-bit address from (16448) (the ZX81 D_FILE system variable), computes offsets, and performs a block transfer — consistent with manipulating the display file. The HALT byte 76 appears twice at offset +36/+37, used as a padding or end-of-routine marker.

Display Techniques

The static scene on lines 20–25 uses ZX81 block graphic characters to render a stylised Christmas tree and a fireplace-like border. The tree silhouette is built from \'' (▀) and \': (▛) characters, with a trunk suggested by \:: (▌) pairs. The bottom border uses \:.\.. sequences to form a solid floor line.

The scrolling animation on lines 29–50 uses two pre-built strings of equal length: A$ contains the message with normal characters, and B$ contains the same text with inverse-video characters (e.g. %M%E%R%R%Y). On each iteration, B$ is printed first (line 31), the machine code delay runs (line 40), then A$ is printed (line 44), creating a flicker/flash effect as the text scrolls.

Key BASIC Idioms

  • POKE 16418,0 and POKE 16418,2 (lines 26/28) manipulate the MARGIN or a related system variable to control display scrolling behaviour — specifically suppressing the automatic scroll prompt.
  • FOR A=1 TO LEN A$-30 STEP 2 (line 29) steps through the string two characters at a time, since each display position consumes one character in the ZX81’s non-collapsed display file.
  • PRINT AT 0,INT (RND*32);"%." (line 30) scatters inverse-video dots randomly across the top row on each frame, simulating falling snow.
  • GOTO 29 (line 60) creates an infinite loop that continuously replays the scrolling animation.

Diagnostic Section

Lines 999–1060 appear to be a development aid. Line 1000 defines a string containing the expected hex bytes of the machine code. Lines 1030–1060 then PEEK each byte from address 16514 to 16600 and print it as a two-character hex string using the expression CHR$ (28+INT (B/16)) — offset 28 from ASCII space maps digits 0–9 and letters A–F by exploiting the ZX81 character set layout where digits start at code 28.

Notable Anomalies

  • Line 10 assigns the result of USR 16550 to A, but the return value is not used; the call is purely for its side effect on the display file.
  • The strings A$ and B$ include long runs of spaces at start and end, acting as padding to ensure the message scrolls fully on and off screen without boundary errors in the substring slice A$(A+1 TO A+30).
  • The STEP 2 on line 29 means only odd-indexed starting positions are used, which is consistent with the ZX81 display file structure where each character cell occupies a predictable offset.

Content

Appears On

Assembled by Tim Ward from many sources. Contains programs 10051 – 10121.

Related Products

Related Articles

Related Content

Image Gallery

Merry Christmas Message

Source Code

   1 REM \2A\10\40\01\29\01\ED\42\11\43\00\ED\52\E5\11\21\00\ED\52\D1\01\8C\01\ED\B8\EB\06\20\2B\36\80\10\FB\C9\76\76\06\16\2A\0C\40\23\7E\FE\76\28\04\36\80\18\F6\10\F4\C9
  10 LET A=USR 16550
  11 LET A$="                                    MERRY  CHRISTMAS       \.'\'.\.'\'.---\'.\!!% \.                                                 "
  12 LET B$="                                    %M%E%R%R%Y  %C%H%R%I%S%T%M%A%S       \ :\: \ :\: ---\'.\!!% \.                                                 "
  20 PRINT AT 13,0;"% % % % % \''\''\''   \''\''\''% % % % % % % \''\''\''    \''\''% % % \''\''             \''% % \''           \':\:                \,,\~~             \ :\:              \,,\~~               \ :"
  21 FOR A=17 TO 21
  22 PRINT AT A,0;"\:                               \ :"
  23 NEXT A
  25 PRINT AT 21,0;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:"
  26 POKE 16418,0
  27 PRINT AT 22,0;"% % % % % % % % % % % % % % % % % % % % % % % % % %R%Y%A%N% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % "
  28 POKE 16418,2
  29 FOR A=1 TO LEN A$-30 STEP 2
  30 PRINT AT 0,INT (RND*32);"%."
  31 PRINT AT 18,1;B$(A TO A+29)
  40 LET Z=USR 16514
  44 PRINT AT 18,1;A$(A+1 TO A+30)
  50 NEXT A
  60 GOTO 29
 999 REM CODE
1000 LET A$="2A1040114300ED52E5112100ED52D1018C01EDB8EB06202B308010FBC9767606162A0C40237EFE762804368018F610F4C9"
1010 PRINT A$
1020 PRINT ,,
1030 FOR A=16514 TO 16600
1040 LET B=PEEK A
1050 PRINT CHR$ (28+INT (B/16));CHR$ (28+B-(INT (B/16))*16);"  ";
1060 NEXT A
2000 SAVE "1010%4"
2010 GOTO 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top
B\FB\C9

Merry Christmas Message

This file is part of Timex Sinclair Public Domain Library Tape 1002 . Download the collection to get this file.
Developer(s): Ryan Gray
Date: 198x
Type: Program
Platform(s): TS 1000
Tags: Holiday

This ZX81/TS1000 program displays an animated Christmas greeting with a scrolling message and a decorative tree scene rendered using block graphics. It embeds two machine code routines directly in a REM statement at line 1: one routine (called via USR 16550) appears to perform a fast block memory copy or clear, and another (USR 16514) provides a delay or synchronisation function. The scrolling text in line 31/44 alternates between a plain string (A$) and an inverse-video version (B$) to create a flashing effect as the message moves across the screen. Lines 999–1060 form a diagnostic/loader section that prints and verifies the hex data for the machine code, and line 2000 saves the program.


Program Analysis

Program Structure

The program is divided into three functional sections:

  1. Initialisation and display setup (lines 1–28): The REM statement at line 1 stores two machine code routines. Lines 10–28 call the first routine, define the scrolling strings, draw the static scene using block graphics, and configure display settings via POKE 16418.
  2. Main animation loop (lines 29–60): A FOR loop scrolls the greeting message across line 18, alternating between plain and inverse-video versions of the string for a flashing effect, with a machine code delay called between frames.
  3. Diagnostic/loader section (lines 999–2060): Lines 999–1060 print and verify the hex content of the machine code area for development purposes. Line 2000 saves the program and line 2010 returns to the main entry point.

Machine Code Routines

Two machine code routines are embedded in the REM at line 1. The REM data begins at address 16514 (the first byte after the line’s length bytes), and a second entry point is at 16550.

Entry pointCalled atApparent function
USR 16514Line 40Timing delay / frame sync between scroll steps
USR 16550Line 10Fast block memory operation (copy or clear using LDIR)

The hex string in line 1000 matches the REM content: key Z80 mnemonics visible in the byte sequence include ED B8 (LDDR), ED 52 (SBC HL,DE), E5 (PUSH HL), D1 (POP DE), and C9 (RET). The routine at 16550 loads a 16-bit address from (16448) (the ZX81 D_FILE system variable), computes offsets, and performs a block transfer — consistent with manipulating the display file. The HALT byte 76 appears twice at offset +36/+37, used as a padding or end-of-routine marker.

Display Techniques

The static scene on lines 20–25 uses ZX81 block graphic characters to render a stylised Christmas tree and a fireplace-like border. The tree silhouette is built from \'' (▀) and \': (▛) characters, with a trunk suggested by \:: (▌) pairs. The bottom border uses \:.\.. sequences to form a solid floor line.

The scrolling animation on lines 29–50 uses two pre-built strings of equal length: A$ contains the message with normal characters, and B$ contains the same text with inverse-video characters (e.g. %M%E%R%R%Y). On each iteration, B$ is printed first (line 31), the machine code delay runs (line 40), then A$ is printed (line 44), creating a flicker/flash effect as the text scrolls.

Key BASIC Idioms

  • POKE 16418,0 and POKE 16418,2 (lines 26/28) manipulate the MARGIN or a related system variable to control display scrolling behaviour — specifically suppressing the automatic scroll prompt.
  • FOR A=1 TO LEN A$-30 STEP 2 (line 29) steps through the string two characters at a time, since each display position consumes one character in the ZX81’s non-collapsed display file.
  • PRINT AT 0,INT (RND*32);"%." (line 30) scatters inverse-video dots randomly across the top row on each frame, simulating falling snow.
  • GOTO 29 (line 60) creates an infinite loop that continuously replays the scrolling animation.

Diagnostic Section

Lines 999–1060 appear to be a development aid. Line 1000 defines a string containing the expected hex bytes of the machine code. Lines 1030–1060 then PEEK each byte from address 16514 to 16600 and print it as a two-character hex string using the expression CHR$ (28+INT (B/16)) — offset 28 from ASCII space maps digits 0–9 and letters A–F by exploiting the ZX81 character set layout where digits start at code 28.

Notable Anomalies

  • Line 10 assigns the result of USR 16550 to A, but the return value is not used; the call is purely for its side effect on the display file.
  • The strings A$ and B$ include long runs of spaces at start and end, acting as padding to ensure the message scrolls fully on and off screen without boundary errors in the substring slice A$(A+1 TO A+30).
  • The STEP 2 on line 29 means only odd-indexed starting positions are used, which is consistent with the ZX81 display file structure where each character cell occupies a predictable offset.

Content

Appears On

Assembled by Tim Ward from many sources. Contains programs 10051 – 10121.

Related Products

Related Articles

Related Content

Image Gallery

Merry Christmas Message

Source Code

   1 REM \2A\10\40\01\29\01\ED\42\11\43\00\ED\52\E5\11\21\00\ED\52\D1\01\8C\01\ED\B8\EB\06\20\2B\36\80\10\FB\C9\76\76\06\16\2A\0C\40\23\7E\FE\76\28\04\36\80\18\F6\10\F4\C9
  10 LET A=USR 16550
  11 LET A$="                                    MERRY  CHRISTMAS       \.'\'.\.'\'.---\'.\!!% \.                                                 "
  12 LET B$="                                    %M%E%R%R%Y  %C%H%R%I%S%T%M%A%S       \ :\: \ :\: ---\'.\!!% \.                                                 "
  20 PRINT AT 13,0;"% % % % % \''\''\''   \''\''\''% % % % % % % \''\''\''    \''\''% % % \''\''             \''% % \''           \':\:                \,,\~~             \ :\:              \,,\~~               \ :"
  21 FOR A=17 TO 21
  22 PRINT AT A,0;"\:                               \ :"
  23 NEXT A
  25 PRINT AT 21,0;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:"
  26 POKE 16418,0
  27 PRINT AT 22,0;"% % % % % % % % % % % % % % % % % % % % % % % % % %R%Y%A%N% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % "
  28 POKE 16418,2
  29 FOR A=1 TO LEN A$-30 STEP 2
  30 PRINT AT 0,INT (RND*32);"%."
  31 PRINT AT 18,1;B$(A TO A+29)
  40 LET Z=USR 16514
  44 PRINT AT 18,1;A$(A+1 TO A+30)
  50 NEXT A
  60 GOTO 29
 999 REM CODE
1000 LET A$="2A1040114300ED52E5112100ED52D1018C01EDB8EB06202B308010FBC9767606162A0C40237EFE762804368018F610F4C9"
1010 PRINT A$
1020 PRINT ,,
1030 FOR A=16514 TO 16600
1040 LET B=PEEK A
1050 PRINT CHR$ (28+INT (B/16));CHR$ (28+B-(INT (B/16))*16);"  ";
1060 NEXT A
2000 SAVE "1010%4"
2010 GOTO 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top
A

Merry Christmas Message

This file is part of Timex Sinclair Public Domain Library Tape 1002 . Download the collection to get this file.
Developer(s): Ryan Gray
Date: 198x
Type: Program
Platform(s): TS 1000
Tags: Holiday

This ZX81/TS1000 program displays an animated Christmas greeting with a scrolling message and a decorative tree scene rendered using block graphics. It embeds two machine code routines directly in a REM statement at line 1: one routine (called via USR 16550) appears to perform a fast block memory copy or clear, and another (USR 16514) provides a delay or synchronisation function. The scrolling text in line 31/44 alternates between a plain string (A$) and an inverse-video version (B$) to create a flashing effect as the message moves across the screen. Lines 999–1060 form a diagnostic/loader section that prints and verifies the hex data for the machine code, and line 2000 saves the program.


Program Analysis

Program Structure

The program is divided into three functional sections:

  1. Initialisation and display setup (lines 1–28): The REM statement at line 1 stores two machine code routines. Lines 10–28 call the first routine, define the scrolling strings, draw the static scene using block graphics, and configure display settings via POKE 16418.
  2. Main animation loop (lines 29–60): A FOR loop scrolls the greeting message across line 18, alternating between plain and inverse-video versions of the string for a flashing effect, with a machine code delay called between frames.
  3. Diagnostic/loader section (lines 999–2060): Lines 999–1060 print and verify the hex content of the machine code area for development purposes. Line 2000 saves the program and line 2010 returns to the main entry point.

Machine Code Routines

Two machine code routines are embedded in the REM at line 1. The REM data begins at address 16514 (the first byte after the line’s length bytes), and a second entry point is at 16550.

Entry pointCalled atApparent function
USR 16514Line 40Timing delay / frame sync between scroll steps
USR 16550Line 10Fast block memory operation (copy or clear using LDIR)

The hex string in line 1000 matches the REM content: key Z80 mnemonics visible in the byte sequence include ED B8 (LDDR), ED 52 (SBC HL,DE), E5 (PUSH HL), D1 (POP DE), and C9 (RET). The routine at 16550 loads a 16-bit address from (16448) (the ZX81 D_FILE system variable), computes offsets, and performs a block transfer — consistent with manipulating the display file. The HALT byte 76 appears twice at offset +36/+37, used as a padding or end-of-routine marker.

Display Techniques

The static scene on lines 20–25 uses ZX81 block graphic characters to render a stylised Christmas tree and a fireplace-like border. The tree silhouette is built from \'' (▀) and \': (▛) characters, with a trunk suggested by \:: (▌) pairs. The bottom border uses \:.\.. sequences to form a solid floor line.

The scrolling animation on lines 29–50 uses two pre-built strings of equal length: A$ contains the message with normal characters, and B$ contains the same text with inverse-video characters (e.g. %M%E%R%R%Y). On each iteration, B$ is printed first (line 31), the machine code delay runs (line 40), then A$ is printed (line 44), creating a flicker/flash effect as the text scrolls.

Key BASIC Idioms

  • POKE 16418,0 and POKE 16418,2 (lines 26/28) manipulate the MARGIN or a related system variable to control display scrolling behaviour — specifically suppressing the automatic scroll prompt.
  • FOR A=1 TO LEN A$-30 STEP 2 (line 29) steps through the string two characters at a time, since each display position consumes one character in the ZX81’s non-collapsed display file.
  • PRINT AT 0,INT (RND*32);"%." (line 30) scatters inverse-video dots randomly across the top row on each frame, simulating falling snow.
  • GOTO 29 (line 60) creates an infinite loop that continuously replays the scrolling animation.

Diagnostic Section

Lines 999–1060 appear to be a development aid. Line 1000 defines a string containing the expected hex bytes of the machine code. Lines 1030–1060 then PEEK each byte from address 16514 to 16600 and print it as a two-character hex string using the expression CHR$ (28+INT (B/16)) — offset 28 from ASCII space maps digits 0–9 and letters A–F by exploiting the ZX81 character set layout where digits start at code 28.

Notable Anomalies

  • Line 10 assigns the result of USR 16550 to A, but the return value is not used; the call is purely for its side effect on the display file.
  • The strings A$ and B$ include long runs of spaces at start and end, acting as padding to ensure the message scrolls fully on and off screen without boundary errors in the substring slice A$(A+1 TO A+30).
  • The STEP 2 on line 29 means only odd-indexed starting positions are used, which is consistent with the ZX81 display file structure where each character cell occupies a predictable offset.

Content

Appears On

Assembled by Tim Ward from many sources. Contains programs 10051 – 10121.

Related Products

Related Articles

Related Content

Image Gallery

Merry Christmas Message

Source Code

   1 REM \2A\10\40\01\29\01\ED\42\11\43\00\ED\52\E5\11\21\00\ED\52\D1\01\8C\01\ED\B8\EB\06\20\2B\36\80\10\FB\C9\76\76\06\16\2A\0C\40\23\7E\FE\76\28\04\36\80\18\F6\10\F4\C9
  10 LET A=USR 16550
  11 LET A$="                                    MERRY  CHRISTMAS       \.'\'.\.'\'.---\'.\!!% \.                                                 "
  12 LET B$="                                    %M%E%R%R%Y  %C%H%R%I%S%T%M%A%S       \ :\: \ :\: ---\'.\!!% \.                                                 "
  20 PRINT AT 13,0;"% % % % % \''\''\''   \''\''\''% % % % % % % \''\''\''    \''\''% % % \''\''             \''% % \''           \':\:                \,,\~~             \ :\:              \,,\~~               \ :"
  21 FOR A=17 TO 21
  22 PRINT AT A,0;"\:                               \ :"
  23 NEXT A
  25 PRINT AT 21,0;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:"
  26 POKE 16418,0
  27 PRINT AT 22,0;"% % % % % % % % % % % % % % % % % % % % % % % % % %R%Y%A%N% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % "
  28 POKE 16418,2
  29 FOR A=1 TO LEN A$-30 STEP 2
  30 PRINT AT 0,INT (RND*32);"%."
  31 PRINT AT 18,1;B$(A TO A+29)
  40 LET Z=USR 16514
  44 PRINT AT 18,1;A$(A+1 TO A+30)
  50 NEXT A
  60 GOTO 29
 999 REM CODE
1000 LET A$="2A1040114300ED52E5112100ED52D1018C01EDB8EB06202B308010FBC9767606162A0C40237EFE762804368018F610F4C9"
1010 PRINT A$
1020 PRINT ,,
1030 FOR A=16514 TO 16600
1040 LET B=PEEK A
1050 PRINT CHR$ (28+INT (B/16));CHR$ (28+B-(INT (B/16))*16);"  ";
1060 NEXT A
2000 SAVE "1010%4"
2010 GOTO 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top
CE\FE\F6\F4\C9 10 LET A=USR 16550 11 LET A$=" MERRY CHRISTMAS \.'\'.\.'\'.---\'.\!!% \. " 12 LET B$=" %M%E%R%R%Y %C%H%R%I%S%T%M%A%S \ :\: \ :\: ---\'.\!!% \. " 20 PRINT AT 13,0;"% % % % % \''\''\'' \''\''\''% % % % % % % \''\''\'' \''\''% % % \''\'' \''% % \'' \':\: \,,\~~ \ :\: \,,\~~ \ :" 21 FOR A=17 TO 21 22 PRINT AT A,0;"\: \ :" 23 NEXT A 25 PRINT AT 21,0;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:" 26 POKE 16418,0 27 PRINT AT 22,0;"% % % % % % % % % % % % % % % % % % % % % % % % % %R%Y%A%N% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % " 28 POKE 16418,2 29 FOR A=1 TO LEN A$-30 STEP 2 30 PRINT AT 0,INT (RND*32);"%." 31 PRINT AT 18,1;B$(A TO A+29) 40 LET Z=USR 16514 44 PRINT AT 18,1;A$(A+1 TO A+30) 50 NEXT A 60 GOTO 29 999 REM CODE \n1000 LET A$="2A1040114300ED52E5112100ED52D1018C01EDB8EB06202B308010FBC9767606162A0C40237EFE762804368018F610F4C9" \n1010 PRINT A$ \n1020 PRINT ,, \n1030 FOR A=16514 TO 16600 \n1040 LET B=PEEK A \n1050 PRINT CHR$ (28+INT (B/16));CHR$ (28+B-(INT (B/16))*16);" "; \n1060 NEXT A \n2000 SAVE "1010%4" \n2010 GOTO 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top