Open main menu

CDOT Wiki β

Changes

Fall 2021 SPO600 Weekly Schedule

3,140 bytes added, 07:20, 27 September 2021
no edit summary
|2||Sep 13||[[#Week 2 - Class I|Binary Representation of Data]]||[[#Week 2 - Class II|Computer architecture basics / Introduction to Assembly Language / 6502 Assembly Basics Lab (Lab 2)]]||[[#Week 2 Deliverables|Lab 2]]
|-
|3||Sep 20||[[#Week 3 - Class I|Math, Assembly language conventions, and Examples]]||[[#Week 3 - Class II|6502 Math Lab (Lab 3)Jumps, Branches, and Subroutines]]||[[#Week 3 Deliverables|Lab 3]]
|-
|4||Sep 27||[[#Week 4 - Class I|Addressing ModesCharacters, Strings, and Services]]||[[#Week 4 - Class II|6502 Assembler Math Lab (Cont'dLab 3)]]||[[#Week 4 Deliverables|September Blog Posts]]
|-
|5||Oct 4||[[#Week 5 - Class I|System Routines / Strings / Building Code]]||[[#Week 5 - Class II|6502 String Lab (Lab 4)]]||[[#Week 5 Deliverables|Lab 4]]
|-
|6||Oct 12||style="background:#f0f0ff"|[[#Week 6 - Class I|Thanksgiving Holiday]]||[[#Week 6 - Class II|x86_64 and AArch64 Assembly]]||[[#Week 6 Deliverables|Lab 5]]
* [[Computer Architecture]]
==== Introduction to Assembly Language on the 6502 Processor ====https://web.microsoftstream.com/video/6a645edd-3537-4910-843c-6d32f6678e79
To understand basic assembly/machine language concepts, we're going to start with a very simple processor: the [[6502]].
<!-- * Blog about [[6502 Assembly Language Math Lab|Lab 3]] -->
* Complete and blog about [[6502 Assembly Language Lab|Lab 2]]
 
== Week 4 ==
=== Week 4 - Class I ===
 
=== Videos ===
* [https://web.microsoftstream.com/video/66e3eb13-4f7c-462f-8fab-5debc365bbb2 Week 4 Announcements]
* [https://web.microsoftstream.com/video/ac307c3e-10ea-4046-b339-675ac4e6d6c7 6502 Characters, Strings, and Services]
* [https://web.microsoftstream.com/video/6a645edd-3537-4910-843c-6d32f6678e79 A 6502 Assembly Langauge Hack]
 
==== Characters, Strings, and System Routines ====
* Characters are encoded in binary by numeric reference to a character in a character set. For example, characters in ASCII are encoded as 7-bit values in the range 0-127, which refer to characters in the [https://www.man7.org/linux/man-pages/man7/ascii.7.html American Standard Code for Information Interchange] character set: code 32 represents a space (" "), 48 represents a zero ("0"), code 49 represents a one ("1"), and code 65 represents a capital letter A.
* Strings in assembler are stored as sequences of bytes. As is usually the case in assembler, memory management is left to the programmer. You can terminate strings with null bytes (C-style), which are easy to detect one some CPUs (e.g., <code>lda</code> followed by <code>bne / beq</code> on a 6502), or you can use character counts to track string lengths.
* The [[6502 Emulator|6502 emulator]] has a 80x25 character display mapped starting at location '''$f000'''. Writing to a byte to screen memory will cause that character to be displayed at the corresponding location on the screen, if the character is printable. If the high bit is set, the character will be displayed in <span style="background:black;color:white;">&nbsp;reverse video </span>. For example, storing the ASCII code for "A" (which is 65 or $41) into memory location $f000 will display the letter "A" as the first character on the screen; ORing the value with 128 ($80) yields a value of 193 or $d1, and storing that value into $f000 will display <span style="background:black;color:white;">A</span> as the first character on the screen.
* A "ROM chip" with screen control routines is mapped into the emulator at the end of the memory space (at the time of writing, the current version of the ROM exists in pages $fe and $ff). Details of the available ROM routines can be viewed using the "Notes" button in the emulator or on the [[6502_Emulator#ROM_Routines|emulator page]] on this wiki.
** To write to the screen, you can use the SCINIT (SCreen INITialize) routine followed by calls to the CHROUT (CHaRacter OUTput) routine. CHROUT handles things like cursor movement, newline ($0d) characters, and screen scrolling.
<!--
=== Week 4 - Class II ===
==== Characters, Strings , and System Routines ====* Characters are encoded in binary by numeric reference to a character in a character set. For example, characters in ASCII are encoded as 7-bit values in the range 0-127, which refer to characters in the [https://www.man7.org/linux/man-pages/man7/ascii.7.html American Standard Code for Information Interchange] character set: code 32 represents a space (" "), 48 represents a zero ("0"), code 49 represents a one ("1"), and code 65 represents a capital letter A.* Strings in assembler are stored as sequences of bytes. As is usually the case in assembler, memory management is left to the programmer. You can terminate strings with null bytes (C-style), which are easy to detect one some CPUs (e.g., <code>lda</code> followed by <code>bne / beq</code> on a 6502), or you can use character counts to track string lengths.
* The [[6502 Emulator|6502 emulator]] has a 80x25 character display mapped starting at location '''$f000'''. Writing to a byte to screen memory will cause that character to be displayed at the corresponding location on the screen, if the character is printable. If the high bit is set, the character will be displayed in <span style="background:black;color:white;">&nbsp;reverse video </span>. For example, storing the ASCII code for "A" (which is 65 or $41) into memory location $f000 will display the letter "A" as the first character on the screen; ORing the value with 128 ($80) yields a value of 193 or $d1, and storing that value into $f000 will display <span style="background:black;color:white;">A</span> as the first character on the screen.
* A "ROM chip" with screen control routines is mapped into the emulator at the end of the memory space (at the time of writing, the current version of the ROM exists in pages $fe and $ff). Details of the available ROM routines can be viewed using the "Notes" button in the emulator or on the [[6502_Emulator#ROM_Routines|emulator page]] on this wiki.
* Strings in assembler are stored as sequences of bytes. As is usually the case in assembler, memory management is left to the programmer. You can terminate strings with null bytes (C-style), which are easy to detect one some CPUs (e.g., <code>lda</code> followed by <code>bne / beq</code> on a 6502), or you can use character counts to track string lengths.
==== Building Code ====