Revision 0.5.0
- massive overhaul of architecture - first round of optimizations - first draft of the technical manual for the entire library - reorganization of directory structure
This commit is contained in:
parent
34b6a34753
commit
9f35f32f67
|
@ -1 +0,0 @@
|
|||
theme: jekyll-theme-hacker
|
|
@ -1,6 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
source "https://rubygems.org"
|
||||
gem "github-pages", group: :jekyll_plugins
|
||||
|
||||
# gem "rails"
|
|
@ -1,248 +0,0 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (4.2.10)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.5.2)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.11.1)
|
||||
colorator (1.1.0)
|
||||
commonmarker (0.17.13)
|
||||
ruby-enum (~> 0.5)
|
||||
concurrent-ruby (1.1.4)
|
||||
dnsruby (1.61.2)
|
||||
addressable (~> 2.5)
|
||||
em-websocket (0.5.1)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
ethon (0.11.0)
|
||||
ffi (>= 1.3.0)
|
||||
eventmachine (1.2.7-x64-mingw32)
|
||||
execjs (2.7.0)
|
||||
faraday (0.15.4)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ffi (1.10.0-x64-mingw32)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.0)
|
||||
github-pages (193)
|
||||
activesupport (= 4.2.10)
|
||||
github-pages-health-check (= 1.8.1)
|
||||
jekyll (= 3.7.4)
|
||||
jekyll-avatar (= 0.6.0)
|
||||
jekyll-coffeescript (= 1.1.1)
|
||||
jekyll-commonmark-ghpages (= 0.1.5)
|
||||
jekyll-default-layout (= 0.1.4)
|
||||
jekyll-feed (= 0.11.0)
|
||||
jekyll-gist (= 1.5.0)
|
||||
jekyll-github-metadata (= 2.9.4)
|
||||
jekyll-mentions (= 1.4.1)
|
||||
jekyll-optional-front-matter (= 0.3.0)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-readme-index (= 0.2.0)
|
||||
jekyll-redirect-from (= 0.14.0)
|
||||
jekyll-relative-links (= 0.5.3)
|
||||
jekyll-remote-theme (= 0.3.1)
|
||||
jekyll-sass-converter (= 1.5.2)
|
||||
jekyll-seo-tag (= 2.5.0)
|
||||
jekyll-sitemap (= 1.2.0)
|
||||
jekyll-swiss (= 0.4.0)
|
||||
jekyll-theme-architect (= 0.1.1)
|
||||
jekyll-theme-cayman (= 0.1.1)
|
||||
jekyll-theme-dinky (= 0.1.1)
|
||||
jekyll-theme-hacker (= 0.1.1)
|
||||
jekyll-theme-leap-day (= 0.1.1)
|
||||
jekyll-theme-merlot (= 0.1.1)
|
||||
jekyll-theme-midnight (= 0.1.1)
|
||||
jekyll-theme-minimal (= 0.1.1)
|
||||
jekyll-theme-modernist (= 0.1.1)
|
||||
jekyll-theme-primer (= 0.5.3)
|
||||
jekyll-theme-slate (= 0.1.1)
|
||||
jekyll-theme-tactile (= 0.1.1)
|
||||
jekyll-theme-time-machine (= 0.1.1)
|
||||
jekyll-titles-from-headings (= 0.5.1)
|
||||
jemoji (= 0.10.1)
|
||||
kramdown (= 1.17.0)
|
||||
liquid (= 4.0.0)
|
||||
listen (= 3.1.5)
|
||||
mercenary (~> 0.3)
|
||||
minima (= 2.5.0)
|
||||
nokogiri (>= 1.8.2, < 2.0)
|
||||
rouge (= 2.2.1)
|
||||
terminal-table (~> 1.4)
|
||||
github-pages-health-check (1.8.1)
|
||||
addressable (~> 2.3)
|
||||
dnsruby (~> 1.60)
|
||||
octokit (~> 4.0)
|
||||
public_suffix (~> 2.0)
|
||||
typhoeus (~> 1.3)
|
||||
html-pipeline (2.10.0)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.7.4)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 0.7)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 1.14)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (>= 1.7, < 4)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-avatar (0.6.0)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-coffeescript (1.1.1)
|
||||
coffee-script (~> 2.2)
|
||||
coffee-script-source (~> 1.11.1)
|
||||
jekyll-commonmark (1.2.0)
|
||||
commonmarker (~> 0.14)
|
||||
jekyll (>= 3.0, < 4.0)
|
||||
jekyll-commonmark-ghpages (0.1.5)
|
||||
commonmarker (~> 0.17.6)
|
||||
jekyll-commonmark (~> 1)
|
||||
rouge (~> 2)
|
||||
jekyll-default-layout (0.1.4)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-feed (0.11.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-gist (1.5.0)
|
||||
octokit (~> 4.2)
|
||||
jekyll-github-metadata (2.9.4)
|
||||
jekyll (~> 3.1)
|
||||
octokit (~> 4.0, != 4.4.0)
|
||||
jekyll-mentions (1.4.1)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-optional-front-matter (0.3.0)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-readme-index (0.2.0)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-redirect-from (0.14.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-relative-links (0.5.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-remote-theme (0.3.1)
|
||||
jekyll (~> 3.5)
|
||||
rubyzip (>= 1.2.1, < 3.0)
|
||||
jekyll-sass-converter (1.5.2)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.5.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (1.2.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-swiss (0.4.0)
|
||||
jekyll-theme-architect (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-cayman (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-dinky (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-hacker (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-leap-day (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-merlot (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-midnight (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-minimal (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-modernist (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-primer (0.5.3)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-github-metadata (~> 2.9)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-slate (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-tactile (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-time-machine (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-titles-from-headings (0.5.1)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-watch (2.1.2)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.10.1)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (~> 3.0)
|
||||
kramdown (1.17.0)
|
||||
liquid (4.0.0)
|
||||
listen (3.1.5)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.4.0)
|
||||
minima (2.5.0)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-feed (~> 0.9)
|
||||
jekyll-seo-tag (~> 2.1)
|
||||
minitest (5.11.3)
|
||||
multipart-post (2.0.0)
|
||||
nokogiri (1.10.0-x64-mingw32)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
octokit (4.13.0)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (2.0.5)
|
||||
rb-fsevent (0.10.3)
|
||||
rb-inotify (0.10.0)
|
||||
ffi (~> 1.0)
|
||||
rouge (2.2.1)
|
||||
ruby-enum (0.7.2)
|
||||
i18n
|
||||
ruby_dep (1.5.0)
|
||||
rubyzip (1.2.2)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.7.3)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
sawyer (0.8.1)
|
||||
addressable (>= 2.3.5, < 2.6)
|
||||
faraday (~> 0.8, < 1.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thread_safe (0.3.6)
|
||||
typhoeus (1.3.1)
|
||||
ethon (>= 0.9.0)
|
||||
tzinfo (1.2.5)
|
||||
thread_safe (~> 0.1)
|
||||
unicode-display_width (1.4.1)
|
||||
|
||||
PLATFORMS
|
||||
x64-mingw32
|
||||
|
||||
DEPENDENCIES
|
||||
github-pages
|
||||
|
||||
BUNDLED WITH
|
||||
2.0.1
|
|
@ -1,7 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
source "https://rubygems.org"
|
||||
|
||||
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
||||
|
||||
# gem "rails"
|
|
@ -1,6 +0,0 @@
|
|||
- name: Home
|
||||
link: /
|
||||
- name: About
|
||||
link: /about.html
|
||||
- name: Blog
|
||||
link: /blog.html
|
|
@ -1,7 +0,0 @@
|
|||
---
|
||||
layout: default
|
||||
---
|
||||
<h1>{{ page.title }}</h1>
|
||||
<p>{{ page.date | date_to_string }} - {{ page.author }}</p>
|
||||
|
||||
{{ content }}
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
layout: post
|
||||
author: nathan
|
||||
---
|
||||
As you might imagine, I'm trying to figure out Jekyll. Once I do, I'll start blogging about changes to and struggles with the AppleIIAsmLib. Thanks for watching!
|
|
@ -1,14 +0,0 @@
|
|||
---
|
||||
layout: default
|
||||
title: Blog
|
||||
---
|
||||
<h1>Latest Posts</h1>
|
||||
|
||||
<ul>
|
||||
{% for post in site.posts %}
|
||||
<li>
|
||||
<h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
|
||||
<p>{{ post.excerpt }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/d1_stdio.dsk
BIN
bin/d1_stdio.dsk
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/d4_math.dsk
BIN
bin/d4_math.dsk
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/d8_lores.dsk
BIN
bin/d8_lores.dsk
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,377 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* DEMO.COMMON *
|
||||
* *
|
||||
* A DEMO OF THE MACROS AND *
|
||||
* SUBROUTINES IN THE COMMON *
|
||||
* APPLEIIASM LIBRARY. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 30-JUN-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP ONLY
|
||||
TR ON
|
||||
DSK DEMO.COMMON
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TOP INCLUDES (HOOKS,MACROS) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT MIN.HEAD.REQUIRED
|
||||
USE MIN.MAC.REQUIRED
|
||||
PUT MIN.HOOKS.COMMON
|
||||
USE MIN.MAC.COMMON
|
||||
]HOME EQU $FC58
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PROGRAM MAIN BODY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
JSR ]HOME
|
||||
_PRN "COMMON SUBROUTINE LIBRARY",8D
|
||||
_PRN "=========================",8D8D
|
||||
_PRN "THIS LIBRARY CONTAINES MACROS AND",8D
|
||||
_PRN "SUBROUTINES THAT MIGHT BE COMMONLY",8D
|
||||
_PRN "USED BY A BROAD RANGE OF PROGRAMS.",8D8D
|
||||
_PRN "THIS DEMO WILL ALSO ILLUSTRATE THE",8D
|
||||
_PRN "USE OF SOME MACROS IN THE REQUIRED",8D
|
||||
_PRN "LIBRARY FOR THE FIRST TIME. WE WILL",8D
|
||||
_PRN "MAKE IT CLEAR WHEN WE SWITCH LIBRARIES,",8D
|
||||
_PRN "BUT FOR QUICK REFERENCE THE MACROS",8D
|
||||
_PRN "IN EACH LIBRARY ARE:",8D8D
|
||||
_WAIT
|
||||
_PRN "REQUIRED MACROS: _ISLIT,_AXLIT,",8D
|
||||
_PRN "_ISSTR,_AXSTR,GRET,SPAR,DUMP,_PRN,",8D
|
||||
_PRN "_WAIT,ERRH,CLRHI",8D8D
|
||||
_WAIT
|
||||
_PRN "COMMON: MFILL,MMOVE,MSWAP,BEEP,DELAY,",8D
|
||||
_PRN "ZSAVE,ZLOAD",8D8D
|
||||
_WAIT
|
||||
_PRN "LET'S START WITH THE MOST USED REQUIRED MACROS."
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "REQUIRED LIBRARY: MOST USED",8D
|
||||
_PRN "===========================",8D8D
|
||||
_PRN "BY 'MOST USED' HERE, WE MEAN MOST",8D
|
||||
_PRN "USED BY THESE SHORT DEMOS. IN",8D
|
||||
_PRN "REALITY, OTHER MACROS ARE PROBABLY",8D
|
||||
_PRN "UTILIZED MUCH MORE OFTEN, BUT IT",8D
|
||||
_PRN "HAPPENS BEHIND THE SCENES.",8D8D
|
||||
_WAIT
|
||||
_PRN "THE TWO MOST APPARENT MACROS ",8D
|
||||
_PRN "SHOULD BE FAMILIAR IF YOU HAVE",8D
|
||||
_PRN "ALREADY EXPLORED THE STDIO LIBRARY:",8D
|
||||
_PRN "_PRN AND _WAIT. THESE ARE NEAR",8D
|
||||
_PRN "CARBON COPIES OF THEIR EQUIVALENT",8D
|
||||
_PRN "ROUTINES IN STDIO, AND ARE HERE FOR",8D
|
||||
_PRN "THE MOSTLY RARE CASES WHEN SOME",8D
|
||||
_PRN "MINOR INPUT AND OUTPUT ARE NECESSARY",8D
|
||||
_PRN "BUT WITHOUT THE NEED FOR USING THE",8D
|
||||
_PRN "STDIO LIBRARY. SINCE THESE EXIST",8D
|
||||
_PRN "AS PART OF THE ERQUIRED LIBRARY, YOU",8D
|
||||
_PRN "CAN USE THESE IN PLACE OF STDIO IF",8D
|
||||
_PRN "YOUR PROGRAM REQUIRES NO MORE THAN THIS",8D
|
||||
_PRN "BASIC FUNCTIONALITY."
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "THE _PRN MACRO PRINTS A STRING THAT",8D
|
||||
_PRN "IS EITHER GIVEN AS A PARAMETER OR",8D
|
||||
_PRN "RESIDES AT A GIVEN ADDRESS AND IS",8D
|
||||
_PRN "TERMINATED BY A NULL BYTE ($00). THUS:",8D8D
|
||||
_WAIT
|
||||
_PRN " _PRN 'HELLO, WORLD!'",8D
|
||||
_PRN " _PRN #STRING1",8D
|
||||
_PRN " _PRN INDIRECT",8D8D
|
||||
_WAIT
|
||||
_PRN "ARE ALL VALID USES OF _PRN. THE FIRST",8D
|
||||
_PRN "PRINTS THE GIVEN STRING, THE SECOND",8D
|
||||
_PRN "PRINTS NULL-TERMINATED STRING AT THE",8D
|
||||
_PRN "STRING1 ADDRESS, AND THE THIRD PRINTS",8D
|
||||
_PRN "A NULL-TERMINATED STRING AT THE",8D
|
||||
_PRN "ADDRESS POINTED TO IN THE ADDRESS HELD",8D
|
||||
_PRN "IN INDIRECT.",8D8D
|
||||
_WAIT
|
||||
_PRN "THE WAIT MACRO DOES EXACTLY WHAT ",8D
|
||||
_PRN "IT SAYS: IT WAITS FOR A KEYPRESS. THE",8D
|
||||
_PRN "KEY PRESSED IS PASSED BACK IN .A"
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "MEMORY DUMPS",8D
|
||||
_PRN "============",8D8D
|
||||
_PRN "THE OTHER MACRO MOST USED IN",8D
|
||||
_PRN "THESE DEMOS IS THE DUMP MACRO, WHICH",8D
|
||||
_PRN "OUTPUTS THE HEX VALUES AT A GIVEN",8D
|
||||
_PRN "ADDRESS RANGE. THEREFORE:",8D8D
|
||||
_WAIT
|
||||
_PRN " LDA #$33",8D
|
||||
_PRN " STA $300",8D
|
||||
_PRN " STA $301",8D
|
||||
_PRN " STA $302",8D
|
||||
_PRN " DUMP #$300;#10",8D8D
|
||||
_PRN "WILL OUTPUT",8D8D
|
||||
_WAIT
|
||||
LDA #$33
|
||||
STA $300
|
||||
STA $301
|
||||
STA $302
|
||||
DUMP #$300;#10
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "PARAMETERS AND RETURNS",8D
|
||||
_PRN "======================",8D8D
|
||||
_PRN "NEARLY EVERY SUBROUTINE IN THIS",8D
|
||||
_PRN "SET OF LIBRARIES UTILIZES THE",8D
|
||||
_PRN "SAME MEMORY LOCATION FOR RETURNING",8D
|
||||
_PRN "RESULTS, SAVE FOR THOSE THAT RETURN",8D
|
||||
_PRN "NOTHING. THIS LOCATION IS REFERENCED",8D
|
||||
_PRN "IN THE CODE AS THE 'RETURN' HOOK.",8D8D
|
||||
_WAIT
|
||||
_PRN "THE GRET MACRO CAN BE USED TO COPY",8D
|
||||
_PRN "THE RETURNED DATA TO A MORE PERMANENT",8D
|
||||
_PRN "LOCATION FOR RETRIEVAL LATER ON. SO:",8D8D
|
||||
_PRN " GRET #$300",8D8D
|
||||
_WAIT
|
||||
_PRN "COPIES THE DATA FROM RETURN INTO THE",8D
|
||||
_PRN "SPECIFIED LOCATION ($300). NOTE THAT",8D
|
||||
_PRN "THE LENGTH OF THE RETURN VALUE IS",8D
|
||||
_PRN "KNOWN VIA THE 'RETLEN' HOOK, WHICH",8D
|
||||
_PRN "POINTS TO A LENGTH BYTE PRECEDING RETURN"
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "INTERNAL MACROS",8D
|
||||
_PRN "===============",8D8D
|
||||
_PRN "THE MACROS _ISLIT, _AXLIT,",8D
|
||||
_PRN "_ISSTR AND _AXSTR ARE ALL MACROS USED",8D
|
||||
_PRN "BY OTHER MACROS TO DETERMINE WHAT",8D
|
||||
_PRN "KIND OF DATA IS BEING MASSED, THEN",8D
|
||||
_PRN "TRANSLATING THAT TO A MACHINE-FRIENDLY",8D
|
||||
_PRN "FORM. THESE MACROS ARE RESPONSIBLE",8D
|
||||
_PRN "FOR A MACRO'S ABILITY TO ACCEPT",8D
|
||||
_PRN "DIRECT OR INDIRECT ADDRESSING, AS",8D
|
||||
_PRN "WELL AS LITERAL STRINGS.",8D8D
|
||||
_WAIT
|
||||
_PRN "THIS CAN BE EASILY SEEN IN",8D
|
||||
_PRN "MANY MACROS THAT ACCEPT EITHER ",8D
|
||||
_PRN "STRINGS OR ADDRESSES. FIRST, THE",8D
|
||||
_PRN "PARAMETER IS PASSED TO EITHER THE",8D
|
||||
_PRN "_ISSTR MACRO OR THE _AXSTR MACRO;",8D
|
||||
_PRN "THESE ARE FUNCTIONALLY EQUIVALENT AND",8D
|
||||
_PRN "TEST WHETHER OR NOT THE PARAMETER",8D
|
||||
_PRN "IS A STRING OR ADDRESS, BUT DIFFER IN",8D
|
||||
_PRN "HOW THAT DATA IS THEN PASSED TO THE",8D
|
||||
_PRN "APPROPRIATE SUBROUTINE.",8D
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "_ISSTR PASSES DATA VIA THE STACK,",8D
|
||||
_PRN "WHEREAS_AXSTR PASSES VIA .A AND .X,"8D
|
||||
_PRN "WHICH HOLD THE LO AND HI BYTES OF THE",8D
|
||||
_PRN "ADDRESS OF THE STRING, RESPECTIVELY.",8D
|
||||
_PRN "WHICH MACRO TO USE IS PRIMARILY",8D
|
||||
_PRN "DETERMINED BY THE SUBROUTINE BEING",8D
|
||||
_PRN "CALLED, AS THEY EITHER USE ONE OR",8D
|
||||
_PRN "THE OTHER METHODS OF PASSING",8D
|
||||
_PRN "PARAMETERS. A RULE OF THUMB IS THAT",8D
|
||||
_PRN "IF THERE ARE FEWER THAN 4 BYTES",8D
|
||||
_PRN "TO BE PASSED, THEN PASSING IS DONE",8D
|
||||
_PRN "VIA REGISTERS TO SPARE A FEW CYCLES;",8D
|
||||
_PRN "OTHERWISE, THE STACK IS USED.",8D8D
|
||||
_WAIT
|
||||
_PRN "_ISLIT AND _AXLIT USE THE SAME LOGIC",8D
|
||||
_PRN "FOR THE PASSING OF PARAMETERS, BUT ARE",8D
|
||||
_PRN "USED TO DETERMINE WHETHER THE PARAMETER",8D
|
||||
_PRN "BEING PASSED IS A LITERAL VALUE OR A",8D
|
||||
_PRN "MEMORY LOCATION. IF THE PARAMETER IS",8D
|
||||
_PRN "A LITERAL, THEN THE MACRO SENDS IT",8D
|
||||
_PRN "AS A 2-BYTE ADDRESS THAT INDICATES",8D
|
||||
_PRN "THE DATA IS LOCATED AT THAT ADDRESS.",8D
|
||||
_PRN "IF, HOWEVER, A NON-LITERAL ADDRESS IS",8D
|
||||
_PRN "PASSED, THE LIBRARY INTERPRETS THIS AS",8D
|
||||
_PRN "AN INDIRECT REFERENCE, WHERE THE ",8D
|
||||
_PRN "ADDRESS PASSED IS A POINTER TO THE",8D
|
||||
_PRN "ACTUAL ADDRESS OF THE DATA."
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "THE REQUIRED LEFTOVERS",8D
|
||||
_PRN "======================",8D8D
|
||||
_PRN "OTHER MACROS IN THE REQUIRED LIBRARY",8D
|
||||
_PRN "ARE RARELY USED OUTSIDE OF THE",8D
|
||||
_PRN "LIBRARY ITSELF IN THE DEMOS, IF AT ALL.",8D
|
||||
_PRN "THIS INCLUDES THE ERRH AND CLRHI MACROS.",8D8D
|
||||
_WAIT
|
||||
_PRN "CLRHI TAKES ONE BYTE AND CLEARS ITS",8D
|
||||
_PRN "HIGH NIBBLE, AND IS USEFUL FOR THE",8D
|
||||
_PRN "IMPLEMENTATION OF LOOKUP TABLES, AMONG ",8D
|
||||
_PRN "OTHER USES. THE ERRH MACRO PASSES THE",8D
|
||||
_PRN "PROVIDED ADDRESS TO APPLESOFT AS A HOOK",8D
|
||||
_PRN "FOR ERROR-HANDLING, AND CAN BE THOUGHT",8D
|
||||
_PRN "OF AS A 'ONERR GOTO ###' COMMAND FOR",8D
|
||||
_PRN "ASSEMBLY. NOTE THAT THIS DOESN'T CATCH",8D
|
||||
_PRN "JUST ANY ERRORS IN YOUR CODE--YOU ",8D
|
||||
_PRN "STILL HAVE TO FIGURE THAT OUT YOURSELF.",8D
|
||||
_PRN "THE ERROR-HANDLING IS SPECIFIC TO ",8D
|
||||
_PRN "INTERFACING WITH APPLESOFT."
|
||||
_WAIT
|
||||
*
|
||||
JSR ]HOME
|
||||
_PRN "COMMON MACROS, FINALLY!",8D
|
||||
_PRN "=======================",8D8D
|
||||
_PRN "WE CAN NOW MOVE ON TO THE",8D
|
||||
_PRN "MACROS IN THE COMMON LIBRARY. MOST",8D
|
||||
_PRN "OF THESE CURRENTLY FOCUS ON MEMORY",8D
|
||||
_PRN "MANAGEMENT, AND WE WILL ADDRESS THOSE",8D
|
||||
_PRN "FIRST: MFILL, MMOVE, MSWAP, ZLOAD AND",8D
|
||||
_PRN "ZSAVE."
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "MEMORY MANAGEMENT",8D
|
||||
_PRN "=================",8D8D
|
||||
_PRN "MFILL FILLS A RANGE OF MEMORY STARTING",8D
|
||||
_PRN "AT THE GIVEN ADDRESS WITH THE GIVEN",8D
|
||||
_PRN "FILL VALUE. THUS:",8D8D
|
||||
_PRN " MFILL #$300;#10;#0",8D8D
|
||||
_PRN "FILLS $300-$309 WITH ZEROS. WE CAN",8D
|
||||
_PRN "VERIFY THIS WITH A DUMP:",8D
|
||||
_WAIT
|
||||
MFILL #$300;#10;#0
|
||||
DUMP #$300;#10
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "MMOVE SUITABLY MOVES (OR COPIES) A",8D
|
||||
_PRN "BLOCK OF MEMORY FROM ONE ADDRESS",8D
|
||||
_PRN "RANGE TO ANOTHER. SO:",8D8D
|
||||
_WAIT
|
||||
_PRN " MMOVE #$300;#$320;#10",8D
|
||||
_PRN " DUMP #$320;#10",8D8D
|
||||
_PRN "WILL COPY THE TEN ZEROS AT $300",8D
|
||||
_PRN "TO $320-$329, THEN DUMP THE RESULTS:",8D
|
||||
MMOVE #$300;#$320;#10
|
||||
DUMP #$320;#10
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "SIMILARLY, MSWAP SWAPS THE DATA IN ",8D
|
||||
_PRN "THE GIVEN MEMORY RANGES. SO, TO SWAP",8D
|
||||
_PRN "$300-309 WITH $310-$319, WE'D WRITE:",8D8D
|
||||
_PRN " MSWAP #$300;#$310;#10",8D8D
|
||||
_PRN "NOW WHEN WE DUMP $300 AGAIN, IT HAS:",8D
|
||||
_WAIT
|
||||
MSWAP #$300;#$310;#10
|
||||
DUMP #$300;#10
|
||||
DUMP #$310;#10
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "ZERO-PAGE BACKUPS",8D
|
||||
_PRN "=================",8D8D
|
||||
_PRN "THIS LIBRARY USES NEARLY EVERY",8D
|
||||
_PRN "PART OF THE ZERO PAGE THAT IS",8D
|
||||
_PRN "UNUSED BY DOS, APPLESOFT OR THE ",8D
|
||||
_PRN "MONITOR. AT TIMES, YOU MAY WANT TO",8D
|
||||
_PRN "USE THOSE LOCATIONS YOURSELF WITHOUT",8D
|
||||
_PRN "THE RISK OF THE LIBRARY WRITING OVER",8D
|
||||
_PRN "YOUR DATA. THAT'S WHERE ZSAVE AND",8D
|
||||
_PRN "ZLOAD COME INTO PLAY.",8D8D
|
||||
_WAIT
|
||||
_PRN "ZSAVE BACKUPS THE ZERO-PAGE MEMORY THAT",8D
|
||||
_PRN "IS UNUSED BY DOS/APPLESOFT/MONITOR,",8D
|
||||
_PRN "COPYING IT TO THE SPECIFIED LOCATION. ",8D
|
||||
_PRN "THEN, ZLOAD IS USED TO RESTORE THOSE",8D
|
||||
_PRN "'UNUSED' BYTES TO YOUR OWN DATA AFTER A",8D
|
||||
_PRN "LIBRARY ROUTINE IS CALLED.",8D
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "SO, WE CAN SAVE THE ZERO-PAGE AT $300",8D
|
||||
_PRN "WITH THE FOLLOWING:",8D8D
|
||||
_PRN " ZSAVE #$300",8D8D
|
||||
_PRN "AND THEN CHANGE THE ZERO PAGE SLIGHTLY:",8D8D
|
||||
_PRN " LDA #$99",8D
|
||||
_PRN " STA $06",8D
|
||||
_PRN " STA $07",8D
|
||||
_PRN " STA $08",8D
|
||||
_PRN " STA $09",8D
|
||||
_PRN " STA $19",8D8D
|
||||
ZSAVE #$300
|
||||
LDA #$99
|
||||
STA $06
|
||||
STA $07
|
||||
STA $08
|
||||
STA $09
|
||||
STA $19
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "NOW WE'LL DUMP THE ZERO PAGE TO",8D
|
||||
_PRN "SHOW THE CHANGES:",8D
|
||||
DUMP #$0;#10
|
||||
DUMP #10;#10
|
||||
DUMP #20;#10
|
||||
_PRN " ",8D8D
|
||||
_PRN "NOTE THAT ALREADY, THE $10 HAS BEEN",8D
|
||||
_PRN "CHANGED BY THE LIBRARY! THUS THE",8D
|
||||
_PRN "NEED FOR A BACKUP. SO, IN ORDER",8D
|
||||
_PRN "TO RECOVER OUR ZERO PAGE, USE ZLOAD:",8D8D
|
||||
_PRN " ZLOAD #$300",8D8D
|
||||
_WAIT
|
||||
_PRN "WHICH WILL THEN LEAVE US WITH:",8D
|
||||
_WAIT
|
||||
ZLOAD #$300
|
||||
DUMP #0;#10
|
||||
DUMP #10;#10
|
||||
DUMP #20;#10
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "BEEP AND DELAY",8D
|
||||
_PRN "==============",8D8D
|
||||
_PRN "LASTLY, WE HAVE THE BEEP MACRO",8D
|
||||
_PRN "AND THE DELAY MACRO FROM THE",8D
|
||||
_PRN "COMMON LIBRARY. THESE ARE PRETTY",8D
|
||||
_PRN "SELF-EXPLANATORY: 'BEEP' SENDS THE",8D
|
||||
_PRN "STANDARD TONE TO THE SPEAKER FOR ",8D
|
||||
_PRN "SPECIFIED NUMBER OF CYCLES, WHILE ",8D
|
||||
_PRN "DELAY SUSPENDS EXECUTION FOR THE",8D
|
||||
_PRN "SPECIFIED NUMBER OF MILLISECONDS. ",8D
|
||||
_PRN "SO: ",8D8D
|
||||
_PRN " BEEP #10",8D
|
||||
_PRN " DELAY #255",8D
|
||||
_PRN " BEEP #20",8D
|
||||
_PRN " DELAY #255",8D
|
||||
_PRN " BEEP #30",8D8D
|
||||
_PRN "RESULTS IN:",8D8D
|
||||
_WAIT
|
||||
BEEP #10
|
||||
DELAY #255
|
||||
BEEP #20
|
||||
DELAY #255
|
||||
BEEP #30
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "WE'RE DONE HERE!",8D8D8D
|
||||
*
|
||||
JMP REENTRY
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BOTTOM INCLUDES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** BOTTOM INCLUDES
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINE INCLUDES
|
||||
*
|
||||
* COMMON LIBRARY SUBROUTINES
|
||||
*
|
||||
PUT MIN.SUB.DELAYMS
|
||||
PUT MIN.SUB.MEMFILL
|
||||
PUT MIN.SUB.MEMMOVE
|
||||
PUT MIN.SUB.MEMSWAP
|
||||
PUT MIN.SUB.ZMSAVE
|
||||
PUT MIN.SUB.ZMLOAD
|
|
@ -0,0 +1,84 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* HEAD.REQUIRED *
|
||||
* *
|
||||
* THIS HEADER MUST BE THE *
|
||||
* INCLUDED BEFORE ANY OTHER *
|
||||
* CODE IN ORDER FOR THE PROPER *
|
||||
* FUNCTIONING OF THE LIBRARY. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 30-JUN-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
* VARIABLE DECLARATIONS ********
|
||||
*
|
||||
** JUMP TABLE SETUP. THIS IS FOR LOADING
|
||||
** SUBROUTINES INTO MEMORY FOR ACCESS BY
|
||||
** EXTERNAL EXECUTIONS. NOTE THAT THIS
|
||||
** SHOULD ALWAYS START AT SECOND BYTE OF
|
||||
** CODE IN THE PROGRAM SO THAT ITS
|
||||
** LOCATION IN MEMORY IS EASILY KNOWN.
|
||||
*
|
||||
JUMPTBL JMP MAIN_START ; ** ALWAYS ** START WITH
|
||||
; JUMP TO MAIN_START
|
||||
DS 32 ; 16 MORE ENTRIES
|
||||
*
|
||||
** 20 BYTES FOR VARIABLES
|
||||
*
|
||||
VARTAB DS 20
|
||||
*
|
||||
** 256 BYTES DEDICATED TO RETURN
|
||||
** VALUES OF VARIABLE LENGTH; CAN BE
|
||||
** MODIFIED TO SUIT SMALLER OR LARGER
|
||||
** NEEDS.
|
||||
*
|
||||
RETLEN DS 1 ; RETURN VALUE BYTE LENGTH
|
||||
RETURN DS 256
|
||||
*
|
||||
** ADDRESS STORAGE LOCATIONS FOR
|
||||
** INDIRECT ADDRESSING.
|
||||
*
|
||||
ADDR1 EQU $06 ; AND $07
|
||||
ADDR2 EQU $08 ; AND $09
|
||||
ADDR3 EQU $EB ; AND $EC
|
||||
ADDR4 EQU $ED ; AND $EE
|
||||
*
|
||||
** SCRATCHPAD ZERO PAGE LOCATIONS AND
|
||||
** DEDICATED ZERO PAGE ADDRESS TO HOLD
|
||||
** A RETURN ADDRESS PASSED VIA THE STACK
|
||||
*
|
||||
SCRATCH EQU $19
|
||||
SCRATCH2 EQU $1E
|
||||
RETADR EQU $FE ; AND $FF
|
||||
*
|
||||
** ZERO PAGE ADDRESSES DEDICATED TO PASSING
|
||||
** BACK RESULTS WHEN THERE ARE MORE THAN
|
||||
** THREE BYTES BEING PASSED (AXY) AND THE
|
||||
** USE OF THE STACK IS IMPRACTICAL OR TOO SLOW
|
||||
*
|
||||
RESULT EQU $FA
|
||||
RESULT2 EQU $FC
|
||||
*
|
||||
** WORD AND BYTE PARAMETER SPACE USED
|
||||
** BY APPLEIIASM MACROS
|
||||
*
|
||||
WPAR1 EQU $FA
|
||||
WPAR2 EQU $FC
|
||||
WPAR3 EQU $FE
|
||||
BPAR1 EQU $EF
|
||||
BPAR2 EQU $E3
|
||||
BPAR3 EQU $1E
|
||||
BPAR4 EQU $19
|
||||
*
|
||||
** VARIOUS HOOKS USED BY ALL ROUTINES
|
||||
*
|
||||
REENTRY EQU $3D0
|
||||
*
|
||||
MAIN_START
|
||||
*
|
|
@ -0,0 +1,26 @@
|
|||
*``````````````````````````````*
|
||||
* HOOKS.COMMON *
|
||||
* *
|
||||
* HOOKS TO MONITOR AND TO THE *
|
||||
* APPLESOFT ROUTINES THAT ARE *
|
||||
* RELATED TO COMMON TASKS. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 30-JUN-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PROMPT EQU $33 ; DOS PROMPT CHARACTER
|
||||
COLDENT EQU $03D3 ; COLD ENTRY TO DOS
|
||||
SRESET EQU $03F2 ; SOFT RESET
|
||||
PRNTAX EQU $F941 ; PRINT HEX VALS OF A,X REGISTERS
|
||||
BELL EQU $FBE4 ; RING MY BELL
|
||||
IOSAVE EQU $FF4A ; SAVE CURRENT STATE OF REGISTERS
|
||||
IOREST EQU $FF3F ; RESTORE OLD STATE OF REGISTERS
|
||||
*
|
|
@ -0,0 +1,284 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* LIB.REQUIRED *
|
||||
* *
|
||||
* LIBRARY OF REQUIRED ROUTINES *
|
||||
* AS PART OF THE APPLEIIASM *
|
||||
* MACRO AND SUBROUTINE LIBRARY *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 30-JUN-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
* SUBROUTINES: *
|
||||
* *
|
||||
* __GETRET : GET RETURN VAL *
|
||||
* __CLRHI : CLEAR HI NIBBLE *
|
||||
* __DUMP : DUMP MEMORY *
|
||||
* __P : PRINT *
|
||||
* __W : WAIT *
|
||||
* __ERRH : HANDLE ERRORS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** LIBRARY-SPECIFIC VARIABLES
|
||||
*
|
||||
]RIGHT DS 1
|
||||
]LEFT DS 1
|
||||
]LENGTH DS 1
|
||||
]A DS 1 ; REGISTER .A BACKUP
|
||||
]X DS 1 ; REGISTER .X BACKUP
|
||||
]Y DS 1 ; REGISTER .Y BACKUP
|
||||
]C DS 1 ; CARRY FLAG BACKUP
|
||||
]Z DS 1 ; ZERO FLAG BACKUP
|
||||
]N DS 1 ; NEGATIVE FLAG BACKUP
|
||||
]O DS 1 ; OVERFLOW FLAG BACKUP
|
||||
]HEXTAB ASC "0123456789ABCDEF"
|
||||
*
|
||||
** LIBRARY-SPECIFIC HOOKS
|
||||
*
|
||||
]COUT EQU $FDF0 ; SCREEN OUTPUT ROUTINE
|
||||
]KYBD EQU $C000 ; KEYBOARD INPUT
|
||||
]STROBE EQU $C010 ; KEYBOARD STROBE
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __GETRET (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = ADDRESS LOBYTE *
|
||||
* .X = ADDRESS HIBYTE *
|
||||
* RETURN = DATA STRING *
|
||||
* RETLEN = DATA STRING LENGTH *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* COPIES CONTENT OF RETURN *
|
||||
* TO SPECIFIED ADDRESS. *
|
||||
* *
|
||||
* .Y = RETURN LENGTH *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 32+ *
|
||||
* SIZE: 18 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__GETRET
|
||||
STA ADDR1 ; LOBYTE PASSED IN .A
|
||||
STX ADDR1+1 ; HIBYTE PASSED IN .X
|
||||
LDY #255 ; RESET COUNTER
|
||||
:LP
|
||||
INY ; INCREASE COUNTER
|
||||
LDA RETURN,Y ; LOAD BYTE IN RETURN AT
|
||||
STA (ADDR1),Y ; COUNTER OFFSET; STORE AT
|
||||
CPY RETLEN ; NEW LOCATION
|
||||
BNE :LP ; IF COUNTER < RETLEN, LOOP
|
||||
RTS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __CLRHI (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = BYTE TO CLEAR HIBITS *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* CLEARS 4 HIBITS FROM BYTE *
|
||||
* *
|
||||
* .A = CLEARED BYTE *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^ ^ ^^ *
|
||||
* *
|
||||
* CYCLES: 16 *
|
||||
* SIZE: 6 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__CLRHI
|
||||
*
|
||||
AND #$F0 ; CLEAR 4 RIGHT BITS
|
||||
LSR ; MOVE BITS RIGHT
|
||||
LSR ; MOVE BITS RIGHT
|
||||
LSR ; MOVE BITS RIGHT
|
||||
LSR ; MOVE BITS RIGHT
|
||||
RTS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __DUMP: (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = ADDRESS LOBYTE *
|
||||
* .X = ADDRESS HIBYTE *
|
||||
* .Y = NUMBER OF BYTES *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* OUTPUTS DATA LOCATED AT THE *
|
||||
* SPECIFIED ADDRESS IN HEX *
|
||||
* FORMAT FOR SPECIFIED NUMBER *
|
||||
* OF BYTES. *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 184+ *
|
||||
* SIZE: 114 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__DUMP
|
||||
STY ]LENGTH ; LENGTH PASSED IN .Y
|
||||
STA ADDR1 ; ADDRESS LOBYTE IN .A
|
||||
STX ADDR1+1 ; ADDRESS HIBYTE IN .X
|
||||
LDA #$8D ; LOAD CARRIAGE RETURN
|
||||
JSR ]COUT ; SEND TO COUT
|
||||
LDA ADDR1+1 ; GET ADDRESS HIBYTE
|
||||
JSR __CLRHI ; CLEAR HIBITS
|
||||
TAX ; TRANSFER T .X
|
||||
LDA ]HEXTAB,X ; LOAD HEX CHAR FROM TABLE AT .X
|
||||
JSR ]COUT ; SEND TO COUT
|
||||
LDA ADDR1+1 ; LOAD ADDRESS HIBYTE AGAIN
|
||||
AND #$0F ; CLEAR LOBITS
|
||||
TAX ; TRANSER TO .X
|
||||
LDA ]HEXTAB,X ; LOAD HEX CHAR FROM TABLE AT .X
|
||||
JSR ]COUT ; SENT TO COUT
|
||||
LDA ADDR1 ; LOAD LOBYTE
|
||||
JSR __CLRHI ; CLEAR HIBITS
|
||||
TAX ; TRANSFER TO .X
|
||||
LDA ]HEXTAB,X ; LOAD HEXCHAR AT .X
|
||||
JSR ]COUT ; SEND TO COUT
|
||||
LDA ADDR1 ; LOAD LOBYTE AGAIN
|
||||
AND #$0F ; CLEAR LOBITS
|
||||
TAX ; TRANSFER T .X
|
||||
LDA ]HEXTAB,X ; LOAD HEXCHAR AT .X
|
||||
JSR ]COUT ; SEND TO COUT
|
||||
LDA #":" ;
|
||||
JSR ]COUT ; SEND COLON TO COUT
|
||||
LDA #" "
|
||||
JSR ]COUT ; SEND SPACE TO COUT
|
||||
LDY #0 ; RESET COUNTER
|
||||
:LP
|
||||
LDA (ADDR1),Y ; LOAD BYTE FROM ADDRESS
|
||||
JSR __CLRHI ; AT COUNTER OFFSET; CLEAR HIBITS
|
||||
STA ]LEFT ; SAVE LEFT INDEX
|
||||
LDA (ADDR1),Y ; RELOAD
|
||||
AND #$0F ; CLEAR LOBITS
|
||||
STA ]RIGHT ; SAVE RIGHT INDEX
|
||||
LDX ]LEFT ; LOAD LEFT INDEX
|
||||
LDA ]HEXTAB,X ; GET NIBBLE CHAR
|
||||
JSR ]COUT ; SEND TO COUT
|
||||
LDX ]RIGHT ; LOAD RIGHT INDEX
|
||||
LDA ]HEXTAB,X ; GET NIBBLE CHAR
|
||||
JSR ]COUT ; SEND TO COUT
|
||||
LDA #160 ; LOAD SPACE
|
||||
JSR ]COUT ; SEND TO COUT
|
||||
INY ; INCREASE COUNTER
|
||||
CPY ]LENGTH ; IF COUNTER < LENGTH
|
||||
BNE :LP ; CONTINUE LOOP
|
||||
RTS ; ELSE, EXIT
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __P: (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ASC STRING FOLLOWING CALL *
|
||||
* TERMINATED WITH A 00 BYTE *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* CONTENTS OF STRING. *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^ ^^ ^^^^ *
|
||||
* *
|
||||
* CYCLES: 63+ *
|
||||
* SIZE: 33 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__P
|
||||
PLA ; PULL RETURN LOBYTE
|
||||
STA ADDR1 ; STORE TO ZERO PAGE
|
||||
PLA ; PULL RETURN HIBYTE
|
||||
STA ADDR1+1 ; STORE TO ZERO PAGE
|
||||
LDY #1 ; SET OFFSET TO PLUS ONE
|
||||
:LP LDA (ADDR1),Y ; LOAD BYTE AT OFFSET .Y
|
||||
BEQ :DONE ; IF BYTE = 0, QUIT
|
||||
JSR ]COUT ; OTHERWISE, PRINT BYTE
|
||||
INY ; INCREASE OFFSET
|
||||
BNE :LP ; IF .Y <> 0, CONTINUE LOOP
|
||||
:DONE CLC ; CLEAR CARRY FLAG
|
||||
TYA ; TRANSFER OFFSET TO .A
|
||||
ADC ADDR1 ; ADD OFFSET TO RETURN ADDRESS
|
||||
STA ADDR1 ; STORE TO RETURN ADDRESS LOBYTE
|
||||
LDA ADDR1+1 ; DO THE SAME WITH THE HIBYTE
|
||||
ADC #0 ; CARRY NOT RESET, SO INC HIBYTE
|
||||
PHA ; IF NEEDED; THEN, PUSH HIBYTE
|
||||
LDA ADDR1 ; LOAD LOBYTE
|
||||
PHA ; PUSH LOBYTE
|
||||
RTS ; EXIT
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __W: (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: NONE *
|
||||
* OUTPUT: .A HOLDS KEY VALUE *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^ ^ ^^ *
|
||||
* *
|
||||
* CYCLES: 18+ *
|
||||
* SIZE: 11 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__W
|
||||
:LP LDA ]KYBD ; CHECK IF KEY PRESSED
|
||||
BPL :LP ; IF NOT, KEEP CHECKING
|
||||
AND #$7F ; SET HI BIT
|
||||
STA ]STROBE ; RESET KEYBOARD STROBE
|
||||
RTS ; EXIT
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __ERRH (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = ADDRESS LOBYTE *
|
||||
* .X = ADDRESS HIBYTE *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* SETS NEW ADDRESS FOR THE *
|
||||
* APPLSOFT ERROR HANDLING *
|
||||
* ROUTINE. *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 51 *
|
||||
* SIZE: 31 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__ERRH
|
||||
LDA #1 ; TRICK DOS INTO THINKING
|
||||
STA $AAB6 ; IT'S IN APPLESOFT MODE
|
||||
STA $75+1 ; APPLESOFT LINE NUMBER POINTER
|
||||
STA $33 ; APLESOFT PROMPT CHARACTER
|
||||
STA ADDR1 ; ADDRESS LOBYTE IN .A
|
||||
STX ADDR1+1 ; ADDRESS HIBYTE IN .X
|
||||
LDA #$FF ; TURN ON ERROR HANDLING
|
||||
STA $D8 ; BYTE HERE
|
||||
LDY #0 ; CLEAR OFFSET
|
||||
LDA (ADDR1),Y ; LOAD ADDRESS LOBYTE
|
||||
STA $9D5A ; SET AS ERROR HANDLING LO
|
||||
INY ; INCREASE OFFSET
|
||||
LDA (ADDR1),Y ; LOAD ADDRESS HIBYTE
|
||||
STA $9D5B ; SET AS ERROR HANDLING HI
|
||||
RTS ; EXIT SUBROUTINE
|
|
@ -0,0 +1,193 @@
|
|||
*``````````````````````````````*
|
||||
* MAC.COMMON *
|
||||
* *
|
||||
* THIS IS A MACRO LIBRARY FOR *
|
||||
* COMMON.LIB, AND CAN BE USED *
|
||||
* REGARDLESS OF WHETHER A *
|
||||
* SPECIFIC FUNCTION IS *
|
||||
* INCLUDED AS A PUT IN THE *
|
||||
* MAIN SOURCE. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 30-JUN-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
* SUBROUTINE FILES NEEDED *
|
||||
* *
|
||||
* SUB.MEMFILL *
|
||||
* SUB.MEMMOVE *
|
||||
* SUB.DELAYMS *
|
||||
* SUB.ZMSAVE *
|
||||
* SUB.ZMLOAD *
|
||||
* SUB.MEMSWAP *
|
||||
* *
|
||||
* LIST OF MACROS *
|
||||
* *
|
||||
* MFILL FILL MEMORY BLOCK *
|
||||
* MMOVE MOVE MEMORY BLOCK *
|
||||
* BEEP RING MY BELL *
|
||||
* DELAY DELAY IN MILLISECS *
|
||||
* ZSAVE SAVE FREE ZERO PAGE *
|
||||
* ZLOAD LOAD SAVE ZERO PAGE *
|
||||
* MSWAP SWAP MEM RANGES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MFILL *
|
||||
* *
|
||||
* FILL BLOCK OF MEMORY WITH *
|
||||
* SPECIFIED VALUE. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = STARTING ADDRESS *
|
||||
* ]2 = LENGTH IN BYTES *
|
||||
* ]3 = FILL VALUE *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* MFILL $300;#256;#0 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MFILL MAC
|
||||
_MLIT ]1;WPAR1
|
||||
_MLIT ]2;WPAR2
|
||||
LDA ]3 ; FILL VALUE
|
||||
STA BPAR1
|
||||
JSR MEMFILL
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BEEP *
|
||||
* *
|
||||
* RING THE STANDARD BELL. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = NUMBER OF RINGS *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* BEEP #10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BEEP MAC
|
||||
LDX ]1
|
||||
]LP1
|
||||
JSR BELL
|
||||
DEX
|
||||
CPX #0
|
||||
BNE ]LP1
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MMOVE *
|
||||
* *
|
||||
* MOVE A BLOCK OF MEMORY FROM *
|
||||
* A SOURCE TO DESTINATION. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = SOURCE ADDRESS *
|
||||
* ]2 = DESTINATION ADDRESS *
|
||||
* ]3 = NUMBER OF BYTES *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* MMOVE $6A00;$7B00;#1024 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MMOVE MAC
|
||||
_MLIT ]1;WPAR1
|
||||
_MLIT ]2;WPAR2
|
||||
_MLIT ]3;WPAR3
|
||||
JSR MEMMOVE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DELAY *
|
||||
* *
|
||||
* DELAY FOR PASSED MILLISECS *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = NUM OF MILLISECONDS *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* DELAY #250 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DELAY MAC
|
||||
LDY ]1
|
||||
JSR DELAYMS
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ZSAVE *
|
||||
* *
|
||||
* SAVE ZERO PAGE FREE AREAS *
|
||||
* FOR LATER RESTORE. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = ADDRESS TO STORE AT *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* ZSAVE $300 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ZSAVE MAC
|
||||
_AXLIT ]1
|
||||
JSR ZMSAVE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ZLOAD *
|
||||
* *
|
||||
* RESTORE PREVIOUSLY SAVED *
|
||||
* FREE ZERO PAGE VALUES. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = ADDR TO LOAD FROM *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* ZLOAD $300 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ZLOAD MAC
|
||||
_AXLIT ]1
|
||||
JSR ZMLOAD
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MSWAP *
|
||||
* *
|
||||
* SWAPS THE VALUES STORED IN *
|
||||
* ONE LOCATION WITH ANOTHER *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = FIRST ADDRESS *
|
||||
* ]2 = SECOND ADDRESS *
|
||||
* ]3 = LENGTH IN BYTES (BYTE) *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* MSWAP $300;$400;#$90 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MSWAP MAC
|
||||
_MLIT ]2;WPAR2
|
||||
_MLIT ]1;WPAR1
|
||||
LDA ]3
|
||||
STA BPAR1
|
||||
JSR MEMSWAP
|
||||
<<<
|
|
@ -0,0 +1,341 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* MAC.REQUIRED *
|
||||
* *
|
||||
* MACROS USED FOR CORE UTILS *
|
||||
* AND LIBRARY ROUTINES. NOTE *
|
||||
* THAT THE LIBRARIES DO NOT *
|
||||
* USE THESE MACROS, BUT MAY *
|
||||
* USE THE ROUTINES. THESE ARE *
|
||||
* MERELY PROVIDED FOR THE SAKE *
|
||||
* OF CONVENIENCE. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 30-JUN-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
* SUBROUTINE FILES NEEDED *
|
||||
* *
|
||||
* LIB.REQUIRED *
|
||||
* *
|
||||
* MACROS INCLUDED: *
|
||||
* *
|
||||
* _MLIT : IS LITERAL? (ZERO) *
|
||||
* _ISLIT : IS LITERAL? (STACK) *
|
||||
* _AXLIT : IS LITERAL? (REGS) *
|
||||
* _ISSTR : IS STRING? (STACK) *
|
||||
* _AXSTR : IS STRING? (REGS) *
|
||||
* GRET : GET RETURN *
|
||||
* DUMP : DUMP MEMORY *
|
||||
* _PRN : PRINT STRING *
|
||||
* _WAIT : GET KEYPRESS *
|
||||
* ERRH : SET ERROR ROUTINE *
|
||||
* CLRHI : CLEAR HIGH NIBBLE *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _MLIT *
|
||||
* *
|
||||
* CHECKS IF PARAMETER IS A *
|
||||
* LITERAL OR NOT, AND SETS THE *
|
||||
* LO AND HI IN THE SPECIFIED *
|
||||
* MEMORY ADDRESS. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]2 = ZERO PAGE ADDRESS *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* _MLIT #$6000 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_MLIT MAC
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
LDA ]1/$100 ; GET HI
|
||||
STA ]2+1
|
||||
LDA ]1 ; GET LO
|
||||
STA ]2
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
LDA ]1+1 ; SO GET HIGH VAL FROM ADDR
|
||||
STA ]2+1
|
||||
LDA ]1 ; THEN LO VAL
|
||||
STA ]2
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _ISLIT *
|
||||
* *
|
||||
* CHECKS IF THE PARAMETER IS *
|
||||
* A LITERAL OR NOT, THEN *
|
||||
* PUSHES THE LO AND HI AS *
|
||||
* NEEDED. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* _ISLIT #$6000 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_ISLIT MAC
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
LDA ]1/$100 ; GET HI
|
||||
PHA
|
||||
LDA ]1 ; GET LO
|
||||
PHA
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
LDA ]1+1 ; SO GET HIGH VAL FROM ADDR
|
||||
PHA
|
||||
LDA ]1 ; THEN LO VAL
|
||||
PHA
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _AXLIT *
|
||||
* *
|
||||
* CHECKS IF PARAMETER IS A *
|
||||
* LITERAL OR NOT, AND SETS THE *
|
||||
* LO AND HI IN .A AND .X. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* _AXLIT #$6000 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_AXLIT MAC
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
LDX ]1/$100 ; GET HI
|
||||
LDA ]1 ; GET LO
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
LDX ]1+1 ; SO GET HIGH VAL FROM ADDR
|
||||
LDA ]1 ; THEN LO VAL
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _MSTR *
|
||||
* *
|
||||
* CHECKS IF PARAMETER IS A *
|
||||
* STRING, AND IF SO PROVIDE IT *
|
||||
* WITH AN ADDRESS. IF NOT, *
|
||||
* CHECK IF IT'S A LITERAL AND *
|
||||
* PASS ACCORDINGLY. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* OR STRING *
|
||||
* ]2 = ZERO PAGE ADDRESS *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* _ISSTR "TESTING" *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_MSTR MAC
|
||||
IF "=]1 ; IF ]1 IS A STRING
|
||||
JMP __STRCONT
|
||||
]STRTMP STR ]1
|
||||
__STRCONT
|
||||
*
|
||||
LDA #>]STRTMP ; GET HI
|
||||
STA ]2+1
|
||||
LDA #<]STRTMP ; GET LO
|
||||
STA ]2
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
_ISLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _ISSTR *
|
||||
* *
|
||||
* CHECKS IF PARAMETER IS A *
|
||||
* STRING, AND IF SO PROVIDE IT *
|
||||
* WITH AN ADDRESS. IF NOT, *
|
||||
* CHECK IF IT'S A LITERAL AND *
|
||||
* PASS ACCORDINGLY. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* OR STRING *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* _ISSTR "TESTING" *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_ISSTR MAC
|
||||
IF "=]1 ; IF ]1 IS A STRING
|
||||
JMP __STRCONT
|
||||
]STRTMP STR ]1
|
||||
__STRCONT
|
||||
*
|
||||
LDA #>]STRTMP ; GET HI
|
||||
PHA
|
||||
LDA #<]STRTMP ; GET LO
|
||||
PHA
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
_ISLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _AXSTR *
|
||||
* *
|
||||
* CHECKS IF PARAMETER IS A *
|
||||
* STRING, AND IF SO PROVIDES *
|
||||
* AN ADDRESS FOR IT. IF NOT, *
|
||||
* CHECK IF IT'S A LITERAL, AND *
|
||||
* STORE THE HI A LO BYTES IN *
|
||||
* .A AND .X. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* OR STRING *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* _AXSTR "TESTING" *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_AXSTR MAC
|
||||
IF "=]1 ; IF ]1 IS A STRING
|
||||
JMP __STRCNT2
|
||||
]STRTMP STR ]1
|
||||
__STRCNT2
|
||||
*
|
||||
LDX #>]STRTMP ; GET HI
|
||||
LDA #<]STRTMP ; GET LO
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
_AXLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* GRET *
|
||||
* *
|
||||
* COPY THE VALUE IN RETURN AND *
|
||||
* PLACE IT IN GIVEN ADDRESS. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* GRET #$6000 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GRET MAC
|
||||
_AXLIT ]1
|
||||
JSR __GETRET
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DUMP *
|
||||
* *
|
||||
* DUMP THE HEX AT A GIVEN *
|
||||
* ADDRESS. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]2 = LENGTH IN BYTES *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* DUMP #$6000;#10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DUMP MAC
|
||||
_AXLIT ]1
|
||||
LDY ]2
|
||||
JSR __DUMP
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _PRN *
|
||||
* *
|
||||
* PRINT A STRING OR ADDRESS. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* OR STRING *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* _PRN "TESTING" *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_PRN MAC
|
||||
JSR __P
|
||||
ASC ]1
|
||||
HEX 00
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _WAIT *
|
||||
* *
|
||||
* WAIT FOR A KEYPRESS. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_WAIT MAC
|
||||
JSR __W
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ERRH *
|
||||
* *
|
||||
* SET THE ERROR HANDLING HOOK *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* ERRH #$6000 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ERRH MAC
|
||||
_AXLIT
|
||||
JSR __ERRH
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CLRHI *
|
||||
* *
|
||||
* CLEAR HI NIBBLE OF A BYTE *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = BYTE TO CLEAR *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* CLRHI #$FF *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CLRHI MAC
|
||||
LDA ]1
|
||||
JSR __CLRHI
|
||||
<<<
|
|
@ -0,0 +1,24 @@
|
|||
JUMPTBL JMP MAIN_START
|
||||
|
||||
DS 32
|
||||
VARTAB DS 20
|
||||
RETLEN DS 1
|
||||
RETURN DS 256
|
||||
ADDR1 EQU $06
|
||||
ADDR2 EQU $08
|
||||
ADDR3 EQU $EB
|
||||
ADDR4 EQU $ED
|
||||
SCRATCH EQU $19
|
||||
SCRATCH2 EQU $1E
|
||||
RETADR EQU $FE
|
||||
RESULT EQU $FA
|
||||
RESULT2 EQU $FC
|
||||
WPAR1 EQU $FA
|
||||
WPAR2 EQU $FC
|
||||
WPAR3 EQU $FE
|
||||
BPAR1 EQU $EF
|
||||
BPAR2 EQU $E3
|
||||
BPAR3 EQU $1E
|
||||
BPAR4 EQU $19
|
||||
REENTRY EQU $3D0
|
||||
MAIN_START
|
|
@ -1,4 +1,4 @@
|
|||
PROMPT EQU $33
|
||||
PROMPT EQU $33
|
||||
COLDENT EQU $03D3
|
||||
SRESET EQU $03F2
|
||||
PRNTAX EQU $F941
|
|
@ -0,0 +1,125 @@
|
|||
]RIGHT DS 1
|
||||
]LEFT DS 1
|
||||
]LENGTH DS 1
|
||||
]A DS 1
|
||||
]X DS 1
|
||||
]Y DS 1
|
||||
]C DS 1
|
||||
]Z DS 1
|
||||
]N DS 1
|
||||
]O DS 1
|
||||
]HEXTAB ASC "0123456789ABCDEF"
|
||||
]COUT EQU $FDF0
|
||||
]KYBD EQU $C000
|
||||
]STROBE EQU $C010
|
||||
__GETRET
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
LDY #255
|
||||
:LP
|
||||
INY
|
||||
LDA RETURN,Y
|
||||
STA (ADDR1),Y ; COUNTER OFFSET
|
||||
CPY RETLEN
|
||||
BNE :LP
|
||||
RTS
|
||||
__CLRHI
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
RTS
|
||||
__DUMP
|
||||
STY ]LENGTH
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
LDA #$8D
|
||||
JSR ]COUT
|
||||
LDA ADDR1+1
|
||||
JSR __CLRHI
|
||||
TAX
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA ADDR1+1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA ADDR1
|
||||
JSR __CLRHI
|
||||
TAX
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA ADDR1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA #":" ;
|
||||
JSR ]COUT
|
||||
LDA #" "
|
||||
JSR ]COUT
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR1),Y
|
||||
JSR __CLRHI ; AT COUNTER OFFSET
|
||||
STA ]LEFT
|
||||
LDA (ADDR1),Y
|
||||
AND #$0F
|
||||
STA ]RIGHT
|
||||
LDX ]LEFT
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDX ]RIGHT
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA #160
|
||||
JSR ]COUT
|
||||
INY
|
||||
CPY ]LENGTH
|
||||
BNE :LP
|
||||
RTS
|
||||
__P
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #1
|
||||
:LP LDA (ADDR1),Y
|
||||
BEQ :DONE
|
||||
JSR ]COUT
|
||||
INY
|
||||
BNE :LP
|
||||
:DONE CLC
|
||||
TYA
|
||||
ADC ADDR1
|
||||
STA ADDR1
|
||||
LDA ADDR1+1
|
||||
ADC #0
|
||||
PHA ; IF NEEDED
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
||||
__W
|
||||
:LP LDA ]KYBD
|
||||
BPL :LP
|
||||
AND #$7F
|
||||
STA ]STROBE
|
||||
RTS
|
||||
__ERRH
|
||||
LDA #1
|
||||
STA $AAB6
|
||||
STA $75+1
|
||||
STA $33
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
LDA #$FF
|
||||
STA $D8
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA $9D5A
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $9D5B
|
||||
RTS
|
|
@ -1,19 +1,22 @@
|
|||
MFILL MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
_MLIT ]1;WPAR1
|
||||
_MLIT ]2;WPAR2
|
||||
LDA ]3
|
||||
PHA
|
||||
STA BPAR1
|
||||
JSR MEMFILL
|
||||
<<<
|
||||
BEEP MAC
|
||||
LUP ]1
|
||||
LDX ]1
|
||||
]LP1
|
||||
JSR BELL
|
||||
--^
|
||||
DEX
|
||||
CPX #0
|
||||
BNE ]LP1
|
||||
<<<
|
||||
MMOVE MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
_ISLIT ]3
|
||||
_MLIT ]1;WPAR1
|
||||
_MLIT ]2;WPAR2
|
||||
_MLIT ]3;WPAR3
|
||||
JSR MEMMOVE
|
||||
<<<
|
||||
DELAY MAC
|
||||
|
@ -21,17 +24,17 @@ DELAY MAC
|
|||
JSR DELAYMS
|
||||
<<<
|
||||
ZSAVE MAC
|
||||
_ISLIT ]1
|
||||
_AXLIT ]1
|
||||
JSR ZMSAVE
|
||||
<<<
|
||||
ZLOAD MAC
|
||||
_ISLIT ]1
|
||||
_AXLIT ]1
|
||||
JSR ZMLOAD
|
||||
<<<
|
||||
MSWAP MAC
|
||||
_ISLIT ]2
|
||||
_ISLIT ]1
|
||||
_MLIT ]2;WPAR2
|
||||
_MLIT ]1;WPAR1
|
||||
LDA ]3
|
||||
PHA
|
||||
STA BPAR1
|
||||
JSR MEMSWAP
|
||||
<<<
|
|
@ -0,0 +1,97 @@
|
|||
_MLIT MAC
|
||||
IF #=]1
|
||||
LDA ]1/$100
|
||||
STA ]2+1
|
||||
LDA ]1
|
||||
STA ]2
|
||||
ELSE
|
||||
LDA ]1+1
|
||||
STA ]2+1
|
||||
LDA ]1
|
||||
STA ]2
|
||||
FIN
|
||||
<<<
|
||||
_ISLIT MAC
|
||||
IF #=]1
|
||||
LDA ]1/$100
|
||||
PHA
|
||||
LDA ]1
|
||||
PHA
|
||||
ELSE
|
||||
LDA ]1+1
|
||||
PHA
|
||||
LDA ]1
|
||||
PHA
|
||||
FIN
|
||||
<<<
|
||||
_AXLIT MAC
|
||||
IF #=]1
|
||||
LDX ]1/$100
|
||||
LDA ]1
|
||||
ELSE
|
||||
LDX ]1+1
|
||||
LDA ]1
|
||||
FIN
|
||||
<<<
|
||||
_MSTR MAC
|
||||
IF "=]1
|
||||
JMP __STRCONT
|
||||
]STRTMP STR ]1
|
||||
__STRCONT
|
||||
LDA #>]STRTMP
|
||||
STA ]2+1
|
||||
LDA #<]STRTMP
|
||||
STA ]2
|
||||
ELSE
|
||||
_ISLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
_ISSTR MAC
|
||||
IF "=]1
|
||||
JMP __STRCONT
|
||||
]STRTMP STR ]1
|
||||
__STRCONT
|
||||
LDA #>]STRTMP
|
||||
PHA
|
||||
LDA #<]STRTMP
|
||||
PHA
|
||||
ELSE
|
||||
_ISLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
_AXSTR MAC
|
||||
IF "=]1
|
||||
JMP __STRCNT2
|
||||
]STRTMP STR ]1
|
||||
__STRCNT2
|
||||
LDX #>]STRTMP
|
||||
LDA #<]STRTMP
|
||||
ELSE
|
||||
_AXLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
GRET MAC
|
||||
_AXLIT ]1
|
||||
JSR __GETRET
|
||||
<<<
|
||||
DUMP MAC
|
||||
_AXLIT ]1
|
||||
LDY ]2
|
||||
JSR __DUMP
|
||||
<<<
|
||||
_PRN MAC
|
||||
JSR __P
|
||||
ASC ]1
|
||||
HEX 00
|
||||
<<<
|
||||
_WAIT MAC
|
||||
JSR __W
|
||||
<<<
|
||||
ERRH MAC
|
||||
_AXLIT
|
||||
JSR __ERRH
|
||||
<<<
|
||||
CLRHI MAC
|
||||
LDA ]1
|
||||
JSR __CLRHI
|
||||
<<<
|
|
@ -1,10 +1,10 @@
|
|||
DELAYMS
|
||||
MSCNT EQU $0CA
|
||||
]MSCNT EQU $0CA
|
||||
|
||||
|
||||
:DELAY
|
||||
CPY #0
|
||||
BEQ :EXIT
|
||||
BEQ :EXIT
|
||||
NOP
|
||||
CPY #1
|
||||
BNE :DELAYA
|
||||
|
@ -12,7 +12,7 @@ MSCNT EQU $0CA
|
|||
:DELAYA
|
||||
DEY
|
||||
:DELAY0
|
||||
LDX #MSCNT
|
||||
LDX #]MSCNT
|
||||
:DELAY1
|
||||
DEX
|
||||
BNE :DELAY1
|
||||
|
@ -21,7 +21,7 @@ MSCNT EQU $0CA
|
|||
DEY
|
||||
BNE :DELAY0
|
||||
:LAST1
|
||||
LDX #MSCNT-3
|
||||
LDX #]MSCNT-3
|
||||
:DELAY2
|
||||
DEX
|
||||
BNE :DELAY2
|
|
@ -0,0 +1,26 @@
|
|||
]FILL EQU BPAR1
|
||||
]SIZE EQU WPAR2
|
||||
]ADDR EQU WPAR1
|
||||
MEMFILL
|
||||
LDA ]FILL
|
||||
LDX ]SIZE+1
|
||||
BEQ :PARTPG
|
||||
LDY #0
|
||||
:FULLPG
|
||||
STA (]ADDR),Y
|
||||
INY
|
||||
BNE :FULLPG
|
||||
INC ]ADDR+1
|
||||
DEX
|
||||
BNE :FULLPG
|
||||
:PARTPG
|
||||
LDX ]SIZE
|
||||
BEQ :EXIT
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (]ADDR),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :PARTLP
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,83 @@
|
|||
]SIZE EQU WPAR3
|
||||
]ADDR1 EQU WPAR1
|
||||
]ADDR2 EQU WPAR2
|
||||
MEMMOVE
|
||||
LDA ]ADDR2
|
||||
SEC
|
||||
SBC ]ADDR1
|
||||
TAX
|
||||
LDA ]ADDR2+1
|
||||
SBC ]ADDR1+1
|
||||
|
||||
TAY
|
||||
TXA
|
||||
CMP ]SIZE
|
||||
TYA
|
||||
SBC ]SIZE+1
|
||||
BCS :DOLEFT
|
||||
JSR :MVERHT
|
||||
JMP :MREXIT
|
||||
:DOLEFT
|
||||
JSR :MVELEFT
|
||||
:EXIT
|
||||
JMP :MREXIT
|
||||
:MVELEFT
|
||||
LDY #0
|
||||
LDX ]SIZE+1
|
||||
BEQ :MLPART
|
||||
:MLPAGE
|
||||
LDA (]ADDR1),Y
|
||||
STA (]ADDR2),Y
|
||||
INY
|
||||
BNE :MLPAGE
|
||||
INC ]ADDR1+1
|
||||
INC ]ADDR2+1
|
||||
DEX
|
||||
BNE :MLPAGE
|
||||
|
||||
:MLPART
|
||||
LDX ]SIZE
|
||||
BEQ :MLEXIT
|
||||
|
||||
|
||||
:MLLAST
|
||||
LDA (]ADDR1),Y
|
||||
STA (]ADDR2),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :MLLAST
|
||||
:MLEXIT
|
||||
JMP :MREXIT
|
||||
:MVERHT
|
||||
LDA ]SIZE+1
|
||||
CLC
|
||||
ADC ]ADDR1+1
|
||||
STA ]ADDR1+1
|
||||
LDA ]SIZE+1
|
||||
CLC
|
||||
ADC ]ADDR2+1
|
||||
STA ]ADDR2+1
|
||||
LDY ]SIZE
|
||||
BEQ :MRPAGE
|
||||
:MR0
|
||||
DEY
|
||||
LDA (]ADDR1),Y
|
||||
STA (]ADDR2),Y
|
||||
CPY #0
|
||||
BNE :MR0
|
||||
:MRPAGE
|
||||
LDX ]SIZE+1
|
||||
BEQ :MREXIT
|
||||
:MR1
|
||||
DEC ]ADDR1+1
|
||||
DEC ]ADDR2+1
|
||||
:MR2
|
||||
DEY
|
||||
LDA (]ADDR1),Y
|
||||
STA (]ADDR2),Y
|
||||
CPY #0
|
||||
BNE :MR2
|
||||
DEX
|
||||
BNE :MR1
|
||||
:MREXIT
|
||||
RTS
|
|
@ -0,0 +1,16 @@
|
|||
]SIZE EQU BPAR1
|
||||
]ADDR1 EQU WPAR1
|
||||
]ADDR2 EQU WPAR2
|
||||
MEMSWAP
|
||||
LDY #255
|
||||
:LP
|
||||
INY
|
||||
LDA (]ADDR1),Y
|
||||
TAX
|
||||
LDA (]ADDR2),Y
|
||||
STA (]ADDR1),Y
|
||||
TXA
|
||||
STA (]ADDR2),Y
|
||||
CPY ]SIZE
|
||||
BNE :LP
|
||||
RTS
|
|
@ -0,0 +1,45 @@
|
|||
]ADR1 EQU VARTAB
|
||||
]ADR2 EQU VARTAB+2
|
||||
]Z HEX 191EE3EBECED
|
||||
HEX EEEFFAFBFCFDFEFF
|
||||
HEX 00
|
||||
ZMLOAD
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
LDY #255
|
||||
LDA (ADDR1),Y
|
||||
STA ]ADR1
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA ]ADR1+1
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA ]ADR2
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA ]ADR2+1
|
||||
:LP
|
||||
INY
|
||||
LDA ]Z,Y
|
||||
BEQ :EXIT
|
||||
STA ADDR2
|
||||
LDA #0
|
||||
STA ADDR2+1
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
JMP :LP
|
||||
:EXIT
|
||||
LDY #0
|
||||
LDA (ADDR1),Y+3
|
||||
STA $09
|
||||
LDA (ADDR1),Y+2
|
||||
STA $08
|
||||
LDA (ADDR1),Y+1
|
||||
TAX
|
||||
LDA (ADDR1),Y
|
||||
TAY
|
||||
TXA
|
||||
STA ADDR1+1
|
||||
TYA
|
||||
STA ADDR1
|
||||
RTS
|
|
@ -0,0 +1,46 @@
|
|||
]ADR1 EQU VARTAB
|
||||
]ADR2 EQU VARTAB+2
|
||||
]Z HEX 191EE3BECEDEEF
|
||||
HEX FAFBFCFDFEFF
|
||||
HEX 00
|
||||
ZMSAVE
|
||||
STA ]ADR1
|
||||
STX ]ADR1+1
|
||||
LDA ADDR2
|
||||
STA ]ADR2
|
||||
LDA ADDR2+1
|
||||
STA ]ADR2+1
|
||||
LDA ]ADR1
|
||||
STA ADDR2
|
||||
LDA ]ADR1
|
||||
STA ADDR2+1
|
||||
LDY #0
|
||||
LDA ADDR1
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
LDA ADDR1+1
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
LDA ]ADR2
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
LDA ]ADR2+1
|
||||
STA (ADDR2),Y
|
||||
LDX #255
|
||||
STY ]SIZE
|
||||
LDY #0
|
||||
:LP
|
||||
INC ]SIZE
|
||||
INX
|
||||
LDA ]Z,X
|
||||
BEQ :EXIT
|
||||
STA ADDR1
|
||||
LDA #0
|
||||
STA ADDR1+1
|
||||
LDA (ADDR1),Y
|
||||
LDY ]SIZE
|
||||
STA (ADDR2),Y
|
||||
LDY #0
|
||||
JMP :LP
|
||||
:EXIT
|
||||
RTS
|
|
@ -1,47 +1,37 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* DELAYMS :: DELAY X MILLISECS *
|
||||
*- -*
|
||||
* DELAYS FOR X NUMBER OF *
|
||||
* MILLISECONDS BY LOOPING *
|
||||
* THROUGH PRECISELY CALCULATED *
|
||||
* NUMBER OF CYCLES. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* DELAYMS (LEVENTHAL/SEVILLE) *
|
||||
* *
|
||||
* FLAGS: ????---- REG: -XY- *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDY #250 ;1/4 SEC *
|
||||
* JSR DELAYMS *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* Y = NUMBER OF MILLISECONDS *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = UNCHANGED *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* SEVILLE'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .Y = NUMBER OF MILLISECS *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* DELAYS FOR X NUMBER OF *
|
||||
* MILLISECONDS BY LOOPING *
|
||||
* THROUGH A PRECISE NUMBER *
|
||||
* OF CYCLES. *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 39+ *
|
||||
* SIZE: 29 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DELAYMS
|
||||
*
|
||||
MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1
|
||||
]MSCNT EQU $0CA ; LOOP 202 TIMES THROUGH DELAY1
|
||||
; SPECIFIC TO 1.23 MHZ
|
||||
; SPEED OF APPLE II
|
||||
:DELAY
|
||||
CPY #0 ; 2 CYCLES
|
||||
BEQ :EXIT ; 2C (EXIT IF DEL=0)
|
||||
CPY #0 ; IF Y = 0, THEN EXIT
|
||||
BEQ :EXIT
|
||||
NOP ; 2 CYCLES (MAKE OVERHEAD=25C)
|
||||
*
|
||||
** IF DELAY IS 1MS THEN GOTO LAST1
|
||||
|
@ -57,7 +47,7 @@ MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1
|
|||
:DELAYA
|
||||
DEY ; 2C (PREDEC Y)
|
||||
:DELAY0
|
||||
LDX #MSCNT ; 2C
|
||||
LDX #]MSCNT ; 2C
|
||||
:DELAY1
|
||||
DEX ; 2C
|
||||
BNE :DELAY1 ; 3C
|
||||
|
@ -72,10 +62,9 @@ MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1
|
|||
** AND ROUTINE OVERHEAD INTO
|
||||
** ACCOUNT.
|
||||
*
|
||||
LDX #MSCNT-3 ; 2C
|
||||
LDX #]MSCNT-3 ; 2C
|
||||
:DELAY2
|
||||
DEX ; 2C
|
||||
BNE :DELAY2 ; 3C
|
||||
:EXIT
|
||||
RTS ; 6C
|
||||
*
|
|
@ -0,0 +1,59 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* MEMFILL (LEVENTHAL/SAVILLE) *
|
||||
* *
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* SAVILLE'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ]FILL IN BPAR1 *
|
||||
* ]SIZE IN WPAR2 *
|
||||
* ]ADDR IN WPAR3 *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* FILLS THE GIVEN MEM RANGE *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^ ^ *
|
||||
* *
|
||||
* CYCLES: 117+ *
|
||||
* SIZE: 60 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]FILL EQU BPAR1 ; FILL VALUE
|
||||
]SIZE EQU WPAR2 ; RANGE LENGTH IN BYTES
|
||||
]ADDR EQU WPAR1 ; RANGE STARTING ADDRESS
|
||||
*
|
||||
MEMFILL
|
||||
*
|
||||
** FILL WHOLE PAGES FIRST
|
||||
*
|
||||
LDA ]FILL ; GET VAL FOR FILL
|
||||
LDX ]SIZE+1 ; X=# OF PAGES TO DO
|
||||
BEQ :PARTPG ; BRANCH IF HIGHBYTE OF SZ = 0
|
||||
LDY #0 ; RESET INDEX
|
||||
:FULLPG
|
||||
STA (]ADDR),Y ; FILL CURRENT BYTE
|
||||
INY ; INCREMENT INDEX
|
||||
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGE
|
||||
INC ]ADDR+1 ; ADVANCE TO NEXT PAGE
|
||||
DEX ; DECREMENT COUNTER
|
||||
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGES
|
||||
*
|
||||
** DO THE REMAINING PARTIAL PAGE
|
||||
** REGISTER A STILL CONTAINS VALUE
|
||||
*
|
||||
:PARTPG
|
||||
LDX ]SIZE ; GET # OF BYTES IN FINAL PAGE
|
||||
BEQ :EXIT ; BRANCH IF LOW BYTE = 0
|
||||
LDY #0 ; RESET INDEX
|
||||
:PARTLP
|
||||
STA (]ADDR),Y ; STORE VAL
|
||||
INY ; INCREMENT INDEX
|
||||
DEX ; DECREMENT COUNTER
|
||||
BNE :PARTLP ; BRANCH IF NOT DONE
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,139 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* MEMMOVE (LEVENTHAL/SEVILLE) *
|
||||
* *
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* SEVILLE'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ]SIZE AT WPAR3 *
|
||||
* ]ADDR1 AT WPAR1 *
|
||||
* ]ADDR2 AT WPAR2 *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* BYTES FROM SOURCE ARE *
|
||||
* COPIED IN ORDER TO THE *
|
||||
* DESTINATION ADDRESS FOR *
|
||||
* AS LONG AS LENGTH. *
|
||||
* *
|
||||
* DESTROY: .AXY,MEMORY *
|
||||
* CYCLES: 267+ *
|
||||
* SIZE: 150 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SIZE EQU WPAR3 ; LENGTH TO COPY (BYTES)
|
||||
]ADDR1 EQU WPAR1 ; SOURCE ADDRESS
|
||||
]ADDR2 EQU WPAR2 ; DESTINATION ADDRESS
|
||||
*
|
||||
MEMMOVE
|
||||
*
|
||||
** DETERMINE IF DEST AREA IS
|
||||
** ABOVE SRC AREA BUT OVERLAPS
|
||||
** IT. REMEMBER, OVERLAP CAN BE
|
||||
** MOD 64K. OVERLAP OCCURS IF
|
||||
** STARTING DEST ADDRESS MINUS
|
||||
** STARTING SRC ADDRESS (MOD
|
||||
** 64K) IS LESS THAN NUMBER
|
||||
** OF BYTES TO MOVE.
|
||||
*
|
||||
LDA ]ADDR2 ; CALC DEST-SRC
|
||||
SEC ; SET CARRY
|
||||
SBC ]ADDR1 ; SUBTRACT SOURCE ADDRESS
|
||||
TAX ; HOLD VAL IN .X
|
||||
LDA ]ADDR2+1
|
||||
SBC ]ADDR1+1 ; MOD 64K AUTOMATIC
|
||||
; -- DISCARD CARRY
|
||||
TAY ; HOLD HIBYTE IN .Y
|
||||
TXA ; CMP LOBYTE WITH # TO MOVE
|
||||
CMP ]SIZE
|
||||
TYA
|
||||
SBC ]SIZE+1 ; SUBTRACT SIZE+1 FROM HIBYTE
|
||||
BCS :DOLEFT ; BRANCH IF NO OVERLAP
|
||||
*
|
||||
** DEST AREA IS ABOVE SRC AREA
|
||||
** BUT OVERLAPS IT.
|
||||
** MOVE FROM HIGHEST ADDR TO
|
||||
** AVOID DESTROYING DATA
|
||||
*
|
||||
JSR :MVERHT
|
||||
JMP :MREXIT
|
||||
*
|
||||
** NO PROB DOING ORDINARY MOVE
|
||||
** STARTING AT LOWEST ADDR
|
||||
*
|
||||
:DOLEFT
|
||||
JSR :MVELEFT
|
||||
:EXIT
|
||||
JMP :MREXIT
|
||||
:MVELEFT
|
||||
LDY #0 ; ZERO INDEX
|
||||
LDX ]SIZE+1 ; X=# OF FULL PP TO MOVE
|
||||
BEQ :MLPART ; IF X=0, DO PARTIAL PAGE
|
||||
:MLPAGE
|
||||
LDA (]ADDR1),Y ; LOAD BYTE FROM SOURCE
|
||||
STA (]ADDR2),Y ; MOVE BYTE TO DESTINATION
|
||||
INY ; NEXT BYTE
|
||||
BNE :MLPAGE ; CONT UNTIL 256B MOVED
|
||||
INC ]ADDR1+1 ; ADV TO NEXT SRC PAGE
|
||||
INC ]ADDR2+1 ; ADV NEXT DEST PAGE
|
||||
DEX ; DEC PAGE COUNT
|
||||
BNE :MLPAGE ; CONT UNTIL ALL FULL
|
||||
; PAGES ARE MOVED
|
||||
:MLPART
|
||||
LDX ]SIZE ; GET LENGTH OF LAST PAGE
|
||||
BEQ :MLEXIT ; BR IF LENGTH OF LAST
|
||||
; PAGE = 0
|
||||
; REG Y IS 0
|
||||
:MLLAST
|
||||
LDA (]ADDR1),Y ; LOAD BYTE FROM SOURCE
|
||||
STA (]ADDR2),Y ; MOVE BYTE TO DESTINATION
|
||||
INY ; NEXT BYTE
|
||||
DEX ; DEC COUNTER
|
||||
BNE :MLLAST ; CONT UNTIL LAST P DONE
|
||||
:MLEXIT
|
||||
JMP :MREXIT
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:MVERHT
|
||||
*
|
||||
** MOVE THE PARTIAL PAGE FIRST
|
||||
*
|
||||
LDA ]SIZE+1 ; GET SIZE HIBYTE
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]ADDR1+1 ; ADD SOURCE ADDRESS HIBYTE
|
||||
STA ]ADDR1+1 ; POINT TO LAST PAGE OF SRC
|
||||
LDA ]SIZE+1 ; GET SIZE HIBYTE
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]ADDR2+1 ; ADD DESTINATION HIBYTE
|
||||
STA ]ADDR2+1 ; POINT TO LAST P OF DEST
|
||||
*
|
||||
** MOVE THE LAST PARTIAL PAGE FIRST
|
||||
*
|
||||
LDY ]SIZE ; GET LENGTH OF LAST PAGE
|
||||
BEQ :MRPAGE ; IF Y=0 DO THE FULL PAGES
|
||||
:MR0
|
||||
DEY ; BACK UP Y TO NEXT BYTE
|
||||
LDA (]ADDR1),Y ; LOAD CURRENT SOURCE BYTE
|
||||
STA (]ADDR2),Y ; STORE IN CURRENT DESTINATION
|
||||
CPY #0 ; BRANCH IF NOT DONE
|
||||
BNE :MR0 ; WITH THE LAST PAGE
|
||||
:MRPAGE
|
||||
LDX ]SIZE+1 ; GET SIZE HIBYTE
|
||||
BEQ :MREXIT ; BR IF HYBYTE = 0 (NO FULL P)
|
||||
:MR1
|
||||
DEC ]ADDR1+1 ; BACK UP TO PREV SRC PAGE
|
||||
DEC ]ADDR2+1 ; AND DEST
|
||||
:MR2
|
||||
DEY ; BACK UP Y TO NEXT BYTE
|
||||
LDA (]ADDR1),Y ; LOAD SOURCE CURRENT BYTE
|
||||
STA (]ADDR2),Y ; STORE BYTE IN DESTINATION
|
||||
CPY #0 ; IF NOT DONE WITH PAGE
|
||||
BNE :MR2 ; THEN BRANCH OUT
|
||||
DEX ; DECREASE BYTE COUNTER
|
||||
BNE :MR1 ; BR IF NOT ALL PAGES MOVED
|
||||
:MREXIT
|
||||
RTS
|
|
@ -0,0 +1,40 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* MEMSWAP (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ]SIZE = BPAR1 *
|
||||
* ]ADDR1 = WPAR1 *
|
||||
* ]ADDR2 = WPAR2 *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* SWAPS THE VALUES IN THE *
|
||||
* MEMORY LOCATIONS GIVEN *
|
||||
* FOR THE SPECIFIED LENGTH. *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 100+ *
|
||||
* SIZE: 43 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SIZE EQU BPAR1 ; SIZE OF RANGE TO SWAP
|
||||
]ADDR1 EQU WPAR1 ; SOURCE ADDRESS 1
|
||||
]ADDR2 EQU WPAR2 ; SOURCE ADDRESS 2
|
||||
*
|
||||
MEMSWAP
|
||||
LDY #255 ; RESET BYTE INDEX
|
||||
:LP
|
||||
INY ; INCREASE BYTE INDEX
|
||||
LDA (]ADDR1),Y ; LOAD BYTE FROM FIRST ADDRESS
|
||||
TAX ; TRANSFER TO .X
|
||||
LDA (]ADDR2),Y ; LOAD BYTE FROM SECOND ADDRESS
|
||||
STA (]ADDR1),Y ; STORE IN FIRST ADDRESS
|
||||
TXA ; TRANSFER FIRST BYTE VAL TO .A
|
||||
STA (]ADDR2),Y ; NOW STORE THAT IN SECOND ADDRESS
|
||||
CPY ]SIZE ; IF BYTE INDEX < LENGTH,
|
||||
BNE :LP ; CONTINUE LOOPING
|
||||
RTS ; OTHERWISE, EXIT
|
|
@ -0,0 +1,69 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* ZMLOAD (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = LOBYTE OF SRC ADDR *
|
||||
* .X = HIBYTE OF SRC ADDR *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* RESTORES PREVIOUSLY SAVED *
|
||||
* ZERO PAGE VALUES FROM *
|
||||
* HIGHER MEMORY LOCATION. *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 123+ *
|
||||
* SIZE: 71 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADR1 EQU VARTAB ; 2 BYTES
|
||||
]ADR2 EQU VARTAB+2 ; 2 BYTES
|
||||
]Z HEX 191EE3EBECED
|
||||
HEX EEEFFAFBFCFDFEFF
|
||||
HEX 00
|
||||
*
|
||||
ZMLOAD
|
||||
*
|
||||
STA ADDR1 ; BACKUP SOURCE ADDR LOBYTE
|
||||
STX ADDR1+1 ; BACKUP HIBYTE
|
||||
LDY #255 ; RESET INDEX
|
||||
LDA (ADDR1),Y
|
||||
STA ]ADR1 ; BACKUP $06
|
||||
INY
|
||||
LDA (ADDR1),Y ; BACKUP $07
|
||||
STA ]ADR1+1
|
||||
INY ; INCREASE INDEX
|
||||
LDA (ADDR1),Y ; BACKUP $07
|
||||
STA ]ADR2
|
||||
INY
|
||||
LDA (ADDR1),Y ; BACKUP $08
|
||||
STA ]ADR2+1
|
||||
:LP
|
||||
INY
|
||||
LDA ]Z,Y
|
||||
BEQ :EXIT ; IF NULL, EXIT
|
||||
STA ADDR2
|
||||
LDA #0
|
||||
STA ADDR2+1
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
JMP :LP
|
||||
:EXIT
|
||||
LDY #0
|
||||
LDA (ADDR1),Y+3 ; NOW RESTORE FIRST
|
||||
STA $09 ; FOUR BYTES
|
||||
LDA (ADDR1),Y+2
|
||||
STA $08
|
||||
LDA (ADDR1),Y+1
|
||||
TAX
|
||||
LDA (ADDR1),Y
|
||||
TAY
|
||||
TXA
|
||||
STA ADDR1+1
|
||||
TYA
|
||||
STA ADDR1
|
||||
RTS
|
|
@ -0,0 +1,69 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* ZMSAVE :: SAVE 0-PAGE FREE *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = DESTINATION LOBYTE *
|
||||
* .Y = DESTINATION HIBYTE *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* THE FREE AREAS OF THE *
|
||||
* ZERO PAGE ARE COPIED TO *
|
||||
* THE DESTINATION ADDRESS. *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 138+ *
|
||||
* SIZE: 84 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADR1 EQU VARTAB ; 2 BYTES--DEST ADDRESS
|
||||
]ADR2 EQU VARTAB+2 ; 2 BYTES--SOURCE ADDRESS
|
||||
]Z HEX 191EE3BECEDEEF ; ZERO PAGE LOCATIONS
|
||||
HEX FAFBFCFDFEFF ; TO BE BACKED UP
|
||||
HEX 00
|
||||
ZMSAVE
|
||||
*
|
||||
STA ]ADR1 ; BACKUP DESTINATION ADDRESS LO
|
||||
STX ]ADR1+1 ; BACKUP HIBYTE
|
||||
LDA ADDR2 ; BACKUP CONTENTS OF ADDR2 LOBYTE
|
||||
STA ]ADR2
|
||||
LDA ADDR2+1 ; BACKUP HIBYTE
|
||||
STA ]ADR2+1
|
||||
LDA ]ADR1 ; PUT DESTINATION ADDRESS
|
||||
STA ADDR2 ; INTO ZERO-PAGE ADDR2
|
||||
LDA ]ADR1 ; FOR INDIRECT ACCESS
|
||||
STA ADDR2+1
|
||||
LDY #0 ; CLEAR INDEX
|
||||
LDA ADDR1 ; LOAD ADDR1 LOBYTE
|
||||
STA (ADDR2),Y ; STORE IT IN DESTINATION
|
||||
INY ; INCREASE INDEX
|
||||
LDA ADDR1+1 ; GET ADDR1 HIBYTE
|
||||
STA (ADDR2),Y ; STORE IN DESTINATION
|
||||
INY ; INCREMENT INDEX
|
||||
LDA ]ADR2 ; LOAD OLD ADDR2 LOBYTE
|
||||
STA (ADDR2),Y ; COPY TO DESTINATION
|
||||
INY ; INCREMENT INDEX
|
||||
LDA ]ADR2+1 ; LOAD OLD ADDR2 HIBYTE
|
||||
STA (ADDR2),Y ; STORE IN DESTINATION
|
||||
LDX #255 ; RESET INDEX2 COUNTER
|
||||
STY ]SIZE ; STORE INDEX1 IN ]SIZE
|
||||
LDY #0 ; RESET Y-INDEX
|
||||
:LP
|
||||
INC ]SIZE ; INCREMENT SOURCE INDEX
|
||||
INX ; INCREMENT TABLE INDEX
|
||||
LDA ]Z,X ; GET NEXT BYTE FROM TABLE
|
||||
BEQ :EXIT ; IF ZERO, QUIT
|
||||
STA ADDR1 ; STORE BYTE FROM TABLE AS LOBYTE
|
||||
LDA #0 ; CLEAR THE HIBYTE
|
||||
STA ADDR1+1
|
||||
LDA (ADDR1),Y ; INDIRECTLY LOAD ZERO-PAGE CONTENT
|
||||
LDY ]SIZE ; PULL INDEX BACK INTO Y
|
||||
STA (ADDR2),Y ; STORE BYTE TO DESTINATION
|
||||
LDY #0 ; RESET Y
|
||||
JMP :LP ; REPEAT UNTIL FINISHED
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,111 @@
|
|||
*
|
||||
********************************
|
||||
* *
|
||||
* -< ASCII DEMO >- *
|
||||
* *
|
||||
* VERSION 00.03.00 *
|
||||
* *
|
||||
* 04-MAY-2019 *
|
||||
* *
|
||||
********************************
|
||||
* *
|
||||
* NATHAN D. RIGGS *
|
||||
* NATHAN.RIGGS@OUTLOOK.COM *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP OFF
|
||||
TR ON
|
||||
DSK ASCIITEST.DEMO
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TOP INCLUDES (HOOKS,MACROS) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT MIN.HEAD.REQUIRED
|
||||
USE MIN.MAC.REQUIRED
|
||||
USE MIN.MAC.STDIO
|
||||
PUT MIN.HOOKS.STDIO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PROGRAM MAIN BODY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
JSR ENDVARS
|
||||
]Y DS 1
|
||||
]SIZE DS 1
|
||||
ENDVARS
|
||||
JSR HOME ; CLEAR SCREEN
|
||||
*
|
||||
** CHARACTER SHADING TEST
|
||||
*
|
||||
LDA #0
|
||||
STA ]Y
|
||||
LP1
|
||||
SCPOS #0;]Y
|
||||
PRN "####@@@@****%%%%&&&&"
|
||||
PRN "++++====----::::....",8D
|
||||
INC ]Y
|
||||
LDA ]Y
|
||||
CMP #22
|
||||
BEQ LP1X
|
||||
JMP LP1
|
||||
LP1X
|
||||
WAIT
|
||||
*
|
||||
** GROWING CIRCLE TEST
|
||||
*
|
||||
LDA #1
|
||||
STA ]SIZE
|
||||
LP2
|
||||
JSR HOME
|
||||
TCIRC #19;#12;]SIZE;#"*"
|
||||
LDY #0
|
||||
ILP1
|
||||
INY
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
CPY #$FF
|
||||
BEQ ILP1X
|
||||
JMP ILP1
|
||||
ILP1X
|
||||
*
|
||||
TCIRC #19;#12;]SIZE;#" "
|
||||
INC ]SIZE
|
||||
LDA ]SIZE
|
||||
CMP #10
|
||||
BEQ LP2X
|
||||
JMP LP2
|
||||
LP2X
|
||||
TCIRC #19;#12;]SIZE;#"*"
|
||||
WAIT
|
||||
*
|
||||
EXIT
|
||||
JMP REENTRY
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BOTTOM INCLUDES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINE INCLUDES
|
||||
*
|
||||
* STDIO SUBROUTINES
|
||||
*
|
||||
PUT MIN.SUB.XPRINT
|
||||
PUT MIN.SUB.DPRINT
|
||||
PUT MIN.SUB.THLINE
|
||||
PUT MIN.SUB.TVLINE
|
||||
PUT MIN.SUB.TRECTF
|
||||
PUT MIN.SUB.TXTPUT
|
||||
PUT MIN.SUB.TBLINE
|
||||
PUT MIN.SUB.TCIRCLE
|
||||
*
|
|
@ -0,0 +1,412 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* DEMO.STDIO *
|
||||
* *
|
||||
* A DEMO OF THE MACROS AND *
|
||||
* SUBROUTINES IN THE STDIO *
|
||||
* APPLEIIASM LIBRARY. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 07-JUL-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP OFF
|
||||
TR ON
|
||||
DSK DEMO.STDIO
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TOP INCLUDES (HOOKS,MACROS) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT MIN.HEAD.REQUIRED
|
||||
USE MIN.MAC.REQUIRED
|
||||
USE MIN.MAC.STDIO
|
||||
PUT MIN.HOOKS.STDIO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PROGRAM MAIN BODY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
JSR HOME ; CLEAR SCREEN
|
||||
*
|
||||
PRN "STDIO DEMO",8D
|
||||
PRN "----------",8D8D
|
||||
PRN "WELCOME! THIS IS A DEMO FOR",8D
|
||||
PRN "THE STDIO LIBRARY MACROS AND ",8D
|
||||
PRN "SUBROUTINES.",8D8D
|
||||
WAIT
|
||||
PRN "OUR FIRST OBVIOUS MACRO USED",8D
|
||||
PRN "IS PRN. THIS MACRO CAN PRINT A",8D
|
||||
PRN "GIVEN STRING, OR PRINT THE STRING",8D
|
||||
PRN "AT A GIVEN ADDRESS THAT IS REFERENCED",8D
|
||||
PRN "EITHER DIRECTLY (#) OR INDIRECTLY.",8D
|
||||
PRN "THEREFORE: ",8D8D
|
||||
WAIT
|
||||
PRN " PRN 'HELLO!'",8D8D
|
||||
PRN "PRINTS HELLO, WHEREAS",8D8D
|
||||
PRN " PRN #STRING1",8D8D
|
||||
PRN "PRINTS THE STRING LOCATED AT",8D
|
||||
PRN "THAT EXACT ADDRESS."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "MEANWHILE,",8D8D
|
||||
PRN " PRN STRING2",8D8D
|
||||
PRN "PRINTS THE STRING AT THE ADDRESS PASSED",8D
|
||||
PRN "VIA THAT MEMORY LOCATION.",8D8D
|
||||
WAIT
|
||||
PRN "IT IS IMPORTANT TO NOTE THAT",8D
|
||||
PRN "WHENEVER THERE IS AN OPTION FOR",8D
|
||||
PRN "EITHER A STRING OR A MEMORY ADDRESS,",8D
|
||||
PRN "THIS IS HOW ALL SUBROUTINES WORK IN",8D
|
||||
PRN "THIS LIBRARY. IN OTHER DEMOS, IT MAY",8D
|
||||
PRN "BE ASSUMED THAT THE READER KNOWS THIS."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "OUR NEXT SUBROUTINE NEEDING ",8D
|
||||
PRN "OUR ATTENTION IS CALLED BY THE",8D
|
||||
PRN "COL40 MACRO. THIS FORCES USING",8D
|
||||
PRN "40-COLUMN MODE, AND IS ESPECIALLY",8D
|
||||
PRN "NECESSARY FOR ROUTINES THAT PRINT",8D
|
||||
PRN "DIRECTLY TO SCREEN MEMORY INSTEAD",8D
|
||||
PRN "OF USING COUT ROUTINES. SO,"8D8D
|
||||
PRN " COL40",8D8D
|
||||
PRN "WILL PUT US IN 40-COLUMN MODE",8D
|
||||
PRN "AFTER HITTING A KEY NOW."
|
||||
WAIT
|
||||
COL40
|
||||
JSR HOME
|
||||
PRN "YOU CAN ALSO FORCE 80-COLUMN MODE",8D
|
||||
PRN "WITH THE COL80 MACRO, BUT BE",8D
|
||||
PRN "AWARE THAT TRECF,TPUT,THLIN",8D
|
||||
PRN "AND TVLIN WILL ONLY WORK",8D
|
||||
PRN "AS INTENDED IN 40 COLUMNS.",8D8D
|
||||
PRN "LET'S LOOK AT THESE MACROS NOW."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "ASCII DRAWING",8D
|
||||
PRN "=============",8D8D
|
||||
PRN "AT TIMES, YOU MAY NEED TO ",8D
|
||||
PRN "PUT A BLOCK OF TEXT THAT CONSISTS",8D
|
||||
PRN "OF A SINGLE CHARACTER AS QUICKLY",8D
|
||||
PRN "AS POSSIBLE. CURRENTLY, THERE ARE",8D
|
||||
PRN "FOUR MACROS DEDICATED TO JUST ",8D
|
||||
PRN "THAT: THLIN, TVLIN, TRECF, AND TPUT.",8D8D
|
||||
WAIT
|
||||
PRN "THE SIMPLEST OF THESE IS TPUT:",8D
|
||||
PRN "IT OUTPUTS A SINGLE CHARACTER AT",8D
|
||||
PRN "THE GIVEN XY COORDINATES. SO,",8D8D
|
||||
PRN " TPUT #38;#20;#'$'",8D8D
|
||||
PRN "WILL PLACE THE '$' CHARACTER",8D
|
||||
PRN "AT THE X-POSITION 38 AND Y-POSITION",8D
|
||||
PRN "20. LET'S TRY THAT NOW...",8D8D
|
||||
WAIT
|
||||
TPUT #38;#20;#"$"
|
||||
PRN "SEE? RIGHT OVER HERE -->"
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "NOT THAT THE CURSOR'S POSITION",8D
|
||||
PRN "IS NOT DISTURBED BY TPUT; THIS",8D
|
||||
PRN "IS DUE TO THE FACT THAT THE ROUTINE",8D
|
||||
PRN "BYPASSES COUT AND INSTEAD DIRECTLY",8D
|
||||
PRN "POKES THE CHARACTER INTO SCREEN MEMORY.",8D
|
||||
PRN "THIS IS PRIMARILY FOR SPEED, BUT AGAIN",8D
|
||||
PRN "KEEP IN MIND THAT THIS DOES NOT WORK",8D
|
||||
PRN "CORRECTLY IN 80-COLUMN MODE.",8D8D
|
||||
WAIT
|
||||
PRN "THLIN, TVLIN, AND TRECF OPERATE IN",8D
|
||||
PRN "THE SAME WAY. LET'S LOOK AT THOSE NEXT."
|
||||
TPUT #38;#12;#"K"
|
||||
TPUT #38;#13;#"E"
|
||||
TPUT #38;#14;#"E"
|
||||
TPUT #38;#15;#"P"
|
||||
TPUT #38;#17;#"G"
|
||||
TPUT #38;#18;#"O"
|
||||
TPUT #38;#19;#"I"
|
||||
TPUT #38;#20;#"N"
|
||||
TPUT #38;#21;#"G"
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "THLIN AND TVLIN BOTH CREATE LINES",8D
|
||||
PRN "FROM A SINGLE CHARACTER, HORIZONTALLY",8D
|
||||
PRN "AND VERTICALLY RESPECTIVELY. THUS",8D8D
|
||||
PRN " THLIN #25;#35;#20;#'X'",8D8D
|
||||
WAIT
|
||||
THLIN #25;#35;#20;#"X"
|
||||
PRN "CREATES A HORIZONTAL LINE FROM THE",8D
|
||||
PRN "X-POSITION 25 TO 35 AT THE Y-POSITION",8D
|
||||
PRN "OF 20 WITH THE CHARACTER 'X'. LIKEWISE,",8D8D
|
||||
PRN " TVLIN #10;#20;#35;#'Y'",8D8D
|
||||
WAIT
|
||||
TVLIN #10;#20;#35;#"Y"
|
||||
PRN "CREATES A VERTICAL LINE FROM Y-POSITION",8D
|
||||
PRN "10 TO 20 AT THE X-POSITION 35."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "NOTE THAT THE LAST POSITION GIVEN",8D
|
||||
PRN "IS NOT ACTUALLY FILLED. THIS IS",8D
|
||||
PRN "TO KEEP PLACEMENT MORE INTUITIVE.",8D
|
||||
PRN "HOWEVER, WHEN TRYING TO ARRANGE LINES",8D
|
||||
PRN "CONNECTED TOGETHER, YOU WILL HAVE TO",8D
|
||||
PRN "ADJUST YOUR NUMBERS ACCORDINGLY. TO",8D
|
||||
PRN "CREATE A BOX, FOR INSTANCE, YOU WOULD",8D
|
||||
PRN "NEED TO WRITE:",8D8D
|
||||
PRN " THLIN #25;#35;#20;#'X'",8D
|
||||
PRN " TVLIN #10;#20;#34;#'X'",8D
|
||||
PRN " TVLIN #10;#20;#25;#'X'",8D
|
||||
PRN " THLIN #25;#35;#10;#'X'",8D8D
|
||||
WAIT
|
||||
THLIN #25;#35;#20;#"X"
|
||||
TVLIN #10;#20;#34;#"X"
|
||||
TVLIN #10;#20;#25;#"X"
|
||||
THLIN #25;#35;#10;#"X"
|
||||
PRN "YAY!"
|
||||
*
|
||||
********************************
|
||||
*
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "THE TLINE MACRO DRAWS A LINE FROM",8D
|
||||
PRN "X1,Y1 TO X2,Y2 WITH A FILL CHARACTER.",8D
|
||||
PRN "USE TVLIN OR THLINE IF YOU ARE",8D
|
||||
PRN "DRAWING HORIZONTAL OR VERTICAL LINES,",8D
|
||||
PRN "AS THESE USE FEWER CYCLES.",8D8D
|
||||
PRN " TLINE #20;#12;#30;#22;#'*'",8D
|
||||
PRN " TLINE #30;#22;#10;#15;#'*'",8D
|
||||
PRN " TLINE #10;#15;#30;#15;'*'",8D
|
||||
PRN " TLINE #30;#15;#10;#22;#'*'",8D
|
||||
PRN " TLINE #10;#22;#20;#12;#'*'",8D8D
|
||||
PRN "WILL OUTPUT:"
|
||||
WAIT
|
||||
TLINE #20;#12;#30;#22;#"*"
|
||||
TLINE #30;#22;#10;#15;#"*"
|
||||
TLINE #10;#15;#30;#15;#"*"
|
||||
TLINE #30;#15;#10;#22;#"*"
|
||||
TLINE #10;#22;#20;#12;#"*"
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "YOU CAN ALSO CREATE CIRCLES WITH",8D
|
||||
PRN "THE TCIRC MACRO. IN THE PARAMS,",8D
|
||||
PRN "YOU SPECIFY THE X POSITION OF THE",8D
|
||||
PRN "CENTER, THE Y POSITION OF IT, ",8D
|
||||
PRN " THE CIRCLE'S RADIUS, AND THE ",8D
|
||||
PRN "FILL CHAR OF THE CIRCLE'S OUTLINE.",8D
|
||||
PRN "THUS:",8D8D
|
||||
PRN "TCIRC #30;#14;#7;#'*'",8D
|
||||
PRN "TCIRC #30;#14;#6;#'.'",8D
|
||||
PRN "TCIRC #30;#14;#5;#'#'",8D
|
||||
PRN "TCIRC #30;#14;#4;#':'",8D
|
||||
PRN "TCIRC #30;#14;#3;#'@'",8D
|
||||
PRN "TCIRC #30;#14;#2;#'+'",8D8D
|
||||
PRN "WILL PRODUCE:"
|
||||
WAIT
|
||||
TCIRC #30;#14;#7;#"*"
|
||||
TCIRC #30;#14;#6;#"."
|
||||
TCIRC #30;#14;#5;#"#"
|
||||
TCIRC #30;#14;#4;#":"
|
||||
TCIRC #30;#14;#3;#"@"
|
||||
TCIRC #30;#14;#2;#"+"
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "THE LAST OF THESE KIND OF MACROS",8D
|
||||
PRN "IS TRECF, WHICH CREATES A FILLED",8D
|
||||
PRN "BOX. THIS CAN BE ESPECIALLY USEFUL",8D
|
||||
PRN "FOR CREATING A SEMBLANCE OF 'WINDOWS'",8D
|
||||
PRN "ON THE TEXT SCREEN. SO:",8D8D
|
||||
PRN " TRECF #10;#10;#20;#20;#'#'",8D8D
|
||||
PRN "WILL RESULT IN:",8D8D
|
||||
WAIT
|
||||
TRECF #10;#10;#20;#20;#"#"
|
||||
PRN "W00T!"
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "CURSOR POSITIONING",8D
|
||||
PRN "==================",8D8D
|
||||
PRN "THE REST OF THESE ROUTINES",8D
|
||||
PRN "USE COUT1 FOUR CONVENIENCE AND",8D
|
||||
PRN "SAVING A FEW BYTES HERE AND THERE.",8D
|
||||
PRN "THIS MEANS, AMONG OTHER THINGS, THAT",8D
|
||||
PRN "THE SYSTEM MONITOR KEEPS TRACK",8D
|
||||
PRN "OF OUR CURSOR POSITION, AND WE CAN",8D
|
||||
PRN "CALL ITS ROUTINES TO ALTER SAID",8D
|
||||
PRN "POSITION. THIS IS ACHIEVED WITH THE",8D
|
||||
PRN "FOLLOWING MACROS, WHICH WE WILL EXPLORE",8D
|
||||
PRN "NEXT:",8D8D
|
||||
PRN " SETCX SETCY",8D
|
||||
PRN " SCPOS RCPOS",8D
|
||||
PRN " CURF CURB",8D
|
||||
PRN " CURU CURD"
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "SETCX AND SETCY SIMPLY SET THE X",8D
|
||||
PRN "AND Y POSITIONS OF THE CURSOR,",8D
|
||||
PRN "RESPECTIVELY. SO:",8D8D
|
||||
PRN " SETCX #20",8D8D
|
||||
WAIT
|
||||
SETCX #20
|
||||
PRN "SETS THE CURSOR'S",8D
|
||||
PRN "X-POSITION TO 20, WHEREAS",8D8D
|
||||
PRN " SETCY #20",8D8D
|
||||
WAIT
|
||||
SETCY #20
|
||||
PRN "SET'S THE Y-POSITION TO 20."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "YOU CAN SET THESE COORDINATES",8D
|
||||
PRN "AT ONCE WITH THE SCPOS MACRO. SO:",8D8D
|
||||
PRN " SCPOS #8;#10"
|
||||
WAIT
|
||||
SCPOS #8;#10
|
||||
PRN "SETS THE CURSOR AT X POSITION",8D
|
||||
PRN "OF 8 AND A Y POSITION OF 10.",8D8D
|
||||
WAIT
|
||||
PRN "YOU CAN ALSO READ THE CHARACTER",8D
|
||||
PRN "AT A GIVEN POSITION WITH THE ",8D
|
||||
PRN "RCPOS MACRO. THUS,",8D8D
|
||||
PRN " RCPOS #8;#10 "
|
||||
WAIT
|
||||
PRN "RETURNS: "
|
||||
RCPOS #8;#10
|
||||
JSR COUT1
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "THE LAST OF THE CURSOR POSITIONING",8D
|
||||
PRN "MACROS ARE CURF, CURB, CURD AND CURU.",8D
|
||||
PRN "THESE ALL MOVE THE CURSOR RELATIVE",8D
|
||||
PRN "TO ITS CURRENT POSITION. CURF MOVES",8D
|
||||
PRN "IT FORWARD BY THE SPECIFIED AMOUNT,",8D
|
||||
PRN "CURB MOVES BACKWARDS, CURD MOVES",8D
|
||||
PRN "DOWN AND CURU MOVES UP. THUS:",8D8D
|
||||
PRN " CURF #5 ",8D8D
|
||||
PRN "MOVES THE CURSOR "
|
||||
WAIT
|
||||
CURF #5
|
||||
PRN "FORWARD BY FIVE.",8D8D
|
||||
PRN "THE OTHER MACROS USE THE SAME",8D
|
||||
PRN "SYNTAX."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "MOUSETEXT",8D
|
||||
PRN "=========",8D8D
|
||||
PRN "ON CAPABLE SYSTEMS, MOUSETEXT",8D
|
||||
PRN "CAN BE TURNED ON WITH THE",8D
|
||||
PRN "MTXT1 MACRO AND TURNED OFF WITH",8D
|
||||
PRN "THE MTXT0 MACRO. SINCE THIS",8D
|
||||
PRN "WON'T HAVE A DEMO OF IT HERE."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "INPUT MACROS",8D
|
||||
PRN "============",8D8D
|
||||
PRN "CURRENTLY, THIS STDIO LIBRARY",8D
|
||||
PRN "CONTAINS FIVE MACROS FOR USER",8D
|
||||
PRN "INPUT. THEY ARE AS FOLLOWS:",8D8D
|
||||
PRN " INP STRING INPUT",8D
|
||||
PRN " GKEY CHARACTER INPUT",8D
|
||||
PRN " PDL PADDLE INPUT",8D
|
||||
PRN " PBX PADDLE BUTTON INPUT",8D
|
||||
PRN " WAIT CHARACTER INPUT, NO MONITOR"
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "WE HAVE ALREADY MADE SUBSTANTIAL",8D
|
||||
PRN "USE OF THE WAIT MACRO--THAT'S ",8D
|
||||
PRN "WHAT IS CALLED EVERY TIME THIS",8D
|
||||
PRN "DEMO PAUSES. ONCE A KEY IS PRESSED,",8D
|
||||
PRN "THE ASCII CODE FOR IT IS STORED",8D
|
||||
PRN "IN THE .A REGISTER. THIS MACRO",8D
|
||||
PRN "ACCEPTS NO PARAMETERS.",8D8D
|
||||
PRN "A SPECIAL FEATURE OF THE WAIT",8D
|
||||
PRN "MACRO IS THAT IT DOES NOT USE THE",8D
|
||||
PRN "TYPICAL MONITOR ROUTINES FOR INPUT,",8D
|
||||
PRN "AND READS THE KEYBOARD DIRECTLY,",8D
|
||||
PRN "ALLOWING US TO NOT HAVE A CURSOR ON",8D
|
||||
PRN "THE SCREEN, AMONG OTHER BENEFITS.",8D
|
||||
PRN "THIS IS IN CONTRAST TO GKEY, WHICH",8D
|
||||
PRN "USES THE MONITOR ROUTINE TO ACHIEVE",8D
|
||||
PRN "THE SAME RESULT: "
|
||||
GKEY
|
||||
JSR HOME
|
||||
PRN "THE INP MACRO SIMILARLY USES THE",8D
|
||||
PRN "MONITOR'S INPUT ROUTINE. THIS MEANS",8D
|
||||
PRN "THAT IT SUFFERS THE SAME PROBLEMS",8D
|
||||
PRN "AS DOES APPLESOFT BASIC'S INPUT",8D
|
||||
PRN "COMMAND: COMMAS AND SPECIAL CHARACTERS",8D
|
||||
PRN "COMPLICATE MATTERS. IN FUTURE PATCHES,",8D
|
||||
PRN "AN ALTERNATE NON-MONITOR ROUTINE",8D
|
||||
PRN "WILL BECOME AVAILABLE.",8D8D
|
||||
PRN "TYPE SOMETHING AND PRESS RETURN:",8D
|
||||
INP
|
||||
PRN " ",8D
|
||||
PRN "YOU CAN THEN PRINT THE STRING TO ",8D
|
||||
PRN "SCREEN USING THE SPRN MACRO:",8D8D
|
||||
PRN "YOU TYPED:"
|
||||
SPRN #RETURN
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "PADDLE BUTTONS CAN BE READ VIA",8D
|
||||
PRN "THE PBX MACRO. THE SYNAX IS AS",8D
|
||||
PRN "FOLLOWS:",8D8D
|
||||
PRN " PBX [BUTTON ADDRESS]",8D8D
|
||||
WAIT
|
||||
PRN "THE HOOKS.STDIO FILE CONTAINS THE",8D
|
||||
PRN "ADDRESSES FOR THE FOR PADDLE BUTTONS,",8D
|
||||
PRN "CONVENIENTLY CALLED PB0, PB1, PB2, ",8D
|
||||
PRN "AND PB3. THUS:",8D8D
|
||||
WAIT
|
||||
PRN " PBX #PB0",8D8D
|
||||
PRN "CHECKS IF PADDLE BUTTON 0 IS PRESSED,",8D
|
||||
PRN "AND RETURNS 1 IN THE .A REGISTER IF SO.",8D
|
||||
PRN "OTHERWISE, A ZERO IS RETURNED.",8D8D
|
||||
WAIT
|
||||
PRN "SINCE THIS REQUIRES SPECIAL HARDWARE,",8D
|
||||
PRN "WE WON'T BE USING THE MACRO HERE. NOTE",8D
|
||||
PRN "THAT ON A ][E, //C, AND ][GS, THE OPEN",8D
|
||||
PRN "APPLE KEY IS MAPPED TO BUTTON ZERO."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN "LASTLY, THE PREAD MACRO READS THE STATE",8D
|
||||
PRN "OF THE GIVEN PADDLE'S POTENTIOMETER.",8D
|
||||
PRN "A VALUE OF 0-255 IS RETURNED IN THE .Y",8D
|
||||
PRN "REGISTER. SO:",8D8D
|
||||
WAIT
|
||||
PRN " PREAD #0",8D8D
|
||||
PRN "WILL READ THE STATE OF PADDLE 0, WHICH",8D
|
||||
PRN "IS THE MOST COMMON TO READ. AGAIN,",8D
|
||||
PRN "DUE TO A NEED FOR SPECIAL HARDWARE, WE",8D
|
||||
PRN "WON'T BE ILLUSTRATING IT HERE."
|
||||
WAIT
|
||||
JSR HOME
|
||||
PRN " ",8D
|
||||
PRN "THAT'S ALL, FOLKS!",8D8D
|
||||
*
|
||||
JMP REENTRY
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BOTTOM INCLUDES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINE INCLUDES
|
||||
*
|
||||
* STDIO SUBROUTINES
|
||||
*
|
||||
PUT MIN.SUB.XPRINT
|
||||
PUT MIN.SUB.DPRINT
|
||||
PUT MIN.SUB.THLINE
|
||||
PUT MIN.SUB.TVLINE
|
||||
PUT MIN.SUB.TRECTF
|
||||
PUT MIN.SUB.TXTPUT
|
||||
PUT MIN.SUB.TBLINE
|
||||
PUT MIN.SUB.TCIRCLE
|
||||
PUT MIN.SUB.SINPUT
|
||||
PUT MIN.SUB.PRNSTR
|
||||
*
|
|
@ -0,0 +1,67 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* HOOKS.STDIO *
|
||||
* *
|
||||
* THESE ARE HOOKS THAT ARE *
|
||||
* USED BY THE STDIO LIBRARY. *
|
||||
* COMMENTED HOOKS ARE RELATED *
|
||||
* BUT CURRENTLY UNUSED. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 07-JUL-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
* OUTPUT HOOKS
|
||||
*
|
||||
COUT1 EQU $FDF0 ; FASTER SCREEN OUTPUT
|
||||
COUT EQU $FDED ; MONITOR STD OUTPUT
|
||||
HOME EQU $FC58 ; CLEAR SCREEN, HOME CURSOR
|
||||
VTAB EQU $FC22 ; MONITOR CURSOR POS ROUTINE
|
||||
CURSH EQU $24 ; HPOS OF COUT CURSOR
|
||||
CURSV EQU $25 ; VPOS OF COUT CURSOR
|
||||
KEYBUFF EQU $0200 ; KEYBUFFER START
|
||||
GSTROBE EQU $C040 ; GAME CONNECTOR STROBE
|
||||
GBCALC EQU $F847 ; SCREEN CALCULATION
|
||||
GBPSH EQU $26
|
||||
*
|
||||
* INPUT HOOKS
|
||||
*
|
||||
KYBD EQU $C000 ; LDA SINGLE KEYPRESS
|
||||
STROBE EQU $C010 ; CLEAR KYBD BUFFER
|
||||
GETLN EQU $FD6F ; MONITOR GET LINE OF KB INPUT
|
||||
GETKEY EQU $FD0C ; MONITOR GET SINGLE KEY INPUT
|
||||
*
|
||||
* PADDLE HOOKS
|
||||
*
|
||||
PREAD EQU $FB1E ; READ STATE OF PADDLE
|
||||
PB0 EQU $C061 ; PADDLE BUTTON 0
|
||||
PB1 EQU $C062
|
||||
PB2 EQU $C063
|
||||
PB3 EQU $C060
|
||||
*
|
||||
** UNUSED BY LIBRARY
|
||||
*
|
||||
*WNDLEFT EQU $20 ; SCROLL WINDOW LEFT
|
||||
*WNDWIDTH EQU $21 ; SCROLL WINDOW WIDTH
|
||||
*WNDTOP EQU $22 ; SCROLL WINDOW TOP
|
||||
*WNDBOT EQU $23 ; SCROLL WINDOW BOTTOM
|
||||
*TEXTP1 EQU $0400 ; START OF TEXT PAGE 1
|
||||
*TEXTP2 EQU $0800 ; START OF TEXT PAGE 2
|
||||
*PAGE1 EQU $C054 ; SOFT SWITCH USE PAGE 1
|
||||
*PAGE2 EQU $C055 ; SOFT SWITCH USE PAGE 2
|
||||
*S80COL EQU $C01F ; READ ONLY; CHECK IF 80C
|
||||
*TXTSET EQU $C051 ; TEXT ON SOFT SWITCH
|
||||
*SETWND EQU $FB4B ; SET NORMAL WINDOW MODE
|
||||
*CURADV EQU $FBF4 ; ADVANCE CURSOR RIGHT
|
||||
*CURBS EQU $FC10 ; CURSOR LEFT
|
||||
*CURUP EQU $FC1A ; CURSOR UP
|
||||
*CR EQU $FC62 ; CARRIAGE RETURN TO SCREEN
|
||||
*LF EQU $FC66 ; LINE FEED ONLY TO SCREEN
|
||||
*CLEOL EQU $FC9C ; CLEAR TEXT TO END OF LINE
|
||||
*OPAPP EQU $C061
|
||||
*CLAPP EQU $C062
|
|
@ -0,0 +1,676 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* MAC.STDIO *
|
||||
* *
|
||||
* THIS IS A MACRO LIBRARY FOR *
|
||||
* STANDARD INPUT AND OUTPUT. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 07-JUL-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
* SUBROUTINES FILES USED: *
|
||||
* *
|
||||
* SUB.XPRINT *
|
||||
* SUB.DPRINT *
|
||||
* SUB.SINPUT *
|
||||
* SUB.GPBX *
|
||||
* SUB.TVLINE *
|
||||
* SUB.THLINE *
|
||||
* SUB.TRECTF *
|
||||
* SUB.TBLINE *
|
||||
* SUB.TCIRCLE *
|
||||
* SUB.TXTPUT *
|
||||
* SUB.PRNSTR *
|
||||
* *
|
||||
* LIST OF MACROS *
|
||||
* *
|
||||
* PRN : FLEXIBLE PRINT *
|
||||
* SPRN : PRINT STRING *
|
||||
* INP : STRING INPUT *
|
||||
* GKEY : GET SINGLE KEY *
|
||||
* SCPOS : SET CURS POS AT X,Y *
|
||||
* SETCX : SET CURSOR X *
|
||||
* SETCY : SET CURSOR Y *
|
||||
* CURF : CURSOR FORWARD *
|
||||
* CURB : CURSOR BACKWARD *
|
||||
* CURU : CURSOR UP *
|
||||
* CURD : CURSOR DOWN *
|
||||
* RCPOS : READ CURSOR POSITION *
|
||||
* PDL : READ PADDLE STATE *
|
||||
* TLINE : DIAGONAL TEXT LINE *
|
||||
* TCIRC : TEXT CIRCLE *
|
||||
* PBX : READ PDL BTN X *
|
||||
* TVLIN : TEXT VERTICAL LINE *
|
||||
* THLIN : TEXT HORIZ LINE *
|
||||
* TRECF : TEXT FILL RECTANGLE *
|
||||
* TPUT : TEXT CHAR PLOT AT XY *
|
||||
* COL40 : FORCE 40COL MODE *
|
||||
* COL80 : FORCE 80COL MODE *
|
||||
* DIE80 : KILL 80COL FIRMWARE *
|
||||
* MTXT0 : DISABLE MOUSETEXT *
|
||||
* MTXT1 : ENABLE MOUSETEXT *
|
||||
* WAIT : WAIT FOR KEYPRESS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PRN *
|
||||
* *
|
||||
* PRINT A LITERAL STRING OR *
|
||||
* A NULL-TERMINATED STRING AT *
|
||||
* A GIVEN ADDRESS. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = STRING OR ADDRESS *
|
||||
* *
|
||||
* SAMPLE USAGE: *
|
||||
* *
|
||||
* PRN "HELLO, WORLD!" *
|
||||
* PRN #$300 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PRN MAC
|
||||
IF ",]1 ; IF PARAM=STRING
|
||||
JSR XPRINT ; SPECIAL PRINT
|
||||
ASC ]1 ; PUT STRING HERE
|
||||
HEX 00 ; STRING TERMINATE
|
||||
ELSE ; ELSE, PARAM IS
|
||||
; MEMORY LOCATION
|
||||
_MLIT ]1 ; PARSE FOR LITERAL
|
||||
JSR DPRINT ; OR INDIRECT
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* SPRN *
|
||||
* *
|
||||
* PRINTS THE STRING LOCATED AT *
|
||||
* THE SPECIFIED ADDRESS, WHICH *
|
||||
* HAS A PRECEDING LENGTH BYTE. *
|
||||
* *
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* ]1 = STRING ADDRESS *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* SPRN #$300 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SPRN MAC
|
||||
_AXLIT ]1
|
||||
JSR PRNSTR
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* INP *
|
||||
* *
|
||||
* INPUTS A STRING FROM KEYBRD *
|
||||
* AND STORES IT IN [RETURN] *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* SAMPLE USAGE: *
|
||||
* *
|
||||
* INP *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
INP MAC
|
||||
JSR SINPUT
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* GKEY *
|
||||
* *
|
||||
* WAITS FOR USER TO PRESS A *
|
||||
* KEY, THEN STORES THAT IN .A *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* SAMPLE USAGE: *
|
||||
* *
|
||||
* GKEY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GKEY MAC
|
||||
JSR GETKEY ; MONITOR GET SUBROUTINE
|
||||
LDY #0
|
||||
STY STROBE ; RESET KBD STROBE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* SCPOS *
|
||||
* *
|
||||
* SETS THE CURSOR POSITION. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = X POSITION *
|
||||
* ]2 = Y POSITION *
|
||||
* *
|
||||
* SAMPLE USAGE: *
|
||||
* *
|
||||
* SCPOS #10;#10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SCPOS MAC
|
||||
LDX ]1
|
||||
STX CURSH ; PUT X INTO HPOS
|
||||
LDX ]2
|
||||
STX CURSV ; PUT Y INTO VPOS
|
||||
JSR VTAB ; EXECUTE VTAB MONITOR ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* SETCX *
|
||||
* *
|
||||
* SETS THE CURSOR X POSITION. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = X POSITION *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* SETCX #10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SETCX MAC
|
||||
LDX ]1
|
||||
STX CURSH ; SET HORIZ POS
|
||||
JSR VTAB ; CALL VTAB MONITOR ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* SETCY *
|
||||
* *
|
||||
* SET THE CURSOR Y POSITION. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = Y POSITION *
|
||||
* *
|
||||
* SETCY #10 *
|
||||
* *
|
||||
* SAMPLE USAGE: SETCY #10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SETCY MAC
|
||||
LDY ]1
|
||||
STY CURSV ; SET VERTICAL POS
|
||||
JSR VTAB ; CALL VTAB MONITOR ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CURF *
|
||||
* *
|
||||
* MOVE CURSOR FORWARD A NUMBER *
|
||||
* OF SPACES. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = # OF SPACES TO MOVE *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* CURF #10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CURF MAC
|
||||
LDA ]1 ; GET # TO ADD TO CURRENT
|
||||
CLC ; POS; CLEAR CARRY
|
||||
ADC CURSH ; ADD CURSH
|
||||
STA CURSH ; STORE IN CURSH
|
||||
JSR VTAB ; MONITOR VTAB SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CURB *
|
||||
* *
|
||||
* MOVE THE CURSOR BACKWARD BY *
|
||||
* A NUMBER OF SPACES. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = # OF SPACES TO MOVE *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* CURB #10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CURB MAC
|
||||
LDA CURSH ; GET CURRENT CURSOR HORIZ
|
||||
SEC ; SET CARRY
|
||||
SBC ]1 ; SUBTRACT GIVEN PARAM
|
||||
STA CURSH ; STORE BACK IN CURSH
|
||||
JSR VTAB ; VTAB MONITOR SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CURU *
|
||||
* *
|
||||
* MOVE CURSOR UP BY A NUMBER *
|
||||
* OF SPACES. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = # OF SPACES TO GO UP *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* CURU #10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CURU MAC
|
||||
LDA CURSV ; GET CURRENT CURSOR VERT
|
||||
SEC ; SET CARRY
|
||||
SBC ]1 ; SUBTRACT GIVEN PARAM
|
||||
STA CURSV ; STORE BACK IN CURSV
|
||||
JSR VTAB ; VTAB MONITOR ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CURD *
|
||||
* *
|
||||
* MOVE THE CURSOR DOWN BY A *
|
||||
* NUMBER OF SPACES. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = # OF SPACES TO MOVE *
|
||||
* *
|
||||
* SAMPLE USAGE: CURD #10 *
|
||||
* *
|
||||
* CURD #10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CURD MAC
|
||||
LDA CURSV ; GET CURRENT VERT POS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]1 ; ADD GIVEN PARAMETER
|
||||
STA CURSV ; STORE BACK IN CURSV
|
||||
JSR VTAB ; VTAB MONITOR SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* RCPOS *
|
||||
* *
|
||||
* READ THE CHARACTER AT POS *
|
||||
* X,Y AND LOADS INTO ACCUM *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = X POSITION *
|
||||
* ]2 = Y POSITION *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* RCPOS #3;#9 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
RCPOS MAC
|
||||
LDY ]1 ; ROW
|
||||
LDA ]2 ; COLUMN
|
||||
JSR GBCALC ; GET ADDR FOR SCREEN POS
|
||||
LDA (GBPSH),Y ; GET CHAR IN ADDRESS
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PDL *
|
||||
* *
|
||||
* SIMPLY READS STATE OF PADDLE *
|
||||
* NUMBER [NUM] AND STORES IT *
|
||||
* IN THE Y REGISTER. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = PADDLE # TO READ *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* PDL #0 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PDL MAC ; GET PADDLE VALUE
|
||||
LDX ]1 ; READ PADDLE # ]1 (USUALLY 0)
|
||||
JSR PREAD ; PADDLE READING STORED IN Y
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PBX *
|
||||
* *
|
||||
* READ THE SPECIFIED PADDLE *
|
||||
* BUTTON. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = PADDLE BUTTON TO READ *
|
||||
* *
|
||||
* PB0: $C061 PB1: $C062 *
|
||||
* PB2: $C063 PB4: $C060 *
|
||||
* *
|
||||
* SAMPLE USAGE: *
|
||||
* *
|
||||
* PBX PB0 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PBX MAC
|
||||
LDX #1
|
||||
LDA ]1 ; IF BTN = PUSHED
|
||||
BMI EXIT ; IF HIBYTE SET, BUTTON PUSHED
|
||||
LDX #0 ; OTHERWISE, BUTTON NOT PUSHED
|
||||
EXIT
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TVLIN *
|
||||
* *
|
||||
* CREATE A VERTICAL LINE WITH *
|
||||
* A GIVEN TEXT FILL CHARACTER *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = START OF VERT LINE *
|
||||
* ]2 = END OF VERT LINE *
|
||||
* ]3 = X POSITION OF LINE *
|
||||
* ]4 = FILL CHARACTER *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* TVLIN #0;#10;#3;#$18 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TVLIN MAC
|
||||
LDA ]1 ; Y START
|
||||
STA WPAR2
|
||||
LDA ]2 ; Y END
|
||||
STA WPAR2+1
|
||||
LDA ]3 ; X POSITION
|
||||
STA WPAR1
|
||||
LDA ]4 ; CHARACTER
|
||||
STA BPAR1
|
||||
JSR TVLINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* THLIN *
|
||||
* *
|
||||
* CREATE A HORIZONTAL LINE *
|
||||
* FROM A FILL CHARACTER. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = START OF HORIZ LINE *
|
||||
* ]2 = END OF HORIZ LINE *
|
||||
* ]3 = Y POSITION OF LINE *
|
||||
* ]4 = FILL CHARACTER *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* THLIN #0;#10;#12;#$18 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
THLIN MAC
|
||||
LDA ]1 ; X START
|
||||
STA WPAR1
|
||||
LDA ]2 ; X END
|
||||
STA WPAR1+1
|
||||
LDA ]3 ; Y POS
|
||||
STA BPAR1
|
||||
LDA ]4 ; FILL CHAR
|
||||
STA BPAR2
|
||||
JSR THLINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TRECF *
|
||||
* *
|
||||
* CREATE A RECTANGLE FILLED *
|
||||
* WITH A GIVEN TEXT CHARACTER *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = HORIZ START POSITION *
|
||||
* ]2 = VERT START POSITION *
|
||||
* ]3 = HORIZ END POSITION *
|
||||
* ]4 = VERT END POSITION *
|
||||
* ]5 = FILL CHARACTER *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* TRECF #0;#10;#0;#10;#'X' *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TRECF MAC
|
||||
LDA ]1 ; LEFT BOUNDARY
|
||||
STA WPAR1
|
||||
LDA ]2 ; TOP BOUNDARY
|
||||
STA WPAR2
|
||||
LDA ]3 ; RIGHT BOUNDARY
|
||||
STA WPAR1+1
|
||||
LDA ]4 ; BOTTOM BOUNDARY
|
||||
STA WPAR2+1
|
||||
LDA ]5 ; FILL CHAR
|
||||
STA BPAR1
|
||||
JSR TRECTF
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TPUT TEXT CHARACTER PLOT *
|
||||
* *
|
||||
* PLOT A SINGLE TEXT CHARACTER *
|
||||
* DIRECTLY TO SCREEN MEMORY AT *
|
||||
* A GIVEN X,Y POSITION. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = X POSITION *
|
||||
* ]2 = Y POSITION *
|
||||
* ]3 = CHARACTER TO PLOT *
|
||||
* *
|
||||
* SAMPLE USAGE *
|
||||
* *
|
||||
* TPUT #10;#10;#AA *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TPUT MAC
|
||||
LDX ]1 ; XPOS INTO .X
|
||||
LDY ]2 ; YPOS INTO .Y
|
||||
LDA ]3 ; FILL IN .A
|
||||
JSR TXTPUT
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DIE80 *
|
||||
* *
|
||||
* SEND CTRL-U TO COUT, FORCING *
|
||||
* 40 COLUMN MODE. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* USAGE *
|
||||
* *
|
||||
* DIE80 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIE80 MAC
|
||||
LDA #21 ; CTRL-U CHARACTER
|
||||
JSR COUT ; SEND TO SCREEN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* COL80 *
|
||||
* *
|
||||
* FORCE 80-COLUMN MODE. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* USAGE *
|
||||
* *
|
||||
* COL80 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
COL80 MAC
|
||||
LDA #18 ; CTRL-R CHARACTER
|
||||
JSR COUT ; SEND TO SCREEN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* COL40 *
|
||||
* *
|
||||
* FORCE 40-COLUMN MODE *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* USAGE *
|
||||
* *
|
||||
* COL40 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
COL40 MAC
|
||||
LDA #17 ; CTRL-Q CHARACTER
|
||||
JSR COUT ; SEND TO SCREEN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MTXT0 *
|
||||
* *
|
||||
* DISABLE MOUSETEXT, IF IT IS *
|
||||
* ENABLED. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* USAGE *
|
||||
* *
|
||||
* MTXT0 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MTXT0 MAC
|
||||
LDA #24 ; CTRL-X
|
||||
JSR COUT ; SEND TO SCREEN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MTXT1 *
|
||||
* *
|
||||
* ENABLE MOUSETEXT IF IT IS *
|
||||
* AVAILABLE. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* USAGE *
|
||||
* *
|
||||
* MTXT1 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MTXT1 MAC
|
||||
LDA #27 ; CTRL-[
|
||||
JSR COUT ; SEND TO SCREEN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* WAIT *
|
||||
* *
|
||||
* WAIT FOR A KEYPRESS WITHOUT *
|
||||
* INTERFERING WITH COUT. KEY *
|
||||
* CODE IS STORED IN .A. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* USAGE *
|
||||
* *
|
||||
* WAIT *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
WAIT MAC
|
||||
]WTLP LDA KYBD ; READ KEYBOARD BUFFER
|
||||
BPL ]WTLP ; IF 0, KEEP LOOPING
|
||||
AND #$7F ; OTHERWISE, SET HI BIT
|
||||
STA STROBE ; CLEAR STROBE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TLINE *
|
||||
* *
|
||||
* USE THE BRESSENHAM LINE *
|
||||
* ALGORITHM TO DRAW A LINE *
|
||||
* WITH A FILL CHARACTER. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = X-ORIGIN *
|
||||
* ]2 = Y-ORIGIN *
|
||||
* ]3 = X-DESTINATION *
|
||||
* ]4 = Y-DESTINATION *
|
||||
* *
|
||||
* USAGE *
|
||||
* *
|
||||
* TLINE #0;#0;#23;#39 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TLINE MAC
|
||||
LDA ]1
|
||||
STA WPAR1
|
||||
LDA ]2
|
||||
STA WPAR1+1
|
||||
LDA ]3
|
||||
STA WPAR2
|
||||
LDA ]4
|
||||
STA WPAR2+1
|
||||
LDA ]5
|
||||
STA BPAR1
|
||||
JSR TBLINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TCIRC *
|
||||
* *
|
||||
* USE THE BRESSENHAM CIRCLE *
|
||||
* ALGORITHM TO DRAW A CIRCLE *
|
||||
* WITH A FILL CHARACTER. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = CENTER X-LOCATION *
|
||||
* ]2 = CENTER Y-LOCATION *
|
||||
* ]3 = RADIUS *
|
||||
* ]4 = FILL CHARACTER *
|
||||
* *
|
||||
* USAGE *
|
||||
* *
|
||||
* TCIRC #19;#11;#10;#"*" *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TCIRC MAC
|
||||
LDA ]1
|
||||
STA WPAR1
|
||||
LDA ]2
|
||||
STA WPAR2
|
||||
LDA ]3
|
||||
STA BPAR1
|
||||
LDA ]4
|
||||
STA BPAR2
|
||||
JSR TCIRCLE
|
||||
<<<
|
|
@ -0,0 +1,27 @@
|
|||
JUMPTBL JMP MAIN_START
|
||||
|
||||
DS 48
|
||||
VARTAB DS 20
|
||||
IFDEPTH DS 1
|
||||
RETLEN DS 1
|
||||
RETURN DS 256
|
||||
PARLEN DS 1
|
||||
PARAM DS 256
|
||||
ADDR1 EQU $06
|
||||
ADDR2 EQU $08
|
||||
ADDR3 EQU $EB
|
||||
ADDR4 EQU $ED
|
||||
SCRATCH EQU $19
|
||||
SCRATCH2 EQU $1E
|
||||
RETADR EQU $FE
|
||||
RESULT EQU $FA
|
||||
RESULT2 EQU $FC
|
||||
WPAR1 EQU $FA
|
||||
WPAR2 EQU $FC
|
||||
WPAR3 EQU $FE
|
||||
BPAR1 EQU $EF
|
||||
BPAR2 EQU $E3
|
||||
BPAR3 EQU $1E
|
||||
BPAR4 EQU $19
|
||||
REENTRY EQU $3D0
|
||||
MAIN_START
|
|
@ -0,0 +1,19 @@
|
|||
COUT1 EQU $FDF0
|
||||
COUT EQU $FDED
|
||||
HOME EQU $FC58
|
||||
VTAB EQU $FC22
|
||||
CURSH EQU $24
|
||||
CURSV EQU $25
|
||||
KEYBUFF EQU $0200
|
||||
GSTROBE EQU $C040
|
||||
GBCALC EQU $F847
|
||||
GBPSH EQU $26
|
||||
KYBD EQU $C000
|
||||
STROBE EQU $C010
|
||||
GETLN EQU $FD6F
|
||||
GETKEY EQU $FD0C
|
||||
PREAD EQU $FB1E
|
||||
PB0 EQU $C061
|
||||
PB1 EQU $C062
|
||||
PB2 EQU $C063
|
||||
PB3 EQU $C060
|
|
@ -0,0 +1,137 @@
|
|||
]RIGHT DS 1
|
||||
]LEFT DS 1
|
||||
]LENGTH DS 1
|
||||
]A DS 1
|
||||
]X DS 1
|
||||
]Y DS 1
|
||||
]C DS 1
|
||||
]Z DS 1
|
||||
]N DS 1
|
||||
]O DS 1
|
||||
]HEXTAB ASC "0123456789ABCDEF"
|
||||
]COUT EQU $FDF0
|
||||
]KYBD EQU $C000
|
||||
]STROBE EQU $C010
|
||||
__GETRET
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
LDY #255
|
||||
:LP
|
||||
INY
|
||||
LDA RETURN,Y
|
||||
STA (ADDR1),Y ; COUNTER OFFSET
|
||||
CPY RETLEN
|
||||
BNE :LP
|
||||
RTS
|
||||
__SETPARM
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
STY PARLEN
|
||||
LDY #255
|
||||
:LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA PARAM,Y ; OFFSET BY COUNTER
|
||||
CPY PARLEN
|
||||
BNE :LP
|
||||
RTS
|
||||
__CLRHI
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
RTS
|
||||
__DUMP
|
||||
STY ]LENGTH
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
LDA #$8D
|
||||
JSR ]COUT
|
||||
LDA ADDR1+1
|
||||
JSR __CLRHI
|
||||
TAX
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA ADDR1+1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA ADDR1
|
||||
JSR __CLRHI
|
||||
TAX
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA ADDR1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA #":" ;
|
||||
JSR ]COUT
|
||||
LDA #" "
|
||||
JSR ]COUT
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR1),Y
|
||||
JSR __CLRHI ; AT COUNTER OFFSET
|
||||
STA ]LEFT
|
||||
LDA (ADDR1),Y
|
||||
AND #$0F
|
||||
STA ]RIGHT
|
||||
LDX ]LEFT
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDX ]RIGHT
|
||||
LDA ]HEXTAB,X
|
||||
JSR ]COUT
|
||||
LDA #160
|
||||
JSR ]COUT
|
||||
INY
|
||||
CPY ]LENGTH
|
||||
BNE :LP
|
||||
RTS
|
||||
__P
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #1
|
||||
:LP LDA (ADDR1),Y
|
||||
BEQ :DONE
|
||||
JSR ]COUT
|
||||
INY
|
||||
BNE :LP
|
||||
:DONE CLC
|
||||
TYA
|
||||
ADC ADDR1
|
||||
STA ADDR1
|
||||
LDA ADDR1+1
|
||||
ADC #0
|
||||
PHA ; IF NEEDED
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
||||
__W
|
||||
:LP LDA ]KYBD
|
||||
BPL :LP
|
||||
AND #$7F
|
||||
STA ]STROBE
|
||||
RTS
|
||||
__ERRH
|
||||
LDA #1
|
||||
STA $AAB6
|
||||
STA $75+1
|
||||
STA $33
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
LDA #$FF
|
||||
STA $D8
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA $9D5A
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $9D5B
|
||||
RTS
|
|
@ -0,0 +1,97 @@
|
|||
_MLIT MAC
|
||||
IF #=]1
|
||||
LDA ]1/$100
|
||||
STA ]2+1
|
||||
LDA ]1
|
||||
STA ]2
|
||||
ELSE
|
||||
LDA ]1+1
|
||||
STA ]2+1
|
||||
LDA ]1
|
||||
STA ]2
|
||||
FIN
|
||||
<<<
|
||||
_ISLIT MAC
|
||||
IF #=]1
|
||||
LDA ]1/$100
|
||||
PHA
|
||||
LDA ]1
|
||||
PHA
|
||||
ELSE
|
||||
LDA ]1+1
|
||||
PHA
|
||||
LDA ]1
|
||||
PHA
|
||||
FIN
|
||||
<<<
|
||||
_AXLIT MAC
|
||||
IF #=]1
|
||||
LDX ]1/$100
|
||||
LDA ]1
|
||||
ELSE
|
||||
LDX ]1+1
|
||||
LDA ]1
|
||||
FIN
|
||||
<<<
|
||||
_MSTR MAC
|
||||
IF "=]1
|
||||
JMP __STRCONT
|
||||
]STRTMP STR ]1
|
||||
__STRCONT
|
||||
LDA #>]STRTMP
|
||||
STA ]2+1
|
||||
LDA #<]STRTMP
|
||||
STA ]2
|
||||
ELSE
|
||||
_ISLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
_ISSTR MAC
|
||||
IF "=]1
|
||||
JMP __STRCONT
|
||||
]STRTMP STR ]1
|
||||
__STRCONT
|
||||
LDA #>]STRTMP
|
||||
PHA
|
||||
LDA #<]STRTMP
|
||||
PHA
|
||||
ELSE
|
||||
_ISLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
_AXSTR MAC
|
||||
IF "=]1
|
||||
JMP __STRCNT2
|
||||
]STRTMP STR ]1
|
||||
__STRCNT2
|
||||
LDX #>]STRTMP
|
||||
LDA #<]STRTMP
|
||||
ELSE
|
||||
_AXLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
GRET MAC
|
||||
_AXLIT ]1
|
||||
JSR __GETRET
|
||||
<<<
|
||||
DUMP MAC
|
||||
_AXLIT ]1
|
||||
LDY ]2
|
||||
JSR __DUMP
|
||||
<<<
|
||||
_PRN MAC
|
||||
JSR __P
|
||||
ASC ]1
|
||||
HEX 00
|
||||
<<<
|
||||
_WAIT MAC
|
||||
JSR __W
|
||||
<<<
|
||||
ERRH MAC
|
||||
_AXLIT
|
||||
JSR __ERRH
|
||||
<<<
|
||||
CLRHI MAC
|
||||
LDA ]1
|
||||
JSR __CLRHI
|
||||
<<<
|
|
@ -0,0 +1,176 @@
|
|||
PRN MAC
|
||||
IF ",]1
|
||||
JSR XPRINT ; SPECIAL PRINT
|
||||
ASC ]1 ; PUT STRING HERE
|
||||
HEX 00 ; STRING TERMINATE
|
||||
ELSE ; ELSE, PARAM IS
|
||||
; MEMORY LOCATION
|
||||
_MLIT ]1
|
||||
JSR DPRINT
|
||||
FIN
|
||||
<<<
|
||||
SPRN MAC
|
||||
_AXLIT ]1
|
||||
JSR PRNSTR
|
||||
<<<
|
||||
INP MAC
|
||||
JSR SINPUT
|
||||
<<<
|
||||
GKEY MAC
|
||||
JSR GETKEY
|
||||
LDY #0
|
||||
STY STROBE
|
||||
<<<
|
||||
SCPOS MAC
|
||||
LDX ]1
|
||||
STX CURSH
|
||||
LDX ]2
|
||||
STX CURSV
|
||||
JSR VTAB
|
||||
<<<
|
||||
SETCX MAC
|
||||
LDX ]1
|
||||
STX CURSH
|
||||
JSR VTAB
|
||||
<<<
|
||||
SETCY MAC
|
||||
LDY ]1
|
||||
STY CURSV
|
||||
JSR VTAB
|
||||
<<<
|
||||
CURF MAC
|
||||
LDA ]1
|
||||
CLC ; POS
|
||||
ADC CURSH
|
||||
STA CURSH
|
||||
JSR VTAB
|
||||
<<<
|
||||
CURB MAC
|
||||
LDA CURSH
|
||||
SEC
|
||||
SBC ]1
|
||||
STA CURSH
|
||||
JSR VTAB
|
||||
<<<
|
||||
CURU MAC
|
||||
LDA CURSV
|
||||
SEC
|
||||
SBC ]1
|
||||
STA CURSV
|
||||
JSR VTAB
|
||||
<<<
|
||||
CURD MAC
|
||||
LDA CURSV
|
||||
CLC
|
||||
ADC ]1
|
||||
STA CURSV
|
||||
JSR VTAB
|
||||
<<<
|
||||
RCPOS MAC
|
||||
LDY ]1
|
||||
LDA ]2
|
||||
JSR GBCALC
|
||||
LDA (GBPSH),Y
|
||||
<<<
|
||||
PDL MAC
|
||||
LDX ]1
|
||||
JSR PREAD
|
||||
<<<
|
||||
PBX MAC
|
||||
LDX #1
|
||||
LDA ]1
|
||||
BMI EXIT
|
||||
LDX #0
|
||||
EXIT
|
||||
<<<
|
||||
TVLIN MAC
|
||||
LDA ]1
|
||||
STA WPAR2
|
||||
LDA ]2
|
||||
STA WPAR2+1
|
||||
LDA ]3
|
||||
STA WPAR1
|
||||
LDA ]4
|
||||
STA BPAR1
|
||||
JSR TVLINE
|
||||
<<<
|
||||
THLIN MAC
|
||||
LDA ]1
|
||||
STA WPAR1
|
||||
LDA ]2
|
||||
STA WPAR1+1
|
||||
LDA ]3
|
||||
STA BPAR1
|
||||
LDA ]4
|
||||
STA BPAR2
|
||||
JSR THLINE
|
||||
<<<
|
||||
TRECF MAC
|
||||
LDA ]1
|
||||
STA WPAR1
|
||||
LDA ]2
|
||||
STA WPAR2
|
||||
LDA ]3
|
||||
STA WPAR1+1
|
||||
LDA ]4
|
||||
STA WPAR2+1
|
||||
LDA ]5
|
||||
STA BPAR1
|
||||
JSR TRECTF
|
||||
<<<
|
||||
TPUT MAC
|
||||
LDX ]1
|
||||
LDY ]2
|
||||
LDA ]3
|
||||
JSR TXTPUT
|
||||
<<<
|
||||
DIE80 MAC
|
||||
LDA #21
|
||||
JSR COUT
|
||||
<<<
|
||||
COL80 MAC
|
||||
LDA #18
|
||||
JSR COUT
|
||||
<<<
|
||||
COL40 MAC
|
||||
LDA #17
|
||||
JSR COUT
|
||||
<<<
|
||||
MTXT0 MAC
|
||||
LDA #24
|
||||
JSR COUT
|
||||
<<<
|
||||
MTXT1 MAC
|
||||
LDA #27
|
||||
JSR COUT
|
||||
<<<
|
||||
WAIT MAC
|
||||
]WTLP LDA KYBD
|
||||
BPL ]WTLP
|
||||
AND #$7F
|
||||
STA STROBE
|
||||
<<<
|
||||
TLINE MAC
|
||||
LDA ]1
|
||||
STA WPAR1
|
||||
LDA ]2
|
||||
STA WPAR1+1
|
||||
LDA ]3
|
||||
STA WPAR2
|
||||
LDA ]4
|
||||
STA WPAR2+1
|
||||
LDA ]5
|
||||
STA BPAR1
|
||||
JSR TBLINE
|
||||
<<<
|
||||
TCIRC MAC
|
||||
LDA ]1
|
||||
STA WPAR1
|
||||
LDA ]2
|
||||
STA WPAR2
|
||||
LDA ]3
|
||||
STA BPAR1
|
||||
LDA ]4
|
||||
STA BPAR2
|
||||
JSR TCIRCLE
|
||||
<<<
|
|
@ -0,0 +1,11 @@
|
|||
]ADDR1 EQU WPAR1
|
||||
DPRINT
|
||||
LDY #$00
|
||||
:LOOP
|
||||
LDA (]ADDR1),Y
|
||||
BEQ :EXIT
|
||||
JSR COUT1
|
||||
INY
|
||||
BNE :LOOP
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,17 @@
|
|||
]STRLEN EQU VARTAB
|
||||
PRNSTR
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA ]STRLEN
|
||||
:LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
JSR COUT1
|
||||
CPY ]STRLEN
|
||||
BNE :LP
|
||||
; LOOP
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
RTS
|
|
@ -1,26 +1,26 @@
|
|||
]STRLEN EQU VARTAB
|
||||
SINPUT
|
||||
LDX #$00
|
||||
JSR GETLN
|
||||
STX :STRLEN
|
||||
CPX #0
|
||||
BEQ :ZEXIT
|
||||
:INP_CLR
|
||||
LDY #0
|
||||
LDA :STRLEN
|
||||
STA RETLEN
|
||||
STA RETURN
|
||||
INC RETLEN
|
||||
:LOOP
|
||||
LDA KEYBUFF,Y
|
||||
INY
|
||||
STA RETURN,Y
|
||||
CPY :STRLEN
|
||||
BNE :LOOP ; LOOP
|
||||
STX ]STRLEN
|
||||
CPX #0
|
||||
BNE :INP_CLR
|
||||
STX RETLEN
|
||||
STX RETURN
|
||||
JMP :EXIT
|
||||
:ZEXIT
|
||||
LDA #0
|
||||
STA RETLEN
|
||||
STA RETURN
|
||||
:INP_CLR
|
||||
LDA ]STRLEN
|
||||
STA RETURN
|
||||
STA RETLEN
|
||||
INC RETLEN
|
||||
LDX #255
|
||||
LDY #0
|
||||
:LOOP
|
||||
INX
|
||||
INY
|
||||
LDA KEYBUFF,X
|
||||
STA RETURN,Y
|
||||
CPX ]STRLEN
|
||||
BNE :LOOP ; LOOP
|
||||
:EXIT
|
||||
RTS
|
||||
:STRLEN DS 1
|
|
@ -0,0 +1,91 @@
|
|||
]X1 EQU WPAR1
|
||||
]X2 EQU WPAR2
|
||||
]Y1 EQU WPAR1+1
|
||||
]Y2 EQU WPAR2+1
|
||||
]F EQU BPAR1
|
||||
]DX EQU VARTAB ; CHANGE IN X
|
||||
]DY EQU VARTAB+1 ; CHANGE IN Y
|
||||
]SX EQU VARTAB+2 ; X POSITION STEP
|
||||
]SY EQU VARTAB+3 ; Y POSITION STEP
|
||||
]ERR EQU VARTAB+4 ; SLOPE ERROR
|
||||
]ERR2 EQU VARTAB+5 ; COMPARISON COPY OF ]ERR
|
||||
TBLINE
|
||||
LDX #$FF
|
||||
LDA ]Y1
|
||||
SEC
|
||||
SBC ]Y2
|
||||
BPL :YSTORE
|
||||
LDX #1
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
:YSTORE
|
||||
STA ]DY
|
||||
STX ]SY
|
||||
LDX #$FF
|
||||
LDA ]X1
|
||||
SEC
|
||||
SBC ]X2
|
||||
BPL :XSTORE
|
||||
LDX #1
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
:XSTORE
|
||||
STA ]DX
|
||||
STX ]SX
|
||||
CMP ]DY
|
||||
BEQ :SKIP
|
||||
BPL :SKIP2
|
||||
:SKIP
|
||||
LDA ]DY
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
:SKIP2
|
||||
STA ]ERR
|
||||
ASL ]DX
|
||||
ASL ]DY
|
||||
:LP
|
||||
LDA ]Y1
|
||||
LDY ]X1
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]X1
|
||||
CMP ]X2
|
||||
BNE :KEEPGO
|
||||
LDA ]Y1
|
||||
CMP ]Y2
|
||||
BEQ :EXIT ; IF EQUAL, EXIT
|
||||
:KEEPGO
|
||||
LDA ]ERR
|
||||
STA ]ERR2
|
||||
CLC
|
||||
ADC ]DX
|
||||
BMI :SKIPX
|
||||
BEQ :SKIPX
|
||||
LDA ]ERR
|
||||
SEC
|
||||
SBC ]DY
|
||||
STA ]ERR
|
||||
LDA ]X1
|
||||
CLC
|
||||
ADC ]SX
|
||||
STA ]X1
|
||||
:SKIPX
|
||||
LDA ]ERR2
|
||||
CMP ]DY
|
||||
BPL :SKIPY
|
||||
LDA ]ERR
|
||||
CLC
|
||||
ADC ]DX
|
||||
STA ]ERR
|
||||
LDA ]Y1
|
||||
CLC
|
||||
ADC ]SY
|
||||
STA ]Y1
|
||||
:SKIPY
|
||||
JMP :LP
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,202 @@
|
|||
]XC EQU WPAR1
|
||||
]YC EQU WPAR2
|
||||
]R EQU BPAR1
|
||||
]F EQU BPAR2
|
||||
]Y EQU VARTAB
|
||||
]X EQU VARTAB+1
|
||||
]DY EQU VARTAB+2
|
||||
]DX EQU VARTAB+4
|
||||
]ERR EQU VARTAB+6
|
||||
]DIAM EQU VARTAB+8
|
||||
]XT EQU VARTAB+10
|
||||
]YT EQU VARTAB+12
|
||||
TCIRCLE
|
||||
LDA #0
|
||||
STA ]Y
|
||||
LDA ]R
|
||||
STA ]X
|
||||
STA ]ERR
|
||||
ASL
|
||||
STA ]DIAM
|
||||
LDA ]X
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]XT
|
||||
LDA ]Y
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]YT
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]X
|
||||
TAY
|
||||
TAX
|
||||
LDA ]YC
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]XT
|
||||
TAX
|
||||
TAY
|
||||
LDA ]YC
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
TAY
|
||||
TAX
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]X
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
TAY
|
||||
TAX
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]XT
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
:LOOP
|
||||
LDA ]Y
|
||||
CMP ]X
|
||||
BCC :LPCONT
|
||||
JMP :EXIT
|
||||
:LPCONT
|
||||
:STEPY
|
||||
LDA ]Y
|
||||
ASL
|
||||
ADC #1
|
||||
STA ]DY
|
||||
INC ]Y
|
||||
LDA ]DY
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
ADC ]ERR
|
||||
STA ]ERR
|
||||
BPL :PLOT
|
||||
:STEPX
|
||||
LDA ]X
|
||||
ASL
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
ADC #1
|
||||
STA ]DX
|
||||
DEC ]X
|
||||
LDA ]DX
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
ADC ]ERR
|
||||
STA ]ERR
|
||||
:PLOT
|
||||
LDA ]X
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]XT
|
||||
LDA ]Y
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]YT
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]X
|
||||
TAY
|
||||
TAX
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]Y
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]XT
|
||||
TAY
|
||||
TAX
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]Y
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]XT
|
||||
TAY
|
||||
TAX
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]YT
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]X
|
||||
TAY
|
||||
TAX
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]YT
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]Y
|
||||
TAX
|
||||
TAY
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]X
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]YT
|
||||
TAX
|
||||
TAY
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]X
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]YT
|
||||
TAX
|
||||
TAY
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]XT
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]XC
|
||||
CLC
|
||||
ADC ]Y
|
||||
TAY
|
||||
TAX
|
||||
LDA ]YC
|
||||
CLC
|
||||
ADC ]XT
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
JMP :LOOP
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,19 @@
|
|||
]X1 EQU WPAR1
|
||||
]X2 EQU WPAR1+1
|
||||
]Y1 EQU BPAR1
|
||||
]F EQU BPAR2
|
||||
THLINE
|
||||
LDA ]Y1
|
||||
LDY ]X1
|
||||
:LOOP
|
||||
JSR GBCALC
|
||||
|
||||
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]Y1
|
||||
INY
|
||||
CPY ]X2
|
||||
BNE :LOOP
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,31 @@
|
|||
]X1 EQU WPAR1
|
||||
]X2 EQU WPAR1+1
|
||||
]Y1 EQU WPAR2
|
||||
]Y2 EQU WPAR2+1
|
||||
]F EQU BPAR1
|
||||
]XC EQU VARTAB
|
||||
]YC EQU VARTAB+1
|
||||
TRECTF
|
||||
LDA ]X1
|
||||
STA ]XC
|
||||
LDA ]Y1
|
||||
STA ]YC
|
||||
:LP1
|
||||
LDA ]YC
|
||||
LDY ]XC
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
LDA ]YC
|
||||
INY
|
||||
STY ]XC
|
||||
CPY ]X2
|
||||
BNE :LP1
|
||||
LDA ]X1
|
||||
STA ]XC
|
||||
INC ]YC
|
||||
LDA ]YC
|
||||
CMP ]Y2
|
||||
BNE :LP1
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,17 @@
|
|||
]X1 EQU WPAR1
|
||||
]Y1 EQU WPAR2
|
||||
]Y2 EQU WPAR2+1
|
||||
]F EQU BPAR1
|
||||
TVLINE
|
||||
LDA ]Y1
|
||||
LDY ]X1
|
||||
:LOOP
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
INC ]Y1
|
||||
LDA ]Y1
|
||||
CMP ]Y2
|
||||
BNE :LOOP ; LOOP
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,14 @@
|
|||
]Y1 EQU VARTAB
|
||||
]X1 EQU VARTAB+1
|
||||
]F EQU VARTAB+3
|
||||
TXTPUT
|
||||
STA ]F
|
||||
STY ]Y1
|
||||
STX ]X1
|
||||
LDA ]Y1
|
||||
LDY ]X1
|
||||
JSR GBCALC
|
||||
LDA ]F
|
||||
STA (GBPSH),Y
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,24 @@
|
|||
XPRINT
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #$01
|
||||
|
||||
:LOOP
|
||||
LDA (ADDR1),Y
|
||||
BEQ :EXIT
|
||||
JSR COUT1
|
||||
INY
|
||||
BNE :LOOP
|
||||
:EXIT
|
||||
CLC
|
||||
TYA
|
||||
ADC ADDR1
|
||||
STA ADDR1
|
||||
LDA ADDR1+1
|
||||
ADC #$00
|
||||
PHA
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
|
@ -0,0 +1,35 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* DPRINT (NATHAN RIGGS) *
|
||||
* *
|
||||
* PRINT A ZERO-TERMINATED *
|
||||
* STRING AT A GIVEN ADDRESS. *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS (2B) *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* PRINT STRING TO SCREEN *
|
||||
* *
|
||||
* DESTROYS: AXYNVBDIZCMS *
|
||||
* ^^^^ ^ ^ *
|
||||
* *
|
||||
* CYCLES: 61+ *
|
||||
* SIZE: 27 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDR1 EQU WPAR1
|
||||
*
|
||||
DPRINT
|
||||
*
|
||||
LDY #$00 ; RESET COUNTER
|
||||
:LOOP
|
||||
LDA (]ADDR1),Y
|
||||
BEQ :EXIT ; IF CHAR = $00 THEN EXIT
|
||||
JSR COUT1 ; OTHERWISE, PRINT CHAR
|
||||
INY ; INCREAS COUNTER
|
||||
BNE :LOOP ; IF COUNTER < 256, LOOP
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,39 @@
|
|||
*``````````````````````````````*
|
||||
* PRNSTR (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = ADDRESS LOBYTE *
|
||||
* .X = ADDRESS HIBYTE *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* PRINTS STRING TO SCREEN. *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 28+ *
|
||||
* SIZE: 22 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STRLEN EQU VARTAB ; 1 BYTE
|
||||
*
|
||||
PRNSTR
|
||||
*
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
*
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; GET STRING LENGTH
|
||||
STA ]STRLEN
|
||||
:LP
|
||||
INY
|
||||
LDA (ADDR1),Y ; GET CHARACTER
|
||||
JSR COUT1 ; PRINT CHARACTER TO SCREEN
|
||||
CPY ]STRLEN ; IF Y < LENGTH
|
||||
BNE :LP
|
||||
; LOOP; ELSE
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
RTS
|
|
@ -0,0 +1,49 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* SINPUT (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* .X = LENGTH OF STRING *
|
||||
* RETURN = STRING TYPED *
|
||||
* RETLEN = LENGTH OF STRING *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^^^^^ ^^ *
|
||||
* *
|
||||
* CYCLES: 60+ *
|
||||
* SIZE: 45 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STRLEN EQU VARTAB ; 1 BYTE
|
||||
*
|
||||
SINPUT
|
||||
*
|
||||
LDX #$00
|
||||
JSR GETLN
|
||||
STX ]STRLEN ; STORE STR LENGTH
|
||||
CPX #0 ; IF LEN = 0, EXIT
|
||||
BNE :INP_CLR
|
||||
STX RETLEN
|
||||
STX RETURN
|
||||
JMP :EXIT
|
||||
:INP_CLR
|
||||
LDA ]STRLEN ; LENGTH OF STRING
|
||||
STA RETURN ; STRING LENGTH FIRST BYTE
|
||||
STA RETLEN ; PUT LENGTH + 1 HERE
|
||||
INC RETLEN
|
||||
LDX #255
|
||||
LDY #0
|
||||
:LOOP
|
||||
INX
|
||||
INY
|
||||
LDA KEYBUFF,X ; PUT STR INTO NEW LOC
|
||||
STA RETURN,Y
|
||||
CPX ]STRLEN ; IF Y < STR LENGTH
|
||||
BNE :LOOP ; LOOP; ELSE, EXIT
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,142 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* TBLINE (NATHAN RIGGS) *
|
||||
* *
|
||||
* OUTPUTS A LINE FROM COORDS *
|
||||
* X1,Y1 TO X2,Y2 USING THE *
|
||||
* BRESSENHAM LINE ALOGORITHM *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ]X1 STORED IN WPAR1 *
|
||||
* ]X2 STORED IN WPAR1+1 *
|
||||
* ]Y1 STORED IN WPAR2 *
|
||||
* ]Y2 STORED IN WPAR2+1 *
|
||||
* ]F STORED IN BPAR1 *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 283+ *
|
||||
* SIZE: 188 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; PARAMETERS PASSED VIA
|
||||
]X2 EQU WPAR2 ; ZERO PAGE LOCATIONS
|
||||
]Y1 EQU WPAR1+1
|
||||
]Y2 EQU WPAR2+1
|
||||
]F EQU BPAR1
|
||||
*
|
||||
]DX EQU VARTAB ; CHANGE IN X; 1 BYTE
|
||||
]DY EQU VARTAB+1 ; CHANGE IN Y; 1 BYTE
|
||||
]SX EQU VARTAB+2 ; X POSITION STEP; 1 BYTE
|
||||
]SY EQU VARTAB+3 ; Y POSITION STEP; 1 BYTE
|
||||
]ERR EQU VARTAB+4 ; SLOPE ERROR; 1 BYTE
|
||||
]ERR2 EQU VARTAB+5 ; COMPARISON COPY OF ]ERR; 1 BYTE
|
||||
*
|
||||
TBLINE
|
||||
*
|
||||
** FIRST CALCULATE INITIAL VALUES
|
||||
*
|
||||
** CHECK IF Y STEP IS POSITIVE OR NEGATIVE
|
||||
*
|
||||
LDX #$FF ; .X = -1
|
||||
LDA ]Y1 ; GET Y1 - Y2
|
||||
SEC ; RESET CARRY
|
||||
SBC ]Y2
|
||||
BPL :YSTORE ; IF POSITIVE, SKIP TO STORE
|
||||
LDX #1 ; .X = +1
|
||||
EOR #$FF ; NEG ACCUMULATOR
|
||||
CLC
|
||||
ADC #1
|
||||
:YSTORE
|
||||
STA ]DY ; STORE CHANGE IN Y
|
||||
STX ]SY ; STORE + OR - Y STEPPER
|
||||
*
|
||||
** NOW CHECK POSITIVE OR NEGATIVE X STEP
|
||||
*
|
||||
LDX #$FF ; .X = -1
|
||||
LDA ]X1 ; GET X1 - X2
|
||||
SEC ; RESET CARRY
|
||||
SBC ]X2 ; SUBTRACT X2
|
||||
BPL :XSTORE ; IF POSITIVE, SKIP TO X STORE
|
||||
LDX #1 ; .X = +1
|
||||
EOR #$FF ; NEGATIVE ACCUMULATOR
|
||||
CLC
|
||||
ADC #1
|
||||
:XSTORE
|
||||
STA ]DX ; STORE CHANGE IN X
|
||||
STX ]SX ; STORE + OR - X STEPPER
|
||||
*
|
||||
** IF CHANGE IN X IS GREATER THAN CHANGE IN Y,
|
||||
** THEN INITIAL ERROR IS THE CHANGE IN X; ELSE,
|
||||
** INITIAL ERROR IS THE CHANGE IN Y
|
||||
*
|
||||
CMP ]DY ; DX IS ALREADY IN .A
|
||||
BEQ :SKIP ; IF EQUAL, US CHANGE IN Y
|
||||
BPL :SKIP2 ; IF GREATER THAN, USE CHANGE IN X
|
||||
:SKIP
|
||||
LDA ]DY ; GET CHANGE IN Y
|
||||
EOR #$FF ; NEGATE
|
||||
CLC
|
||||
ADC #1
|
||||
:SKIP2
|
||||
STA ]ERR ; STORE EITHER DX OR DY IN ERR
|
||||
ASL ]DX ; DX = DX * 2
|
||||
ASL ]DY ; DY = DY * 2
|
||||
*
|
||||
** NOW LOOP THROUGH EACH POINT ON LINE
|
||||
*
|
||||
:LP
|
||||
*
|
||||
** PRINT CHARACTER FIRST
|
||||
*
|
||||
LDA ]Y1 ; .A = Y POSITION
|
||||
LDY ]X1 ; .Y = X POSITION
|
||||
JSR GBCALC ; FIND SCREEN MEM LOCATION
|
||||
LDA ]F ; LOAD FILL INTO .A
|
||||
STA (GBPSH),Y ; PUSH TO SCREEN MEMORY
|
||||
*
|
||||
** NOW CHECK IF X1 = X2, Y = Y2
|
||||
*
|
||||
LDA ]X1 ; IF X1 != X2 THEN
|
||||
CMP ]X2 ; KEEP LOOPING
|
||||
BNE :KEEPGO
|
||||
LDA ]Y1 ; ELSE, CHECK IF Y1 = Y2
|
||||
CMP ]Y2
|
||||
BEQ :EXIT ; IF EQUAL, EXIT; ELSE, LOOP
|
||||
:KEEPGO
|
||||
LDA ]ERR ; LOAD ERR AND BACKUP
|
||||
STA ]ERR2 ; FOR LATER COMPARISON
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]DX ; ADD CHANGE IN X
|
||||
BMI :SKIPX ; IF RESULT IS -, SKIP
|
||||
BEQ :SKIPX ; TO CHANGING Y POS
|
||||
LDA ]ERR ; RELOAD ERR
|
||||
SEC ; SET CARRY
|
||||
SBC ]DY ; SUBTRACT CHANGE IN Y
|
||||
STA ]ERR ; STORE ERROR
|
||||
LDA ]X1 ; LOAD CURRENT X POSITION
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]SX ; INCREASE OR DECREASE BY 1
|
||||
STA ]X1 ; STORE NEW X POSITION
|
||||
:SKIPX
|
||||
LDA ]ERR2 ; LOAD EARLIER ERR
|
||||
CMP ]DY ; IF ERR - CHANGE IN Y IS +
|
||||
BPL :SKIPY ; SKIP CHANGING Y POS
|
||||
LDA ]ERR ; RELOAD ERR
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]DX ; ADD CHANGE IN X
|
||||
STA ]ERR ; STORE NEW ERR
|
||||
LDA ]Y1 ; LOAD Y POSITION
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]SY ; INCREASE OR DECREASE YPOS BY 1
|
||||
STA ]Y1 ; STORE NEW Y POSITION
|
||||
:SKIPY
|
||||
JMP :LP ; LOOP LINE DRAWING
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,328 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* TCIRCLE (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = X CENTER POS *
|
||||
* WPAR2 = Y CENTER POS *
|
||||
* BPAR1 = RADIUS *
|
||||
* BPAR2 = FILL CHARACTER *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* USES BRESENHAM'S CIRCLE *
|
||||
* ALGORITHM TO DRAW A CIRCLE *
|
||||
* TO THE 40-COLUMN TEXTMODE *
|
||||
* SCREEN. *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 494+ *
|
||||
* SIZE: 420 BYTES *
|
||||
* *
|
||||
* SUBSTANTIAL DEBT IS OWED TO *
|
||||
* MARC GOLOMBECK AND HIS GREAT *
|
||||
* IMPLEMENTATION OF THE *
|
||||
* BRESENHAM CIRCLE ALGORITHM *
|
||||
* IN 6502 AND APPLESOFT, WHICH *
|
||||
* IS BASED ON THE GERMAN LANG *
|
||||
* VERSION OF WIKIPEDIA'S ENTRY *
|
||||
* ON THE ALGORITHM THAT HAS A *
|
||||
* BASIC PSEUDOCODE EXAMPLE. *
|
||||
* THAT EXAMPLE, WITH CHANGES *
|
||||
* VARIABLE NAMES, IS INCLUDED *
|
||||
* BELOW. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]XC EQU WPAR1
|
||||
]YC EQU WPAR2
|
||||
]R EQU BPAR1
|
||||
]F EQU BPAR2
|
||||
*
|
||||
]Y EQU VARTAB ; CENTER YPOS
|
||||
]X EQU VARTAB+1 ; CENTER XPOS
|
||||
]DY EQU VARTAB+2 ; CHANGE IN Y
|
||||
]DX EQU VARTAB+4 ; CHANGE IN X
|
||||
]ERR EQU VARTAB+6 ; ERROR VALUE
|
||||
]DIAM EQU VARTAB+8 ; DIAMETER
|
||||
]XT EQU VARTAB+10 ; INVERTED X VALUE
|
||||
]YT EQU VARTAB+12 ; INVERTED Y VALUE
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* BASIC PSEUDOCODE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
* X = R
|
||||
* Y = 0
|
||||
* ERROR = R
|
||||
* SETPIXEL XC + X, YC + Y
|
||||
* WHILE Y < X
|
||||
* DY = Y * 2 + 1
|
||||
* Y = Y + 1
|
||||
* ERROR = ERROR - DY
|
||||
* IF ERROR < 0 THEN
|
||||
* DX = 1 - X * 2
|
||||
* X = X - 1
|
||||
* ERROR = ERROR - DX
|
||||
* END IF
|
||||
* SETPIXEL XC + X, YC + Y
|
||||
* SETPIXEL XC - X, YC + Y
|
||||
* SETPIXEL XC - X, YC - Y
|
||||
* SETPIXEL XC + X, YC - Y
|
||||
* SETPIXEL XC + Y, YC + X
|
||||
* SETPIXEL XC - Y, YC + X
|
||||
* SETPIXEL XC - Y, YC - X
|
||||
* SETPIXEL XC + Y, YC - X
|
||||
* WEND
|
||||
*
|
||||
TCIRCLE
|
||||
*
|
||||
** FIRST, INITIALIZE VARIABLES
|
||||
*
|
||||
LDA #0 ; CLEAR YPOS
|
||||
STA ]Y
|
||||
LDA ]R ; LOAD RADIUS
|
||||
STA ]X ; X = RADIUS
|
||||
STA ]ERR ; ERROR = RADIUS
|
||||
ASL ; R * 2
|
||||
STA ]DIAM ; STORE DIAMETER
|
||||
*
|
||||
** NOW DRAW FIRST PART OF CIRCLE
|
||||
*
|
||||
** CALCULATE -X AND -Y
|
||||
*
|
||||
LDA ]X ; GET XPOS
|
||||
EOR #$FF ; NEGATE
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]XT ; STORE NEGATED IN XT
|
||||
LDA ]Y ; GET YPOS
|
||||
EOR #$FF ; NEGATE
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]YT ; STORE NEGATED IN YT
|
||||
*
|
||||
** PLOT XC+X,YC
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]X ; ADD CURRENT XPOS
|
||||
TAY ; TRANSER TO .Y
|
||||
TAX ; AND .X
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN MEMORY POS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE IN SCREEN MEMORY
|
||||
*
|
||||
** PLOT XC-X,YC
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]XT ; ADD NEGATED CURRENT XPOS
|
||||
TAX ; TRANSFER TO .X
|
||||
TAY ; AND .Y
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN MEMORY POS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE IN SCREEN MEMORY
|
||||
*
|
||||
** PLOT XC,YC+X
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
TAY ; TRANSFER TO .Y
|
||||
TAX ; AND .X
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]X ; ADD CURRENT XPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN MEMORY POS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE IN SCREEN MEMORY
|
||||
*
|
||||
** PLOT XC,YC-X
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
TAY ; TRANSFER TO .Y
|
||||
TAX ; AND .X
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]XT ; ADD NEGATED CURRENT XPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN MEMORY POS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE IN SCREEN MEMORY
|
||||
*
|
||||
** NOW LOOP UNTIL CIRCLE IS FINISHED
|
||||
*
|
||||
:LOOP
|
||||
*
|
||||
** CHECK IF CIRCLE FINISHED
|
||||
*
|
||||
LDA ]Y ; IF Y > X
|
||||
CMP ]X
|
||||
BCC :LPCONT ; CONTINUE LOOPING
|
||||
JMP :EXIT ; OTHERWISE, CIRCLE DONE
|
||||
:LPCONT
|
||||
:STEPY ; STEP THE Y POSITION
|
||||
LDA ]Y ; LOAD YPOS
|
||||
ASL ; MULTIPLY BY 2
|
||||
*CLC
|
||||
ADC #1 ; ADD +1
|
||||
STA ]DY ; STORE CHANGE OF Y
|
||||
INC ]Y ; INCREASE YPOS
|
||||
LDA ]DY ; NEGATE
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
ADC ]ERR ; ADD ERR
|
||||
STA ]ERR ; ERR = ERR - DY
|
||||
BPL :PLOT ; IF ERR IS +, SKIP TO PLOT
|
||||
:STEPX
|
||||
LDA ]X ; LOAD XPOS
|
||||
ASL ; MULTIPLY BY 2
|
||||
EOR #$FF ; NEGATE
|
||||
CLC
|
||||
ADC #1
|
||||
ADC #1 ; (X*2) + 1
|
||||
STA ]DX ; STORE CHANGE OF X
|
||||
DEC ]X ; DECREASE YPOS
|
||||
LDA ]DX ; NEGATE
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
ADC ]ERR ; ADD ERR
|
||||
STA ]ERR ; ERR = ERR - DX
|
||||
*
|
||||
:PLOT
|
||||
*
|
||||
** NOW CALCULATE -X AND -Y
|
||||
*
|
||||
LDA ]X
|
||||
EOR #$FF ; NEGATE
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]XT
|
||||
LDA ]Y
|
||||
EOR #$FF ; NEGATE
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]YT
|
||||
*
|
||||
** NOW PLOT CIRCLE OCTANTS
|
||||
*
|
||||
** PLOT XC+X,YC+Y
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]X ; ADD CURRENT XPOS
|
||||
TAY ; TRANSFER TO .Y
|
||||
TAX ; AND .X
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]Y ; ADD CURRENT YPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN ADDRESS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE AT SCREEN ADDRESS
|
||||
*
|
||||
** PLOT XC-X,YC+Y
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]XT ; ADD NEGATED CURRENT XPOS
|
||||
TAY ; TRANSFER TO .Y
|
||||
TAX ; AND TO .X
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]Y ; ADD CURRENT YPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN ADDRESS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE AT SCREEN ADDRESS
|
||||
*
|
||||
** PLOT XC-X,YC-Y
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]XT ; ADD NEGATED CURRENT XPOS
|
||||
TAY ; TRANSFER TO .Y
|
||||
TAX ; AND .X
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]YT ; ADD NEGATED CURRENT YPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN ADDRESS
|
||||
LDA ]F ; LOAD FILL CHARACTER
|
||||
STA (GBPSH),Y ; STORE AT SCREEN ADDRESS
|
||||
*
|
||||
** PLOT XC+X,YC-Y
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]X ; ADD CURRENT XPOS
|
||||
TAY ; TRANSFER TO .Y
|
||||
TAX ; AND .X
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]YT ; ADD NEGATE CURRENT YPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN ADDRESS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE AT SCREEN ADDRESS
|
||||
*
|
||||
** PLOT XC+Y,YC+X
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]Y ; ADD CURRENT YPOS
|
||||
TAX ; TRANSFER TO .X
|
||||
TAY ; AND .Y
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]X ; ADD CURRENT XPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN ADDRESS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE AT SCREEN ADDRESS
|
||||
*
|
||||
** PLOT XC-Y,YC+X
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]YT ; ADD NEGATED CURRENT YPOS
|
||||
TAX ; TRANSFER TO .X
|
||||
TAY ; AND .Y
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]X ; ADD CURRENT XPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN ADDRESS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE AT SCREEN ADDRESS
|
||||
*
|
||||
** PLOT XC-Y,YC-X
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]YT ; ADD NEGATED CURRENT YPOS
|
||||
TAX ; TRANSFER TO .X
|
||||
TAY ; AND .Y
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]XT ; ADD NEGATED CURRENT XPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN ADDRESS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE AT SCREEN ADDRESS
|
||||
*
|
||||
** PLOT XC+Y,YC-X
|
||||
*
|
||||
LDA ]XC ; LOAD CIRCLE CENTER XPOS
|
||||
CLC ; CLEAR CARRY
|
||||
ADC ]Y ; ADD CURRENT YPOS
|
||||
TAY ; TRANSFER TO .Y
|
||||
TAX ; AND .X
|
||||
LDA ]YC ; LOAD CIRCLE CENTER YPOS
|
||||
CLC
|
||||
ADC ]XT ; ADD NEGATED CURRENT XPOS
|
||||
JSR GBCALC ; GET X,Y SCREEN ADDRESS
|
||||
LDA ]F ; LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; STORE AT SCREEN ADDRESS
|
||||
JMP :LOOP ; LOOP UNTIL FINISHED
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,41 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* THLINE (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = X ORIGIN *
|
||||
* WPAR1+1 = X DESTINATION *
|
||||
* BPAR1 = Y POSITION *
|
||||
* BPAR2 = FILL CHARACTER *
|
||||
* *
|
||||
* OUTPUT: HORIZONTAL LINE TO *
|
||||
* SCREEN *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^^^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 90+ *
|
||||
* SIZE: 47 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; 1 BYTE
|
||||
]X2 EQU WPAR1+1 ; 1 BYTE
|
||||
]Y1 EQU BPAR1 ; 1 BYTE
|
||||
]F EQU BPAR2 ; 1 BYTE
|
||||
*
|
||||
THLINE
|
||||
LDA ]Y1 ; LOAD ROW
|
||||
LDY ]X1 ; LOAD X START POS
|
||||
:LOOP
|
||||
JSR GBCALC ; GOSUB GBASCALC ROUTINE,
|
||||
; WHICH FINDS MEMLOC FOR
|
||||
; POSITION ON SCREEN
|
||||
LDA ]F
|
||||
STA (GBPSH),Y ; PUSH ]F TO SCREEN MEM
|
||||
LDA ]Y1
|
||||
INY ; INCREASE X POS
|
||||
CPY ]X2 ; IF LESS THAN X END POS
|
||||
BNE :LOOP ; REPEAT UNTIL DONE
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,57 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* TRECTF (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = X ORIGIN *
|
||||
* WPAR1+1 = X DESTINATION *
|
||||
* WPAR2 = Y ORIGIN *
|
||||
* WPAR2+1 = Y DESTINATION *
|
||||
* BPAR1 = FILL CHARACTER *
|
||||
* *
|
||||
* OUTPUT *
|
||||
* *
|
||||
* FILLED RECTANGLE TO SCREEN *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 69+ *
|
||||
* SIZE: 74 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; 1 BYTE
|
||||
]X2 EQU WPAR1+1 ; 1 BYTE
|
||||
]Y1 EQU WPAR2 ; 1 BYTE
|
||||
]Y2 EQU WPAR2+1 ; 1 BYTE
|
||||
]F EQU BPAR1 ; 1 BYTE
|
||||
*
|
||||
]XC EQU VARTAB ; 1 BYTE
|
||||
]YC EQU VARTAB+1 ; 1 BYTE
|
||||
*
|
||||
TRECTF
|
||||
LDA ]X1
|
||||
STA ]XC
|
||||
LDA ]Y1
|
||||
STA ]YC
|
||||
:LP1 ; PRINT HORIZONTAL LINE
|
||||
LDA ]YC
|
||||
LDY ]XC
|
||||
JSR GBCALC ; GET SCREEN MEMORY ADDR
|
||||
LDA ]F ; OF CURRENT POSITION
|
||||
STA (GBPSH),Y ; PUT CHAR IN LOCATION
|
||||
LDA ]YC
|
||||
INY ; INCREASE XPOS
|
||||
STY ]XC
|
||||
CPY ]X2 ; IF XPOS < XMAX,
|
||||
BNE :LP1 ; KEEP PRINTING LINE
|
||||
*
|
||||
LDA ]X1 ; OTHERWISE, RESET XPOS
|
||||
STA ]XC
|
||||
INC ]YC ; AND INCREASE YPOS
|
||||
LDA ]YC
|
||||
CMP ]Y2 ; IF YPOS < YMAX
|
||||
BNE :LP1 ; PRINT HORIZONTAL LINE
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,39 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* TVLINE (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ]X1 STORED AT WPAR1 *
|
||||
* ]Y1 STORED AT WPAR2 *
|
||||
* ]Y2 STORED AT WPAR2+1 *
|
||||
* ]F STORED AT BPAR1 *
|
||||
* *
|
||||
* OUTPUT: VERT LINE TO SCREEN *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 33+ *
|
||||
* SIZE: 34 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; 1 BYTE
|
||||
]Y1 EQU WPAR2 ; 1 BYTE
|
||||
]Y2 EQU WPAR2+1 ; 1 BYTE
|
||||
]F EQU BPAR1 ; 1 BYTE
|
||||
*
|
||||
TVLINE
|
||||
*
|
||||
LDA ]Y1
|
||||
LDY ]X1
|
||||
:LOOP
|
||||
JSR GBCALC ; GET POS SCREEN ADDRESS
|
||||
LDA ]F
|
||||
STA (GBPSH),Y ; PLOT TO SCREEN MEMORY
|
||||
INC ]Y1
|
||||
LDA ]Y1
|
||||
CMP ]Y2 ; IF Y1 < Y2
|
||||
BNE :LOOP ; LOOP; ELSE, CONTINUE
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,39 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* TXTPUT (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = FILL CHAR *
|
||||
* .X = X POSITION *
|
||||
* .Y = Y POSITION *
|
||||
* *
|
||||
* OUTPUT *
|
||||
* *
|
||||
* CHAR TO SCREEN AT X,Y *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^^^^^ ^^^ *
|
||||
* *
|
||||
* CYCLES: 29+ *
|
||||
* SIZE: 30 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]Y1 EQU VARTAB ; 1 BYTE
|
||||
]X1 EQU VARTAB+1 ; 1 BYTE
|
||||
]F EQU VARTAB+3 ; 1 BYTE
|
||||
CYC ON
|
||||
*
|
||||
TXTPUT
|
||||
*
|
||||
STA ]F ; GET FILL CHAR
|
||||
STY ]Y1 ; GET Y POS
|
||||
STX ]X1 ; GET XPOS
|
||||
*
|
||||
LDA ]Y1
|
||||
LDY ]X1
|
||||
JSR GBCALC ; GET SCREEN ADDRESS
|
||||
LDA ]F
|
||||
STA (GBPSH),Y ; PUSH CHAR TO SCREEN ADDR
|
||||
:EXIT
|
||||
RTS
|
|
@ -0,0 +1,44 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* XPRINT (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ASC AFTER SUBROUTINE CALL *
|
||||
* THAT CONTAINS STRING TO PRN *
|
||||
* *
|
||||
* OUTPUT *
|
||||
* *
|
||||
* STRING TO SCREEN *
|
||||
* *
|
||||
* DESTROY: AXYNVBDIZCMS *
|
||||
* ^ ^^^ ^^ *
|
||||
* *
|
||||
* CYCLES: 63+ *
|
||||
* SIZE: 33 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
XPRINT
|
||||
PLA ; GET CURRENT
|
||||
STA ADDR1 ; EXECUTION ADDRESS
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #$01 ; POINT TO NEXT
|
||||
; INSTRUCTION
|
||||
:LOOP
|
||||
LDA (ADDR1),Y ; GET CHARACTER
|
||||
BEQ :EXIT ; IF CHAR = $00 THEN EXIT
|
||||
JSR COUT1 ; OTHERWISE, PRINT CHAR
|
||||
INY ; INCREASE COUNTER
|
||||
BNE :LOOP ; IF COUNTER < 255, LOOP
|
||||
:EXIT
|
||||
CLC ; CLEAR CARRY
|
||||
TYA ; MOVE .Y TO .A
|
||||
ADC ADDR1 ; ADD RETURN LOBYTE
|
||||
STA ADDR1 ; SAVE
|
||||
LDA ADDR1+1 ; GET RETURN HIBYTE
|
||||
ADC #$00 ; ADD CARRY
|
||||
PHA ; PUSH TO STACK
|
||||
LDA ADDR1
|
||||
PHA ; PUSH TO STACK
|
||||
RTS
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,461 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* DEMO.ARRAYS *
|
||||
* *
|
||||
* A DECIDEDLY NON-EXHAUSTIVE *
|
||||
* DEMO OF ARRAY FUNCTIONALITY *
|
||||
* IN THE APPLEIIASM LIBRARY. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 14-JUL-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP OFF
|
||||
TR ON
|
||||
DSK DEMO.ARRAYS
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TOP INCLUDES (HOOKS,MACROS) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT MIN.HEAD.REQUIRED
|
||||
USE MIN.MAC.REQUIRED
|
||||
USE MIN.MAC.ARRAYS
|
||||
PUT MIN.HOOKS.ARRAYS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PROGRAM MAIN BODY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]VAR1 EQU $300
|
||||
]COUNT1 EQU $320
|
||||
]ARRAY1 EQU $4000
|
||||
]ARRAY2 EQU $5000
|
||||
]HOME EQU $FC58
|
||||
*
|
||||
JSR ]HOME
|
||||
_PRN "1D AND 2D 8BIT/16BIT ARRAYS",8D
|
||||
_PRN "===========================",8D8D
|
||||
_PRN "THIS MACRO LIBRARY AND VARIOUS",8D
|
||||
_PRN "SUBROUTINES ARE USED FOR THE CREATION,",8D
|
||||
_PRN "ACCESS AND MANAGEMENT OF ARRAYS THAT",8D
|
||||
_PRN "CAN BE EITHER ONE OR TWO DIMENSIONS",8D
|
||||
_PRN "AND CAN HAVE EITHER 255 ELEMENTS PER",8D
|
||||
_PRN "DIMENSION IN THE CASE OF 8BIT ARRAYS OR",8D
|
||||
_PRN "UP TO 65,530 ELEMENTS IN THE CASE OF",8D
|
||||
_PRN "16BIT ARRAYS--AT LEAST, THEORETICALLY.",8D
|
||||
_PRN "SINCE THAT WOULD TAKE UP THE ENTIRETY",8D
|
||||
_PRN "OF RAM ON MOST APPLE ][ COMPUTERS,",8D
|
||||
_PRN "HAVING THAT MANY ELEMENTS IS NOT LIKELY.",8D8D
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "AT LEAST IN THIS LIBRARY, ARRAYS",8D
|
||||
_PRN "ARE FAIRLY SIMPLE DATA STRUCTURES.",8D
|
||||
_PRN "EVERY ARRAY HAS A HEADER THAT SPECIFIES",8D
|
||||
_PRN "THE NUMBER OF ELEMENTS PER DIMENSION",8D
|
||||
_PRN "AS WELL AS THE LENGTH OF EACH ELEMENT.",8D
|
||||
_PRN "THESE ARE SET WITH THE DIM MACROS AND",8D
|
||||
_PRN "SUBROUTINES:",8D8D
|
||||
_PRN "DIM81: INIT 1-DIMENSIONAL 8BIT ARRAY",8D
|
||||
_PRN "DIM82: INIT 2-DIMENSIONAL 8BIT ARRAY",8D
|
||||
_PRN "DIM161: INIT 1-DIMENSIONAL 16BIT ARRAY",8D
|
||||
_PRN "DIM162: INIT 2-DIMENSIONAL 16BIT ARRAY",8D8D
|
||||
_WAIT
|
||||
_PRN "IF YOU NEED FEWER THAN 255 ELEMENTS",8D
|
||||
_PRN "IN A DIMENSION, I HIGHLY SUGGEST",8D
|
||||
_PRN "USING THE 8BIT ARRAY MACROS AND,",8D
|
||||
_PRN "SUBROUTINES, AS THERE IS A SIGNIFICANT",8D
|
||||
_PRN "SAVING OF BYTES AND CPU CYCLES.",8D
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "LIKE THE DIM MACROS, EACH ARRAY",8D
|
||||
_PRN "TYPE ALSO HAS A GET AND PUT MACRO AND",8D
|
||||
_PRN "SET OF SUBROUTINES DEDICATED TO IT:",8D8D
|
||||
_WAIT
|
||||
_PRN "GET81: RETRIEVE THE DATA IN A GIVEN",8D
|
||||
_PRN " ELEMENT AND PUT IN RETURN.",8D
|
||||
_PRN "GET82: RETRIEVE DATA FROM ELEMENT AT",8D
|
||||
_PRN " X,Y AND PUT IN RETURN.",8D
|
||||
_PRN "GET161: GET DATA FROM 16-BIT ELEMENT",8D
|
||||
_PRN " AND PUT IN RETURN.",8D
|
||||
_PRN "GET162: GET DATA FROM ELEMENT AT 16BIT",8D
|
||||
_PRN " X,Y LOCATION AND PUT IN RETURN.",8D8D
|
||||
_WAIT
|
||||
_PRN "PUT81: PUT DATA FROM SOURCE LOCATION IN",8D
|
||||
_PRN " AN ARRAY'S ELEMENT.",8D
|
||||
_PRN "PUT82: PUT DATA FROM SOURCE ADDRESS IN",8D
|
||||
_PRN " ARRAY ELEMENT AT X,Y.",8D
|
||||
_PRN "PUT161: PUT DATA FROM SOURCE ADDRESS IN",8D
|
||||
_PRN " 16-BIT ARRAY ELEMENT.",8D
|
||||
_PRN "PUT162: PUT DATA FROM SOURCE INTO 16BIT",8D
|
||||
_PRN " ARRAY ELEMENT AT X,Y.",8D8D
|
||||
_WAIT
|
||||
*
|
||||
JSR ]HOME
|
||||
_PRN "ONE-DIMENSIONAL, 8-BIT ARRAYS",8D
|
||||
_PRN "=============================",8D8D
|
||||
_PRN "DIM81, GET81, AND PU81 ARE USED FOR",8D
|
||||
_PRN "1D ARRAYS THAT DON'T NEED MORE THAN",8D
|
||||
_PRN "A SINGLE DIMENSION OF LESS THAN 255",8D
|
||||
_PRN "ELEMENTS. FOR MANY USES, THIS SUFFICES;",8D
|
||||
_PRN "THE FACT THAT THE APPLE ][ IS AN 8-BIT",8D
|
||||
_PRN "COMPUTER ATTESTS TO THIS FACT.",8D8D
|
||||
_WAIT
|
||||
_PRN "HOWEVER, THERE ARE A NUMBER OF CASES ",8D
|
||||
_PRN "IN WHICH 8-BIT INDEXING ISN'T ENOUGH.",8D
|
||||
_PRN "AGAIN, MAKE THE CHOICE BASED ON NEED,",8D
|
||||
_PRN "NOT CONVENIENCE. IF 255 ELEMENTS IS",8D
|
||||
_PRN "ENOUGH TO ACCOMPLISH THE TASK, USE ",8D
|
||||
_PRN "THESE MACROS AND SUBROUTINES.",8D8D
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "EIGHT BITS AND ONE DIMENSION: DIM",8D
|
||||
_PRN "=================================",8D8D
|
||||
_PRN "THE DIM81 MACRO CREATES A THREE",8D
|
||||
_PRN "BYTE HEADER THAT HOLDS, IN ORDER:",8D8D
|
||||
_PRN "BYTE 0: NUMBER OF ELEMENTS",8D
|
||||
_PRN "BYTE 1: ELEMENT SIZE",8D8D
|
||||
_PRN "THE GET81 AND PUT81 ROUTINES USE ",8D
|
||||
_PRN "THIS HEADER TO KNOW HOW MUCH DATA",8D
|
||||
_PRN "TO READ AND WRITE FROM AN ELEMENT.",8D
|
||||
_PRN "BASIC CHECKS AGAINST THE INTENDED",8D
|
||||
_PRN "NUMBER OF ELEMENTS CAN ALSO BE DONE",8D
|
||||
_PRN "USING THIS HEADER.",8D8D
|
||||
_WAIT
|
||||
_PRN " DIM81 #ARRAY1;#10;#2;#$FF",8D8D
|
||||
_PRN "CREATES AN 8BIT, 1D ARRAY AT THE",8D
|
||||
_PRN "ADDRESS OF #ARRAY1 WITH TEN ELEMENTS",8D
|
||||
_PRN "OF 2 BYTES EACH. ALL ELEMENTS ARE",8D
|
||||
_PRN "FILLED WITH THE LAS PARAMETER, $FF."
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "WE CAN DUMP #ARRAY1 BEFORE AND",8D
|
||||
_PRN "AFTER USING DIM81 TO SHOW THE",8D
|
||||
_PRN "DIFFERENCE:",8D8D
|
||||
_PRN "BEFORE:",8D8D
|
||||
DUMP #]ARRAY1;#2
|
||||
DUMP #]ARRAY1+2;#10
|
||||
DUMP #]ARRAY1+12;#10
|
||||
_PRN " ",8D8D
|
||||
_WAIT
|
||||
DIM81 #]ARRAY1;#10;#2;#$FF
|
||||
_PRN "AFTER:",8D8D
|
||||
DUMP #]ARRAY1;#2
|
||||
DUMP #]ARRAY1+2;#10
|
||||
DUMP #]ARRAY1+12;#10
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "8 BITS AND ONE DIMENSION: PUT",8D
|
||||
_PRN "=============================",8D8D
|
||||
_PRN "THE PUT81 MACRO PUTS THE DATA FROM",8D
|
||||
_PRN "A SOURCE ADDRESS INTO AN 8BIT, 1D",8D
|
||||
_PRN "ARRAY ELEMENT. THE SOURCE ADDRESS,",8D
|
||||
_PRN "ARRAY ADDRESS AND THE ELEMENT NUMBER",8D
|
||||
_PRN "ARE SPECIFIED AS PARAMETERS, IN",8D
|
||||
_PRN "THAT ORDER. NOTE THAT THE NUMBER OF",8D
|
||||
_PRN "BYTES TO COPY INTO THE ELEMENT IS",8D
|
||||
_PRN "PREDETERMINED BY THE ELEMENT SIZE",8D
|
||||
_PRN "SET BY DIM81 IN THE HEADER.",8D8D
|
||||
_PRN "THUS:",8D8D
|
||||
_WAIT
|
||||
_PRN " LDA #0",8D
|
||||
_PRN " STA ]VAR1",8D
|
||||
_PRN " STA ]VAR1+1",8D
|
||||
_PRN " PUT81 #]VAR1;#ARRAY1;#3",8D8D
|
||||
_PRN "WILL PUT $0000 IN ARRAY1'S ",8D
|
||||
_PRN "ELEMENT 3, WHICH IS TECHNICALLY THE",8D
|
||||
_PRN "FOURTH ELEMENT DUE TO ZERO INDEXING."
|
||||
LDA #0
|
||||
STA ]VAR1
|
||||
STA ]VAR1+1
|
||||
PUT81 #]VAR1;#]ARRAY1;#3
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "IF WE DUMP THE ARRAY AGAIN, WE ",8D
|
||||
_PRN "CAN READILY SEE THE CHANGE:",8D8D
|
||||
_WAIT
|
||||
DUMP #]ARRAY1;#2
|
||||
DUMP #]ARRAY1+2;#10
|
||||
DUMP #]ARRAY1+12;#10
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
_PRN "OF COURSE, THIS IS OF LIMITED",8D
|
||||
_PRN "USE WITHOUT A FUNCTION TO EXTRACT",8D
|
||||
_PRN "THE ELEMENT INA USEFUL FASHION--",8D
|
||||
_PRN "RELYING ON THE DUMP MACRO ONLY GOES",8D
|
||||
_PRN "SO FAR. THAT'S WHERE OUR THIRD MACRO",8D
|
||||
_PRN "AND SUBROUTINE COMES IN..."
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "8-BIT, 1-DIMENSION ARRAYS: GET",8D
|
||||
_PRN "==============================",8D8D
|
||||
_PRN "THE GET81 MACRO GETS THE DATA",8D
|
||||
_PRN "STORED IN AN ELEMENT AND COPIES IT",8D
|
||||
_PRN "TO RETURN, STORING THE ELEMENT",8D
|
||||
_PRN "LENGTH IN RETLEN. THIS ALLOWS YOU",8D
|
||||
_PRN "TO USE THE ARRAY..WELL, LIKE AN",8D
|
||||
_PRN "ARRAY. SO:",8D8D
|
||||
_WAIT
|
||||
_PRN " GET81 #ARRAY1;#3",8D8D
|
||||
_PRN "RETRIEVES ELEMENT 3 OF ARRAY1 AND",8D
|
||||
_PRN "STORES IT IN RETURN FOR USE BY YOUR",8D
|
||||
_PRN "PROGRAM. WE CAN DUMP RETURN BEFORE",8D
|
||||
_PRN "AND AFTER USING GET81 TO SHOW",8D
|
||||
_PRN "THE DIFFERENCE:",8D8D
|
||||
_WAIT
|
||||
_PRN "BEFORE:",8D
|
||||
DUMP #RETURN;RETLEN
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
_PRN "AFTER: ",8D
|
||||
GET81 #]ARRAY1;#3
|
||||
DUMP #RETURN;RETLEN
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "16-BITS AND ONE DIMENSION: DIM161",8D
|
||||
_PRN "=================================",8D8D
|
||||
_PRN "DIM161 WORKS IN FORM AND FUNCTION JUST",8D
|
||||
_PRN "AS DIM81 DOES, EXCEPT IT ACCEPTS",8D
|
||||
_PRN "A TWO-BYTE VALUE FOR THE NUMBER",8D
|
||||
_PRN "OF ELEMENTS. BECAUSE OF THIS, THE ARRAY",8D
|
||||
_PRN "HEADER CREATED IS THREE BYTES INSTEAD",8D
|
||||
_PRN "OF THE TWO IN 8-BIT ARRAYS. SO:",8D8D
|
||||
_WAIT
|
||||
_PRN " DIM161 #ARRAY1;#300;#2;#$00",8D8D
|
||||
_PRN "WILL INITIALIZE AN ARRAY WITH 0..300",8D
|
||||
_PRN "ELEMENTS, ONE DIMENSION. AGAIN, THIS",8D
|
||||
_PRN "CAN TECHNICALLY USE A BIT MORE THAN",8D
|
||||
_PRN "65,000 ELEMENTS, BUT THIS IS BEYOND",8D
|
||||
_PRN "IMPRACTICAL FOR THE PURPOSES OF THIS",8D
|
||||
_PRN "LIBRARY, AS A CONSECUTIVE 64K OF BYTES",8D
|
||||
_PRN "IS UNLIKELY IN MOST APPLE II SYSTEMS.",8D8D
|
||||
_WAIT
|
||||
DIM161 #]ARRAY1;#300;#2;#$00
|
||||
JSR ]HOME
|
||||
_PRN "16-BITS AND ONE DIMENSION: PUT",8D
|
||||
_PRN "==============================",8D8D
|
||||
_PRN "NOW THAT WE HAVE CREATED OUR ARRAY,",8D
|
||||
_PRN "WE CAN USE PUT161 TO CHANGE THE DATA",8D
|
||||
_PRN "IN EACH ELEMENT. AGAIN, THIS WORKS",8D
|
||||
_PRN "EXACTLY LIKE PUT81, BUT WITH SOME",8D
|
||||
_PRN "EXTRA BYTES HERE AND THERE TO ACCOUNT",8D
|
||||
_PRN "FOR THE EXTRA BREADTH. LET'S FILL",8D
|
||||
_PRN "EACH ELEMENT 0..300 WITH ITS OWN VALUE--",8D
|
||||
_PRN "THAT IS, 0 WILL HOLD 0, 1 WILL HOLD 1,",8D
|
||||
_PRN "299 WILL HOLD 2999 AND 300 WILL HOLD",8D
|
||||
_PRN "300:",8D8D
|
||||
_WAIT
|
||||
_PRN " LDA #0",8D
|
||||
_PRN " STA ]COUNT",8D
|
||||
_PRN " STA ]COUNT+1",8D
|
||||
_PRN " TAX",8D
|
||||
_PRN " TAY",8D
|
||||
_PRN "LP ",8D
|
||||
_PRN " PUT161 #]COUNT'#]ARRAY1;]COUNT",8D
|
||||
_PRN " LDA ]COUNT",8D
|
||||
_PRN " CLC",8D
|
||||
_PRN " ADC #1",8D
|
||||
_PRN " STA ]COUNT",8D
|
||||
_PRN " LDA ]COUNT+1",8D
|
||||
_PRN " ADC #0",8D
|
||||
_PRN " STA ]COUNT+1",8D
|
||||
_PRN " CMP #$01",8D
|
||||
_PRN " BNE LP",8D
|
||||
_PRN " LDA ]COUNT",8D
|
||||
_PRN " CMP #$2C",8D
|
||||
_PRN " BNE LP"
|
||||
_WAIT
|
||||
*
|
||||
LDA #0
|
||||
STA ]COUNT1
|
||||
STA ]COUNT1+1
|
||||
TAX
|
||||
TAY
|
||||
LP161
|
||||
PUT161 #]COUNT1;#]ARRAY1;]COUNT1
|
||||
LDA ]COUNT1
|
||||
DUMP #]COUNT1;#2
|
||||
LDA ]COUNT1
|
||||
CLC
|
||||
ADC #1
|
||||
STA ]COUNT1
|
||||
LDA ]COUNT1+1
|
||||
ADC #0
|
||||
STA ]COUNT1+1
|
||||
CMP #$01
|
||||
BNE LP161
|
||||
LDA ]COUNT1
|
||||
CMP #$2D
|
||||
BNE LP161
|
||||
_WAIT
|
||||
*
|
||||
JSR ]HOME
|
||||
_PRN "WE CAN NOW DUMP THE ENTIRE ARRAY",8D
|
||||
_PRN "TO SEE HOW EACH ELEMENT IS STORED,"
|
||||
_PRN "ALONG WITH THE THREE BYTE HEADER:",8D8D
|
||||
_WAIT
|
||||
DUMP #]ARRAY1;#3
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+3;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+63;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+123;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+183;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+243;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+303;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+363;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+423;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+483;#60
|
||||
_WAIT
|
||||
DUMP #]ARRAY1+543;#64
|
||||
_PRN " ",8D8D
|
||||
_PRN "WELL THAT CERTAINLY WAS A DUMP...",8D8D
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "16-BITS IN ONE DIMENSION: GET",8D
|
||||
_PRN "=============================",8D8D
|
||||
_PRN "AND OF COURSE, WE HAVE THE SAME GET",8D
|
||||
_PRN "MACRO FOR 16-BIT, 1D ARRAYS, GET162. THIS",8D
|
||||
_PRN "AGAIN FUNCTIONS THE SAME AS ITS 8-BIT",8D
|
||||
_PRN "COUNTERPART, EXCEPT THE INDEX IS TWO ",8D
|
||||
_PRN "BYTES RATHER THAN ONE.",8D8D
|
||||
_PRN " ",8D8D
|
||||
_PRN "THUS:",8D8D
|
||||
_WAIT
|
||||
_PRN " GET161 #]ARRAY1;#270",8D8D
|
||||
_PRN "RETURNS: "
|
||||
GET161 #]ARRAY1;#270
|
||||
DUMP #RETURN;RETLEN
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "8-BIT, 2D ARRAYS: FML ANOTHER DIM",8D
|
||||
_PRN "=================================",8D8D
|
||||
_PRN "AT THIS POINT, YOU SHOULD HAVE A",8D
|
||||
_PRN "GOOD GRASP AS TO HOW ARRAYS WORK",8D
|
||||
_PRN "IN THIS LIBRARY. TWO-DIMENSIONAL",8D
|
||||
_PRN "ARRAYS DO NOT SIGNIFICANTLY DIFFER",8D
|
||||
_PRN "FROM ONE-DIMENSIONAL ARRAYS; IT JUST",8D
|
||||
_PRN "MEANS THAT AN EXTRA ELEMENT INDEX IS",8D
|
||||
_PRN "NEEDED AS A PARAMETER. AS SUCH, WE CAN",8D
|
||||
_PRN "MOSTLY BREEZE THROUGH THE REST OF THESE.",8D8D
|
||||
_WAIT
|
||||
_PRN "TO INITIALIZE A 2D, 8BIT ARRAY:",8D8D
|
||||
_PRN " DIM82 #ARRAY1;#10;#10;#1;#00",8D8D
|
||||
_PRN "THIS CREATES AN ARRAY OF TEN BY TEN",8D
|
||||
_PRN "ELEMENTS (TOTAL OF 100 ELEMENTS) WITH ",8D
|
||||
_PRN "A LENGTH OF ONE BYTE. EACH ELEMENT",8D
|
||||
_PRN "IS INITIALIZED TO A VALUE OF 0."
|
||||
_WAIT
|
||||
DIM82 #]ARRAY1;#10;#10;#1;#0
|
||||
JSR ]HOME
|
||||
_PRN "NOTE THAT WE HAVE A LONGER HEADER",8D
|
||||
_PRN "THANKS TO THE EXTRA ELEMENT INDEX. THE",8D
|
||||
_PRN "HEADER CONTAINS THE X-DIMENSION AS ",8D
|
||||
_PRN "BYTE ZERO, Y-DIMENSION AS BYTE ONE,",8D
|
||||
_PRN "AND ELEMENT LENGTH AS BYTE TWO, AS SUCH:",8D8D
|
||||
DUMP #]ARRAY1;#3
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
_PRN "AND THE REST OF THE ARRAY:",8D8D
|
||||
DUMP #]ARRAY1+3;#10
|
||||
DUMP #]ARRAY1+13;#10
|
||||
DUMP #]ARRAY1+23;#10
|
||||
DUMP #]ARRAY1+33;#10
|
||||
DUMP #]ARRAY1+43;#10
|
||||
DUMP #]ARRAY1+53;#10
|
||||
DUMP #]ARRAY1+63;#10
|
||||
DUMP #]ARRAY1+73;#10
|
||||
DUMP #]ARRAY1+83;#10
|
||||
DUMP #]ARRAY1+93;#10
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "8-BIT, 2-DIMENSIONAL ARRAYS: PUT, GET",8D
|
||||
_PRN "=====================================",8D8D
|
||||
_PRN "AND OF COURSE, JUST AS WITH 1D ARRAYS",8D
|
||||
_PRN "WE CAN USE PUT82 AND GET82 TO WRITE",8D
|
||||
_PRN "TO AND READ FROM THE ARRAY:",8D8D
|
||||
_WAIT
|
||||
_PRN " LDA #$FF",8D
|
||||
_PRN " STA ]VAR1",8D
|
||||
_PRN " PUT82 #]VAR1;#]ARRAY1;#4;#5",8D
|
||||
_PRN " GET82 #]ARRAY1;#4;#5",8D
|
||||
_PRN " DUMP #RETURN;RETLEN",8D8D
|
||||
_PRN "PRODUCES:",8D8D
|
||||
_WAIT
|
||||
LDA #$FF
|
||||
STA ]VAR1
|
||||
PUT82 #]VAR1;#]ARRAY1;#4;#5
|
||||
GET82 #]ARRAY1;#4;#5
|
||||
DUMP #RETURN;RETLEN
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN "16-BIT 2D ARRAYS: DIM, GET, PUT",8D
|
||||
_PRN "===============================",8D8D
|
||||
_PRN "AND LASTLY, WE CAN USE 16-BIT, TWO-",8D
|
||||
_PRN "DIMENSIONAL ARRAYS VIA THE DIM162,",8D
|
||||
_PRN "PUT162, AND GET162 MACROS:",8D8D
|
||||
_PRN " DIM162 #]ARRAY1;#300;#300;#1;#$00",8D
|
||||
_PRN " PUT162 #]VAR1;#]ARRAY1;#280;#280",8D
|
||||
_PRN " GET162 #]ARRAY1;#280;#280",8D
|
||||
_PRN " DUMP #RETURN;RETLEN",8D8D
|
||||
_PRN "PRODUCES:",8D8D
|
||||
_WAIT
|
||||
DIM162 #]ARRAY1;#300;#2;#1;#$00
|
||||
PUT162 #]VAR1;#]ARRAY1;#280;#1
|
||||
GET162 #]ARRAY1;#280;#1
|
||||
DUMP #RETURN;RETLEN
|
||||
_WAIT
|
||||
JSR ]HOME
|
||||
_PRN " ",8D8D
|
||||
_PRN "FIN.",8D8D8D
|
||||
*
|
||||
JMP REENTRY
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BOTTOM INCLUDES (ROUTINES) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINE INCLUDES
|
||||
*
|
||||
** 8-BIT 1-DIMENSIONAL ARRAY SUBROUTINES
|
||||
*
|
||||
PUT MIN.SUB.ADIM81
|
||||
PUT MIN.SUB.AGET81
|
||||
PUT MIN.SUB.APUT81
|
||||
*
|
||||
** 8-BIT 2-DIMENSIONAL ARRAY SUBROUTINES
|
||||
*
|
||||
PUT MIN.SUB.ADIM82
|
||||
PUT MIN.SUB.AGET82
|
||||
PUT MIN.SUB.APUT82
|
||||
*
|
||||
** 16-BIT 1-DIMENSIONAL ARRAYS
|
||||
*
|
||||
PUT MIN.SUB.ADIM161
|
||||
PUT MIN.SUB.APUT161
|
||||
PUT MIN.SUB.AGET161
|
||||
*
|
||||
** 16-BIT 2-DIMENSIONAL ARRAYS
|
||||
*
|
||||
PUT MIN.SUB.ADIM162
|
||||
PUT MIN.SUB.APUT162
|
||||
PUT MIN.SUB.AGET162
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue