From: Ullrich von Bassewitz (uz_at_musoftware.de)
Date: 2003-08-25 18:46:28
On Mon, Aug 25, 2003 at 12:26:17PM -0400, Chris Sebrell wrote: > I'm working on an 80-Column display library (assembler/CA65) for the Apple II and I'm > wondering what the .BSS segment is really used for. The docs just say that ".BSS" > directive "switches to the BSS segment." Is this un-initialized data? I vaguely recall > this segment name from my way-back-when x86 days. Yes, bss is uninitialized data. If you're using just the assembler, and don't plan to make romable code, you can ignore it. > Right now I'm just using ".CODE" and ".DATA" For simplicity, you could also just use code. However, the rules I'm using for my own code (and for cc65 code) are: STARTUP, LOWCODE, CODE Contains just code, no data, and is not writable. That does especially mean no self modifying code. This means that CODE can go into a ROM. RODATA Read only data, which is not modified. LOWDATA, DATA Initialized data that is modified by the program. By definition, pieces of self modyfing code go here or into BSS. BSS Uninitialized data. BSS segments are allocated in memory but there is no data in the output file for these segments, which saves space on the disk. The startup code for C language programs will zero all BSS segments, which means that any variable will have a value of zero on startup. ZEROPAGE This is like BSS, but located in the zeropage. Having read only CODE and RODATA segments is important for ROMable code, and sometimes for debugging: The VICE emulator for example is able to write protect memory regions using a watchpoint feature. Assuming that you have one of those ugly memory overwrite error, it sometimes helps to write protect all segments that do contain read only code and data and then wait until the program tries an illegal write operation. Regards Uz -- Ullrich von Bassewitz uz_at_musoftware.de ---------------------------------------------------------------------- To unsubscribe from the list send mail to majordomo_at_musoftware.de with the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2003-08-25 18:46:39 CEST